Skip to main content

What it is

This is the reference for all endpoints available to anyone integrating with Symphony using an API key. Each endpoint lists the method, path, parameters, a sample call, and the response format. If it’s your first time, start with Connect via API. To understand how to combine these endpoints in a real project, see Building projects with the API.

1. Before you start

Base URL

For testing, see Environments and support.

Headers

All endpoints on this page, except those in section 10. Service status, require: Don’t send cookies or a CSRF token. They aren’t needed with an API key.

What your key can do

The key has exactly the same access as your account: the same models, agents, knowledge bases, flows, permissions, and usage limit. If you can’t do something in the interface, you can’t do it through the API either. Some actions depend on permissions granted by the company administrator (for example, creating knowledge bases). Check yours with GET /api/v1/users/permissions.

Conventions

  • Dates are integers in epoch time (seconds since 01/01/1970, UTC), unless stated otherwise.
  • IDs are strings. Copy them exactly as returned.
  • Cursor pagination: list endpoints return { "items": [...], "next_cursor": "..." }. To fetch the next page, repeat the call with ?cursor=<next_cursor>. When next_cursor is null, you’re done. limit accepts 1 to 200.
  • Errors follow a single format, described in Errors and limits.

2. Account and API key

GET /api/v1/auths/api_key

Returns your current API key.
Returns 404 if you haven’t generated a key yet.

POST /api/v1/auths/api_key

Generates a new key. The previous key stops working immediately.
Returns 403 if key generation is disabled in the environment.

DELETE /api/v1/auths/api_key

Revokes your key. Returns true. After that, no call with it works.
Generating and revoking are usually done in the interface (Settings → Account → API keys). These endpoints exist for anyone who needs to automate rotation.

GET /api/v1/auths/

Returns the data of the account that owns the key.
The response also includes the token, token_type, and expires_at fields. They’re for the browser session and aren’t needed when using an API key.

GET /api/v1/users/permissions

Returns what your account can do.

GET /api/v1/consumption/me

Returns your usage for the month and the status of your limit.
With status at reached or blocked, chat calls return 402. Use this endpoint before large batches.

3. Models and agents

GET /api/models

Lists the models and agents your account can use in the company given in X-Enterprise-Id.
  • The id is the value that goes in the chat model field.
  • Items with info.base_model_id are agents: they come with prompt, bases, and tools already configured on the platform.
  • The list is already filtered to what you can use. Disabled models or ones not shared with you don’t appear.

4. Chat

POST /api/chat/completions

Sends messages to a model or agent and receives the response. Compatible with OpenAI’s chat completions API. Required fields Optional fields: generation Optional fields: tools and context Optional fields: platform history Example
Response (200)
Streaming. With "stream": true, the response arrives as data: {...} lines, each with a chunk in choices[0].delta.content, ending with data: [DONE]. An error can arrive inside the stream, after the 200 OK. See section 6 of Building projects with the API. Automatic history. If you send a chat_id and no message with role: "assistant", Symphony retrieves that conversation’s saved history and puts it before your message. This way you keep a long conversation going by sending only the new question. If your array has any assistant message, Symphony assumes you manage the history and injects nothing. Errors specific to this endpoint

POST /api/responses

Version compatible with OpenAI’s Responses API, for tools that only speak that format. Accepts input (text or list) instead of messages and streams in the Responses API format.
For new integrations, use POST /api/chat/completions. This endpoint exists only for compatibility.

5. Files

POST /api/v1/files/

Uploads a file. The body is multipart/form-data, with the file in the file field.
The response arrives before the file is ready. Reading (text extraction, OCR) continues in the background. Before using the file, poll GET /api/v1/files/{id} until data.status becomes ready. Attaching a file still in processing makes the model respond as if the document were empty.

GET /api/v1/files/{id}

Returns the file data, including processing status. Large or scanned PDFs can take a few minutes. Poll at intervals (for example, every 3 seconds) with a maximum wait time.

GET /api/v1/files/

Lists your files.

GET /api/v1/files/search

Searches files by name.

GET /api/v1/files/{id}/content

Downloads the original file.

DELETE /api/v1/files/{id}

Deletes the file. Returns { "message": "File deleted successfully" }. Only the owner, or someone with write permission, can delete it.

6. Knowledge bases

A knowledge base groups several files so the model looks up only the relevant parts for each question. To use a base in chat, send "files": [{ "type": "collection", "id": "<base id>" }], or use an agent that already has the base configured. Full flow through the API:
1

Create the base

POST /api/v1/knowledge/create
2

Upload each file

POST /api/v1/files/ and wait for the ready status.
3

Add the files to the base

POST /api/v1/knowledge/{id}/file/add
4

Use it in chat

files: [{ "type": "collection", "id": "..." }]

GET /api/v1/knowledge/list/compact

Lists the bases you can see, with cursor pagination.
can_write indicates whether you can change the base.

GET /api/v1/knowledge/count

Returns the total number of bases you can see: { "total": 8 }.

GET /api/v1/knowledge/{id}

Returns the full base, with the list of files (files).

POST /api/v1/knowledge/create

Creates a base. Requires the workspace.knowledge permission. Without it, returns 401.
Returns the created base, with its id.

POST /api/v1/knowledge/{id}/update

Changes name, description, or access. Same body as create. Requires write permission on the base.

POST /api/v1/knowledge/{id}/file/add

Adds an already uploaded file (with ready status) to the base.
Returns the updated base, with the list of files.

POST /api/v1/knowledge/{id}/files/batch/add

Adds several files at once.

POST /api/v1/knowledge/{id}/file/remove

Removes a file from the base.

DELETE /api/v1/knowledge/{id}/delete

Deletes the base. The files still exist in /api/v1/files/. Returns true.

7. Conversations

By default, chat calls aren’t saved. Use these endpoints when you want your project’s conversations to stay in the platform’s history, where they can be audited or continued in the interface.

POST /api/v1/chats/new

Creates an empty conversation.
Returns the created conversation. Keep the id and send it as chat_id in POST /api/chat/completions.

GET /api/v1/chats/list/cursor

Lists your conversations, from newest to oldest.

GET /api/v1/chats/search

Searches conversations by text. Returns [{ "id", "title", "created_at", "updated_at" }].

GET /api/v1/chats/{id}

Returns the full conversation, with all messages in chat.history.messages. Only works for your own conversations.

DELETE /api/v1/chats/{id}

Deletes the conversation. Returns true.

8. Flows (Workflows)

Flows are sequences of steps built in the Symphony interface (for example: read a document → summarize with an agent → classify). Through the API you list, run, and track the flows you have permission to use. How a run works: the run call responds right away with a run_id. The flow runs in the background, and you poll the result until it finishes.

GET /api/v1/workflows/list

Lists the flows you can use, with cursor pagination.

GET /api/v1/workflows/workflow?id={id}

Returns the full flow, including its steps (graph).

POST /api/v1/workflows/workflow/run?id={id}

Runs the flow. The body is optional and sets the input for the first step:
Returns 429 if your company has already started the maximum number of runs allowed in the last minute (currently 30). Wait a few seconds and try again.

GET /api/v1/workflows/runs/detail?run_id={run_id}

Returns the run, with the result of each step. This is the endpoint you poll until the run finishes.

GET /api/v1/workflows/workflow/runs?id={id}

Lists a flow’s runs, without step details.

POST /api/v1/workflows/runs/cancel?run_id={run_id}

Requests cancellation of a run in progress. Returns true. Only the person who started the run can cancel it.

9. Audio

POST /api/v1/audio/transcriptions

Transcribes audio to text. The body is multipart/form-data, with the audio in the file field.
  • Accepted formats: MP3 (audio/mpeg), WAV (audio/wav), OGG (audio/ogg), and M4A (audio/x-m4a).
  • Size: audio over 25 MB is compressed automatically. If it’s still over the limit, it returns FILE_TOO_LARGE.

POST /api/v1/audio/speech

Converts text to speech. Returns the audio as MP3.
The voice model is set by your company’s configuration. Identical requests are served from cache and don’t count toward the limit.

GET /api/v1/audio/voices

Lists the available voices: { "voices": [{ "id": "alloy", "name": "alloy" }] }.

GET /api/v1/audio/models

Lists the available voice models: { "models": [...] }.
Limit: transcription and speech each accept up to 30 calls per minute per company. Above that, they return 429.

10. Service status

These endpoints don’t require authentication.

11. What’s not part of the public API

The endpoints below exist, but aren’t supported for integration. They may change or be removed without notice, or they require a profile that integration accounts don’t have:
  • Platform administration (/api/v1/admin/..., management of users, companies, groups, models, and other people’s usage): requires an administrator profile and is done through the interface.
  • Password login and SSO (/api/v1/auths/signin, /signup, /api/v1/auth/sso/...): use the API key.
  • Internal interface routes: screen settings, suggestions, banners, ratings, automatic title and tag generation, and GET /api/config, which doesn’t accept an API key.
  • Direct access to AI providers (/openai/..., /ollama/...): use POST /api/chat/completions.
  • Direct image generation (/api/v1/images/...): generate images through chat, with features.image_generation: true.
  • Direct vector ingestion and search (/api/v1/retrieval/...): use knowledge bases and the chat files field.
  • Task management (/api/tasks/...): to stop a streaming response, close the connection.
If your use case needs something that isn’t on this page, contact the Symphony team. See Environments and support.