Get your API key
Create an account at platform.openai.com. Navigate to API Keys and create a new secret key. Store it in an environment variable — never hardcode it in your source code. Set it with: `export OPENAI_API_KEY=sk-...` on macOS/Linux, or add it to your `.env` file with `dotenv`.
OpenAI bills per tokenTokenThe basic unit of text that an LLM processes — roughly corresponding to a word or word-piece. Models read input and produce output in tokens, which is also how API usage is measured and billed.Learn more →. New accounts receive $5 in free credit. Set a monthly spending limit in your account settings to prevent unexpected charges during development.
Install and make your first call (Python)
Install the SDK: `pip install openai`. Then: `from openai import OpenAI; client = OpenAI()`. The client automatically reads `OPENAI_API_KEY` from your environment.
Make a chat completion: `response = client.chat.completions.create(model='gptGPTGenerative Pre-trained Transformer — the model architecture and family name behind OpenAI's most famous models, from GPT-2 to GPT-5.Learn more →-4o-mini', messages=[{'role': 'user', 'content': 'What is the capital of France?'}])`. Access the response text with `response.choices[0].message.content`.
First call in Node.js / TypeScript
Install: `npm install openai`. Then: `import OpenAI from 'openai'; const client = new OpenAI();`. The constructor reads `OPENAI_API_KEY` from `process.env`.
Call: `const response = await client.chat.completions.create({ model: 'gpt-4o-mini', messages: [{ role: 'user', content: 'Hello!' }] }); console.log(response.choices[0].message.content);`
Streaming responses
StreamingStreamingStreaming returns a model's tokens incrementally as they're generated rather than waiting for the complete response to finish.Learn more → shows tokens as they are generated, making applications feel much more responsive. In Python: `stream = client.chat.completions.create(model='gpt-4o-mini', messages=[...], stream=True)`. Then `for chunk in stream: print(chunk.choices[0].delta.content or '', end='', flush=True)`.
In Node.js: `const stream = await client.chat.completions.stream({...})`. Iterate with `for await (const chunk of stream) { process.stdout.write(chunk.choices[0]?.delta?.content || '') }`. Call `await stream.finalChatCompletion()` to get the complete response object including usage stats.
Handle errors and manage costs
Always wrap API calls in try-except (Python) or try-catch (JS). Handle `openai.RateLimitError` with exponential backoff — wait 1s, then 2s, then 4s between retries. Handle `openai.AuthenticationError` by checking your API key. Handle `openai.BadRequestError` for content policy violations.
Track token usage from `response.usage.total_tokens`. GPT-4o-mini costs $0.15 per million input tokens and $0.60 per million output tokens (as of mid-2025) — cheap enough for most applications. Set `max_tokens` to limit output length and prevent runaway costs on edge cases.