SylphxModels

Quickstart

One request end to end. You will mint an organization key, call POST https://api.models.sylphx.ai/v1/responses with a real catalog model, read the response, stream the same call, and make retries safe. Nothing else is required.

1. Get an API keyLink to this section

The API authenticates with an organization key that starts with sk-sx-. You mint and revoke keys in the console; the key is shown once.

  • Create an account, then open the console and mint a key for your organization.
  • Every key belongs to one organization. A key cannot read another organization’s stored responses, files, or usage.
  • Store it in the environment, never in client-side code. The console can revoke any key immediately; revoked keys stop authenticating.
  • Platforms that provision keys for tenants use a separate machine path — see platform keys.
shell
export SYLPHX_API_KEY="sk-sx-…"  # paste the key from the console

2. Send your first requestLink to this section

The official OpenAI SDKs work unchanged: point them at our base URL and name a catalog model. The first sample model below is a real, currently listed model.

curl https://api.models.sylphx.ai/v1/responses \
  -H "Authorization: Bearer $SYLPHX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.5",
    "input": "Explain streaming in two sentences."
  }'

Only two things are Sylphx-specific: the base URL and the model id. Swap model for any id in the catalog and the rest of your request is unchanged.

3. Read the answerLink to this section

You get back an official Responses object. The four fields you read first are the id, the output, the model echo, and the usage.

200 OK · application/json
{
  "id": "resp_9f2c41d0a8",
  "object": "response",
  "model": "openai/gpt-5.5",
  "output": [
    {
      "type": "message",
      "role": "assistant",
      "content": [
        {
          "type": "output_text",
          "text": "Streaming sends each token as the model writes it…",
          "annotations": []
        }
      ]
    }
  ],
  "usage": {
    "input_tokens": 18,
    "output_tokens": 96,
    "total_tokens": 114
  }
}
  • id identifies this response. While it is stored you can retrieve it with GET /responses/{id}, list its input items, or delete it.
  • model is exactly the model id you sent — never an internal alias. That is what makes the price and the transcript reproducible.
  • output carries the assistant message, and any function calls or hosted tool items the turn produced.
  • usage reports the tokens this request was metered for. Multiply by the catalog’s per-million prices to reproduce the cost.
NoteStored by default
Requests are stored so previous_response_id can continue a conversation. Send store: false to skip persistence; a later previous_response_id that refers to an unpersisted response is rejected. Details on the Responses page.

4. Stream the same callLink to this section

Add stream: true and the response arrives as server-sent events. The event names are the official OpenAI Responses names, and the stream ends exactly once with a typed terminal.

curl -N https://api.models.sylphx.ai/v1/responses \
  -H "Authorization: Bearer $SYLPHX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-5.5",
    "input": "Count to five.",
    "stream": true
  }'
SSE · event names in order
event: response.created
data: {"type":"response.created","response":{…}}

event: response.output_text.delta
data: {"type":"response.output_text.delta","delta":"One"}

event: response.completed
data: {"type":"response.completed","response":{…},"usage":{…}}

Streaming rules — one terminal, ordered events, and tool calls that do not end the stream — are on the Responses page.

5. Make retries safeLink to this section

A network retry should never create a second response. Send a UUID with every retryable create and the retry — and only that retry — is deduplicated.

Retry-safe create
curl https://api.models.sylphx.ai/v1/responses \
  -H "Authorization: Bearer $SYLPHX_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 8f8d57c8-8868-4d90-90cb-55e892cb80a5" \
  -d '{
    "model": "openai/gpt-5.5",
    "input": "Summarise this incident in three bullets."
  }'
  • Identical retry after completion → 200 with the original response and header idempotency-replayed: true.
  • Same key, different body → 422 idempotency_key_reuse. Use a new key for a new request.
  • Same key while the first attempt is still running → 409 idempotency_in_progress. Wait, then retry the same bytes.

Full retry contract, including which errors are retryable: errors and retries.

Troubleshooting the first callLink to this section

The three failures that stop a first request, and what each one actually means.

  • 401 invalid_api_key — the bearer is missing, malformed, or revoked. Check that the value starts with sk-sx- and has no quotes or whitespace.
  • 404 model_not_found — that model id is not in the catalog. Copy an id from the catalog rather than typing one.
  • 429 rate_limit_exceeded — the key’s request envelope is spent. Read retry_after_seconds (and the Retry-After header) before retrying.

Every error shares one envelope, and each code names the next action. See errors and retries.