# Quickstart > Make your first request in two minutes: create a key, point an SDK at zurelay, send a message. Source: https://zurelay.com/docs/quickstart Three steps: a key, two settings, one request. ## 1. Create an account and a key 1. [Create an account](https://zurelay.com/signup) (no password: we email you a code) and add credit under [Billing](https://zurelay.com/app/billing). 2. Open [API keys](https://zurelay.com/app/keys), name a key and create it. Copy it right away: you see the full key once. ## 2. Set the key and base URL Keep the key out of your code. In your shell, or in a .env file your app loads: .env: ``` ZURELAY_API_KEY=zr_live_your_key_here ``` Then install an SDK if you don’t have one: `pip install openai` for Python, `npm install openai` for Node. Anthropic’s SDKs work too (see [Anthropic Messages](https://zurelay.com/docs/anthropic)). ## 3. Send a request **Python** (`main.py`): ```python import os from openai import OpenAI client = OpenAI( base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"], ) response = client.chat.completions.create( model="gpt-6-sol", messages=[ { "role": "system", "content": "You are a concise assistant." }, { "role": "user", "content": "Give me three names for a coffee shop on the moon." } ], ) print(response.choices[0].message.content) ``` **Node.js** (`index.mjs`): ```javascript import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.zurelay.com/v1", apiKey: process.env.ZURELAY_API_KEY, }); const response = await client.chat.completions.create({ "model": "gpt-6-sol", "messages": [ { "role": "system", "content": "You are a concise assistant." }, { "role": "user", "content": "Give me three names for a coffee shop on the moon." } ] }); console.log(response.choices[0].message.content); ``` **cURL**: ```bash curl https://api.zurelay.com/v1/chat/completions \ -H "Authorization: Bearer $ZURELAY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-6-sol", "messages": [ { "role": "system", "content": "You are a concise assistant." }, { "role": "user", "content": "Give me three names for a coffee shop on the moon." } ] }' ``` The answer comes back in OpenAI’s format, with the model that answered and the tokens used: Response: ```json { "id": "chatcmpl-...", "object": "chat.completion", "created": 1790870400, "model": "gpt-6-sol", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "1. Lunar Grind\n2. ..." }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 31, "completion_tokens": 24, "total_tokens": 55 } } ``` ## Stream it Add `stream: true` to get the answer as it’s written, the same way OpenAI streams it. **Python** (`main.py`): ```python import os from openai import OpenAI client = OpenAI( base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"], ) stream = client.chat.completions.create( model="gemini-3.7-flash", messages=[ { "role": "user", "content": "Write a haiku about latency." } ], stream=True, ) for chunk in stream: if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True) ``` **Node.js** (`index.mjs`): ```javascript import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.zurelay.com/v1", apiKey: process.env.ZURELAY_API_KEY, }); const stream = await client.chat.completions.create({ "model": "gemini-3.7-flash", "messages": [ { "role": "user", "content": "Write a haiku about latency." } ], "stream": true }); for await (const chunk of stream) { process.stdout.write(chunk.choices[0]?.delta?.content ?? ""); } ``` **cURL**: ```bash curl https://api.zurelay.com/v1/chat/completions \ -H "Authorization: Bearer $ZURELAY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gemini-3.7-flash", "messages": [ { "role": "user", "content": "Write a haiku about latency." } ], "stream": true }' ``` ## Next - [Pick a model](https://zurelay.com/docs/models): IDs, prices and what each model reads. - [Send a picture or a PDF](https://zurelay.com/docs/multimodal): Files go in the message, as data or a link. - [Make an image](https://zurelay.com/docs/images): One call to /v1/images/generations. - [Use your tools](https://zurelay.com/docs/integrations): Claude Code, Cursor, LangChain and more.