OpenAPI description
Syntic publishes a machine-readable description of the API in OpenAPI 3.0 format. Use it to generate a typed client in your language, to import the endpoint into an API testing tool, or to validate requests in your own tests.
Download it
curl -o syntic-openapi.yaml https://app.syntic.ai/api/openapi| Property | Value |
|---|---|
| URL | https://app.syntic.ai/api/openapi |
| Method | GET (no authentication needed) |
| Format | YAML, Content-Type: application/yaml |
| Cross-origin | Allowed from any origin |
| Caching | Cached for up to 5 minutes |
The file is YAML only. If your tool needs JSON, convert it locally, for example:
python3 -c "import sys, json, yaml; json.dump(yaml.safe_load(sys.stdin), sys.stdout, indent=2)" \
< syntic-openapi.yaml > syntic-openapi.jsonWhat it contains
- One server,
https://app.syntic.ai/v1. - One operation,
createChatCompletion(POST /chat/completions). - A bearer security scheme for private keys.
- Schemas for the request, the response, the error body and the documented error responses.
Known differences from the live API
Where the file and this reference disagree, this reference describes what the API actually does today.
| Topic | OpenAPI file says | The API does |
|---|---|---|
stream default | false | true. Leave it out and you get a stream. |
| Sampling fields | temperature and similar are listed | Accepted, then dropped before the model sees them. |
| Error responses | Lists a subset of statuses | Every status on Error codes can occur. |
Clients generated from the file will usually default stream to false themselves, which is fine. Hand-written code that omits stream will receive a stream; plan for that.
Generating a client
Any OpenAPI 3.0 generator works. For example, with the open-source OpenAPI Generator CLI:
npx @openapitools/openapi-generator-cli generate \
-i https://app.syntic.ai/api/openapi \
-g python \
-o ./syntic-clientBecause the API follows the widely used chat completions shape, an existing OpenAI-compatible client is often simpler than generating one. See OpenAI-compatible clients.
The complete specification
The OpenAPI file is becoming the single source of truth for the whole public API. Every endpoint, including previews, is described in it before it ships; the official SDKs are generated from it; and an automated check fails the platform’s release if a deployed endpoint and the file disagree.
Where to get it
| URL | Contents |
|---|---|
https://app.syntic.ai/api/openapi | The latest API version, stable endpoints only. |
https://app.syntic.ai/api/openapi?version=2026-06-01 | The spec as of a given syntic-version. |
https://app.syntic.ai/api/openapi?beta=agents-2026-11-01 | Stable endpoints plus the endpoints behind one or more beta flags (comma separated). |
No authentication is needed.
What it contains
- Every operation, grouped by tags that match these docs:
Messages,Models,Files,Batches,Tools,Agents,Sessions,Admin,Webhooks. - Two security schemes:
InferenceKey(sk_live_) andAdminKey(sk_admin_), applied per operation. - The shared error envelope as one
Errorschema referenced by every non-2xx response. - Pagination parameters and list shapes as reusable components.
- Streaming responses described with
text/event-streamand a schema per event type. - Vendor extensions Syntic tools read:
x-syntic-beta(the flag an operation needs),x-syntic-since(the version it appeared in),x-syntic-deprecated-after(its removal date, if any). info.versionset to thesyntic-versiondate the file describes.
Using it to check your own integration
# Lint the spec and list every operation id
curl -sS -o syntic.yaml https://app.syntic.ai/api/openapi
npx @redocly/cli lint syntic.yaml
yq '.paths[][] | select(has("operationId")) | .operationId' syntic.yamlBuild notes for the platform team
- Keep the file in the platform repository and update it in the same change as the endpoint. A missing or mismatched operation fails CI.
- The CI check calls each deployed operation with a fixture and validates both request and response against the file, including the error envelope.
- The “Known differences” table above must be empty once the
2026-11-01version is the default.