§15.06

Your First OpenAI API Request (Responses API)

Create a key, set OPENAI_API_KEY, and make a working Responses API call in curl, Python, and Node — the API OpenAI recommends for new projects.

published 06 Sept 2026 checked against docs 06 Sept 2026 3 min in Building with the API Markdown

On this page6 sections
  1. 1. Key and environment variable
  2. 2. curl
  3. 3. Python
  4. 4. Node
  5. 5. System-style instructions and multi-turn input
  6. Picking a model

OpenAI has two text endpoints. /v1/chat/completions still works, but the Responses API (/v1/responses) is the one OpenAI recommends for new projects — it handles tools, built-in tools and multi-step turns inside a single call.

1. Key and environment variable

export OPENAI_API_KEY="your-api-key-here"

Create the key in the OpenAI dashboard, then put it in the environment. Both SDKs read OPENAI_API_KEY automatically, so nothing below hardcodes a key.

2. curl

curl https://api.openai.com/v1/responses \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-6-astra",
    "input": "Explain HTTP 429 in one sentence."
  }'

One prompt, one response. Note the differences from the Claude API: bearer auth instead of x-api-key, input instead of messages, and no mandatory token limit.

3. Python

pip install openai
from openai import OpenAI

client = OpenAI()  # reads OPENAI_API_KEY

response = client.responses.create(
    model="gpt-6-astra",
    input="Explain HTTP 429 in one sentence.",
)

print(response.output_text)

output_text is a convenience property that concatenates the text output. The full structure lives in response.output — a list of items that can include messages, reasoning and tool calls.

4. Node

import OpenAI from "openai";

const client = new OpenAI(); // reads OPENAI_API_KEY

const response = await client.responses.create({
  model: "gpt-6-astra",
  input: "Explain HTTP 429 in one sentence.",
});

console.log(response.output_text);

Install with npm install openai. Same request shape as Python — the SDKs mirror the JSON body.

5. System-style instructions and multi-turn input

response = client.responses.create(
    model="gpt-6-astra",
    instructions="Answer in one sentence. No preamble.",
    input=[
        {"role": "user", "content": "Why is my API call rate limited?"},
        {"role": "assistant", "content": "Because you exceeded the request quota."},
        {"role": "user", "content": "How do I find the quota?"},
    ],
)

instructions is the high-level behaviour channel and takes priority over input. When you need it inside the conversation instead, input accepts a message array with the roles developer, user and assistant — developer is the Responses API’s system role.

Picking a model

gpt-6-astra is the current flagship; gpt-5.6-terra balances intelligence and cost, gpt-5.6-luna targets high-volume workloads. Model IDs turn over quickly — copy the exact string from OpenAI’s models page rather than from a blog post.


Next: structured outputs · streaming responses.

← All Building with the API plates · Search all guides

↑↓ move↵ openalt+↵ copy first command

Keyboard

⌘/ctrl+K or /
Search all guides
alt+↵
In search: copy the guide's first command
j / k
Move through a list of guides
c
On a guide: copy its first command
t
Toggle light / dark
?
This list