Naar de inhoud
Responses API

Responses API

Nieuw

POST /v1/responses accepteert instructies en een lijst met inputitems en geeft een response-object terug dat uit outputitems bestaat, in het OpenAI Responses-formaat. Gebruik het met de responses-API van de OpenAI-SDK en met tools die erop zijn gebouwd, zoals Codex CLI. Het endpoint houdt geen status bij: stuur bij elke aanvraag het hele gesprek mee.

POST https://api.shannon-ai.com/v1/responses

De kleinste aanvraag is een model-id en een tekst. Het antwoord komt niet met streaming tenzij je erom vraagt.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

response = client.responses.create(
    model="shannon-3",
    input="Say hello in one sentence.",
)

print(response.output_text)

Het antwoord is een response-object. Zijn output bevat de redenering, als het model heeft geredeneerd, en het bericht:

200 JSON
{
  "id": "resp_5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
  "object": "response",
  "created_at": 1791625200,
  "model": "shannon-3",
  "status": "completed",
  "error": null,
  "incomplete_details": null,
  "instructions": null,
  "metadata": {},
  "parallel_tool_calls": true,
  "temperature": null,
  "tool_choice": "auto",
  "tools": [],
  "top_p": null,
  "output": [
    {
      "id": "rs_8a2e6c1f4b7d4e03b9c5a1d70f3e2b64",
      "type": "reasoning",
      "summary": [
        {
          "type": "summary_text",
          "text": "The user wants a greeting in one sentence. Keep it short and friendly."
        }
      ]
    },
    {
      "id": "msg_1c7b9e3a5d2f4a86b0e4c8d19a6f7e25",
      "type": "message",
      "role": "assistant",
      "status": "completed",
      "content": [
        {
          "type": "output_text",
          "text": "Hello, it is good to meet you.",
          "annotations": []
        }
      ]
    }
  ],
  "usage": {
    "input_tokens": 1184,
    "output_tokens": 46,
    "total_tokens": 1230
  }
}

Requestvelden

model en input heeft een aanvraag nodig. De kolom Toegepast door noemt de modellen waarop een veld het antwoord verandert. De gehoste open-weight modellen zijn de twaalf id's van de modellijst; de Shannon 3-familie is shannon-3, shannon-3-pro, shannon-3.1 en shannon-3.1-pro. Modellen en prijzen

Veld Type Standaard Beschrijving Toegepast door
model string Vereist. Een id uit de modellijst. De vergelijking is niet hoofdlettergevoelig. Een ontbrekende of niet-gepubliceerde id geeft 400 unknown model. Alle modellen
input string | array Een string, die als één gebruikersbericht wordt gelezen, of een array met inputitems. Zie Inputitems hieronder. Alle modellen
instructions string Instructies voor het model, de systeemprompt van dit formaat. Gehoste open-weight modellen, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true verstuurt het antwoord als server-sent events. Zie Streaming hieronder. Alle modellen
max_output_tokens integer 4096 Bovengrens van het antwoord, in tokens. Een waarde buiten 1 tot 65,536 wordt naar dat bereik verplaatst. Het is ook het bedrag dat van je saldo wordt apart gezet terwijl de aanvraag loopt. Zie Outputlimiet hieronder. Gehoste open-weight modellen, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Samplingtemperatuur. Bij de gehoste open-weight modellen worden waarden tussen 0 en 2 gehouden. Gehoste open-weight modellen; shannon-1.6-*, shannon-2-* en shannon-coder-1 bij antwoorden zonder streaming
top_p number Nucleus sampling. Waarden worden tussen 0 en 1 gehouden. Gehoste open-weight modellen
tools array De functies die het model mag aanroepen, in de platte vorm van dit formaat: {"type": "function", "name", "description", "parameters"}. Zie Tools hieronder. Alle modellen
tool_choice string | object auto "auto" laat het model beslissen. "required" laat het een tool aanroepen. {"type": "function", "name": "…"} laat het die tool aanroepen. Gehoste open-weight modellen
reasoning object {"effort": "…"} met off, low, medium of high. Elke andere waarde geeft 400. Gehoste open-weight modellen
text object {"format": {…}} vraagt om een JSON-antwoord. Zie Gestructureerde output hieronder. Alle Shannon-niveaus; gehoste open-weight modellen zoals per id vermeld

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user en prompt_cache_key worden geaccepteerd zodat bestaande clientcode ongewijzigd draait. Ze veranderen het antwoord niet. Omdat er geen gesprek wordt opgeslagen, bevat een vervolgaanvraag de eerdere beurten in input.

Inputitems

Een inputitem is ofwel een bericht, met een role en een content, ofwel een getypeerd item dat een toolaanroep of het resultaat ervan bevat. content is een string of een array van delen.

Item Beschrijving Toegepast door
{"role": "user", "content": …} Wat je vraagt. content is een string, of input_text- en input_image-delen. Alle modellen
{"role": "assistant", "content": …} Een eerder antwoord van het model. content is een string, of output_text-delen. Alle modellen
{"role": "system", "content": …}
{"role": "developer", "content": …}
Instructies binnen het gesprek. Gehoste open-weight modellen
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Een toolaanroep die het model in een eerder antwoord deed. arguments is een JSON-string. Alle modellen
{"type": "function_call_output", "call_id": "…", "output": "…"} Het resultaat van die aanroep. call_id is de id van de aanroep en output het resultaat als string. Alle modellen

Zet instructies in het veld instructions. Zet bij een id van de Shannon 3-familie instructies die moeten gelden in het user-bericht.

De items van de output van een antwoord kunnen ongewijzigd terug in input: message- en function_call-items worden gelezen, reasoning-items worden overgeslagen.

Contentdelen

Deel Beschrijving Beschikbaar op
{"type": "input_text", "text": "…"} Tekst van een gebruikersbericht. Alle modellen
{"type": "output_text", "text": "…"} Tekst van een assistentbericht. Alle modellen
{"type": "input_image", "image_url": "…"} Een afbeelding, als data:-URL met base64-inhoud of als http(s)-URL. Shannon 3-familie, shannon-1.6-lite, shannon-1.6-pro en de gehoste open-weight modellen die afbeeldingsinput vermelden
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} Een document (PDF, Word, PowerPoint of Excel): file_data bevat een data:-URL, of file_url een http(s)-URL. Shannon 3-familie

Bij de Shannon-niveaus worden afbeeldingen en bestanden gelezen uit het laatste user-item van input. Groottes en limieten hebben een eigen pagina. Afbeeldingen en bestanden

Een aanvraag met instructies en opties

Deze aanvraag stuurt instructies, een gesprek als inputitems, een outputlimiet, een temperatuur en een redeneer-effort mee. Ze gebruikt een gehost open-weight model, dat ze allemaal toepast.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

response = client.responses.create(
    model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    instructions="You are a physics teacher. Answer in two sentences.",
    input=[
        {"role": "user", "content": "Why is the sky blue?"},
        {"role": "assistant", "content": "Air scatters blue light more than red light."},
        {"role": "user", "content": "And why are sunsets red?"},
    ],
    max_output_tokens=512,
    temperature=0.3,
    reasoning={"effort": "low"},
)

for item in response.output:
    if item.type == "reasoning":
        print("reasoning:", item.summary[0].text)
    elif item.type == "message":
        print("answer:", item.content[0].text)
print(response.usage)

Het antwoord van een gehost open-weight model heeft id, object, model, created_at, status, output en usage. Zijn usage voegt de tokens toe die uit de cache zijn gelezen en de tokens die aan redeneren zijn besteed:

200 JSON
{
  "usage": {
    "input_tokens": 58,
    "input_tokens_details": {
      "cached_tokens": 0
    },
    "output_tokens": 67,
    "output_tokens_details": {
      "reasoning_tokens": 19
    },
    "total_tokens": 125
  }
}

Het response-object

id, object, status, output en usage staan in elk antwoord. Bouw je code daarop.

Veld Type Beschrijving Verstuurd door
id string resp_ gevolgd door 32 hexadecimale tekens. Alle modellen
object string Altijd response. Alle modellen
status string completed. In een stream is dat eerst in_progress, en failed in een response.failed-event. Alle modellen
output array De outputitems in de volgorde waarin het model ze produceerde: reasoning, message, function_call. Alle modellen
usage object input_tokens, output_tokens en total_tokens. Alle modellen
usage.input_tokens_details object cached_tokens: de inputtokens die uit de promptcache zijn gelezen. Gehoste open-weight modellen
usage.output_tokens_details object reasoning_tokens: de outputtokens die aan redeneren zijn besteed. Gehoste open-weight modellen
model string De canonieke id van het model dat heeft geantwoord. Shannon 3-familie, gehoste open-weight modellen
created_at integer Tijdstip van het antwoord, in Unix-seconden. Shannon 3-familie, gehoste open-weight modellen
instructions, tools, temperature, … instructions, tools en temperature herhalen de aanvraag. error en incomplete_details zijn null, metadata is {}, parallel_tool_calls is true, tool_choice is auto en top_p is null. Shannon 3-familie

Outputitems

Item Beschrijving
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} De redenering van het model als één summary_text-deel. Alleen aanwezig als het model heeft geredeneerd.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} Het antwoord: één output_text-deel met de tekst.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Een toolaanroep. arguments is een JSON-string. Stuur het resultaat terug met dezelfde call_id.

De OpenAI-SDK's voegen de tekst van het bericht voor je samen in response.output_text.

Streaming

Zet stream op true voor server-sent events. Elk frame heeft een event:-regel met de naam van het event en een data:-regel met een JSON-object; het object herhaalt de naam in type. Koppel deltas aan hun item via output_index.

Lees de events met de OpenAI-SDK op hun type:

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

stream = client.responses.create(
    model="shannon-3",
    input="Explain server-sent events in three sentences.",
    stream=True,
)

for event in stream:
    kind = getattr(event, "type", "error")     # an event without a type is an error event
    if kind == "response.reasoning_summary_text.delta":
        pass                                   # a piece of reasoning: event.delta
    elif kind == "response.output_text.delta":
        print(event.delta, end="", flush=True)
    elif kind == "response.output_item.done" and event.item.type == "function_call":
        print("\ntool call:", event.item.name, event.item.arguments)
    elif kind == "response.completed":
        print("\n", event.response.usage)
    elif kind in ("response.failed", "error"):
        raise RuntimeError("the stream failed, send the request again")

De events komen in deze volgorde binnen. De groepen voor redenering, het bericht en toolaanroepen verschijnen alleen als het antwoord ze heeft.

Event Payload Wanneer
response.created response Altijd eerst. response.status is in_progress en response.output is leeg.
response.in_progress response Altijd als tweede, met hetzelfde object.
response.output_item.added output_index, item De redenering begint: een reasoning-item met een lege summary.
response.reasoning_summary_text.delta output_index, summary_index, delta Een stukje van de redenering.
response.reasoning_summary_text.done output_index, summary_index, text De redenering is compleet: haar hele text.
response.output_item.done output_index, item Het voltooide reasoning-item.
response.output_item.added output_index, item Het antwoord begint: een message-item met status in_progress en zonder content.
response.content_part.added output_index, content_index, part Een leeg output_text-deel wordt geopend.
response.output_text.delta output_index, content_index, delta Een stukje van het antwoord.
response.output_text.done output_index, content_index, text Het antwoord is compleet: zijn hele text.
response.content_part.done output_index, content_index, part Het voltooide output_text-deel.
response.output_item.done output_index, item Het voltooide message-item, met status completed.
response.output_item.added output_index, item Een toolaanroep begint: een function_call-item met call_id, name en lege arguments.
response.function_call_arguments.delta output_index, delta De argumenten van de aanroep, compleet in één delta.
response.function_call_arguments.done output_index, arguments Dezelfde argumenten, als arguments.
response.output_item.done output_index, item Het voltooide function_call-item.
response.completed response Bij succes altijd als laatste: het hele response-object met output en usage.
200 text/event-stream
event: response.created
data: {"type":"response.created","response":{"id":"resp_5f0c…","object":"response","status":"in_progress","output":[], …}}

event: response.in_progress
data: {"type":"response.in_progress","response":{"id":"resp_5f0c…","object":"response","status":"in_progress","output":[], …}}

event: response.output_item.added
data: {"type":"response.output_item.added","output_index":0,"item":{"id":"msg_1c7b…","type":"message","role":"assistant","status":"in_progress","content":[]}}

event: response.content_part.added
data: {"type":"response.content_part.added","output_index":0,"content_index":0,"part":{"type":"output_text","text":""}}

event: response.output_text.delta
data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":"Server-sent"}

event: response.output_text.delta
data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":" events let a server push text over one HTTP reply."}

event: response.output_text.done
data: {"type":"response.output_text.done","output_index":0,"content_index":0,"text":"Server-sent events let a server push text over one HTTP reply."}

event: response.content_part.done
data: {"type":"response.content_part.done","output_index":0,"content_index":0,"part":{"type":"output_text","text":"Server-sent events let a server push text over one HTTP reply."}}

event: response.output_item.done
data: {"type":"response.output_item.done","output_index":0,"item":{"id":"msg_1c7b…","type":"message","role":"assistant","status":"completed","content":[{"type":"output_text","text":"Server-sent events let a server push text over one HTTP reply.","annotations":[]}]}}

event: response.completed
data: {"type":"response.completed","response":{"id":"resp_5f0c…","object":"response","status":"completed","output":[…],"usage":{"input_tokens":1190,"output_tokens":18,"total_tokens":1208}, …}}

Een stream die mislukt

Bij de Shannon-niveaus eindigt een mislukt antwoord met response.failed in plaats van response.completed. Zijn response.status is failed en response.error bevat een code, rate_limit_exceeded of server_error, en een message.

Bij de gehoste open-weight modellen is een fout een error-event met code api_error en een message. Daarna volgt nog steeds response.completed.

Behandel een stream als mislukt als hij een response.failed- of een error-event bevat, en verstuur de aanvraag opnieuw.

Tools

Een tool is een functie die je code uitvoert. Beschrijf hem in tools; als het model hem wil, bevat het antwoord een function_call-item in plaats van, of naast, het bericht.

Een tooldefinitie in tools:

tools
[
  {
    "type": "function",
    "name": "get_weather",
    "description": "Current weather for a city.",
    "parameters": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string"
        }
      },
      "required": [
        "city"
      ]
    }
  }
]

De output van een antwoord dat hem aanroept:

200 output
[
  {
    "id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "type": "function_call",
    "name": "get_weather",
    "call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "arguments": "{\"city\":\"Paris\"}"
  }
]

Voer de functie uit en verstuur de aanvraag daarna opnieuw, met de aanroep en het resultaat toegevoegd aan input:

input
[
  {
    "role": "user",
    "content": "What is the weather in Paris?"
  },
  {
    "type": "function_call",
    "call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "name": "get_weather",
    "arguments": "{\"city\":\"Paris\"}"
  },
  {
    "type": "function_call_output",
    "call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "output": "{\"temperature_c\": 18, \"sky\": \"cloudy\"}"
  }
]

Alleen tools van het type function worden gelezen. Bij shannon-1.6-*, shannon-2-* en shannon-coder-1 wordt het schema van parameters teruggebracht tot de gangbare JSON Schema-trefwoorden: oneOf wordt gelezen als anyOf, en trefwoorden zoals $ref, additionalProperties, const, default en title worden niet aan het model doorgegeven.

De tool_choice-waarden required en een benoemde functie worden toegepast door de gehoste open-weight modellen.

De toollus wordt volledig beschreven op een eigen pagina. Function calling

Gestructureerde output

Dit formaat schrijft gestructureerde output als text.format. Het schema staat direct in format, naast name en strict, niet onder een json_schema-lid zoals bij Chat Completions.

  • {"type": "json_object"} vraagt om een willekeurig JSON-object.
  • {"type": "json_schema", "name", "schema", "strict"} vraagt om JSON die je schema volgt. strict is true als je het weglaat.
POST /v1/responses
{
  "model": "shannon-1.6-lite",
  "input": "Extract the city and the date: 'The conference opens in Lisbon on 12 May 2027.'",
  "text": {
    "format": {
      "type": "json_schema",
      "name": "event",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "description": "ISO 8601 date"
          }
        },
        "required": [
          "city",
          "date"
        ]
      }
    }
  }
}

De JSON komt als tekst binnen in het output_text-deel van het bericht; parse hem zelf. Een gehost open-weight model zonder gestructureerde output geeft 400.

output_text
{"city": "Lisbon", "date": "2027-05-12"}

Welk model welke vorm accepteert, staat op een eigen pagina. Gestructureerde outputs

Redenering

Een model dat redeneert, geeft zijn redenering terug als outputitem van het type reasoning, vóór het bericht. In een stream komt het binnen als response.reasoning_summary_text.delta-events.

De gehoste open-weight modellen passen reasoning.effort toe: off, low, medium of high, met high als je niets stuurt. off geeft geen reasoning-item terug. Stuur het als object; een kale string wordt op dit endpoint niet gelezen.

De efforts worden op hun eigen pagina beschreven. Reasoning effort

Outputlimiet

max_output_tokens is 4,096 als je het niet meestuurt. Het is het aantal tokens dat van je saldo apart wordt gezet als de aanvraag begint; als het antwoord compleet is, wordt dat bedrag vervangen door wat de aanvraag heeft gebruikt. Een waarde die niet in je resterende saldo past, geeft 429 Quota exceeded.

Het begrenst de lengte van het antwoord bij shannon-1.6-*, shannon-2-* en shannon-coder-1, en de lengte van de antwoordtekst bij de gehoste open-weight modellen.

Op dit endpoint wordt shannon-coder-1 in tokens van je saldo in rekening gebracht, zoals elk ander model.

Een aanvraagbody mag maximaal 32 MiB zijn. Limieten en saldo

Fouten

Fouten gebruiken de OpenAI-foutbody: een error-object met type en message; sommige bevatten ook code en param met de waarde null. De tabel noemt wat dit endpoint het vaakst teruggeeft. De volledige lijst, met wat je opnieuw kunt proberen, heeft een eigen pagina. Foutafhandeling

Status Type Melding Wanneer
401 authentication_error Missing authentication
Invalid API key
Er is geen API-sleutel verstuurd, of de sleutel is onbekend of ingetrokken.
400 invalid_request_error unknown model: <id> model ontbreekt of is geen gepubliceerde id.
400 invalid_request_error No user message provided. Shannon-niveaus: input bevat geen gebruikerstekst.
400 invalid_request_error <id> does not accept image input Er is een afbeelding gestuurd naar een gehost open-weight model zonder afbeeldingsinput.
400 invalid_request_error <id> does not accept response_format text.format is gestuurd naar een gehost open-weight model zonder gestructureerde output.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort bevat een waarde buiten de lijst.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … De body is geldige JSON, maar een veld heeft het verkeerde type.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_output_tokens is groter dan wat er van je saldo over is.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: meer dan 120 aanvragen in één minuut op je account.
500 api_error The model backend failed to answer. Please retry. Het model heeft geen antwoord geproduceerd. Verstuur de aanvraag opnieuw.
502 api_error The model backend failed to answer. Please retry. Hetzelfde, bij de gehoste open-weight modellen.
504 api_error upstream timed out Een gehost open-weight model deed er langer over dan de tijdslimiet van een antwoord zonder streaming. Verstuur de aanvraag met stream op true.