# Audio API

Source: https://cicora.ai/en/docs/audio

Use one workspace API key for two operations:

| Operation                                            | Endpoint                        | Successful response       |
| ---------------------------------------------------- | ------------------------------- | ------------------------- |
| [Speech synthesis (TTS)](/en/docs/audio-speech)      | `POST /v1/audio/speech`         | Audio bytes               |
| [Transcription (STT)](/en/docs/audio-transcriptions) | `POST /v1/audio/transcriptions` | JSON with recognized text |

The same endpoints are also available under `/api/v1/audio/*`. Set the base URL once; do not repeat `/v1`. See [authentication](/en/docs/authentication) to create a key. Supplier credentials are not needed.

## Choose a model and voice

The unified catalog includes Audio alongside text, image, video and Decisions:

```bash
curl --fail-with-body --silent --show-error \
  'https://api.cicora.ai/api/models?kind=audio' -o audio-models.json

jq '.data[] | {id, available, audio}' audio-models.json
```

Use the exact `id` as `model`. `audio.operations` lists `speech` and/or `transcription`; `audio.profiles` describes verified combinations and limits. A speech profile contains voice IDs, formats, sample rates, channels and speed ranges. A transcription profile lists accepted audio geometry, languages and optional features. Choose a complete compatible profile; values from different profiles cannot always be combined.

`available` describes catalog access and pricing readiness, not a guarantee that a supplier will respond at this instant. Your workspace, key limits and balance are checked at execution. `/v1/models` serves text-compatible model discovery; use `/api/models?kind=audio` for Audio.

Listen to voice samples in the cabinet's Audio → Speech gallery, then select the model and voice. The gallery is a preview library; sample text and recording are not a promise that every new generation sounds identical. A voice can work with more than one model. Send its public `voice` ID, not its display name or gallery item ID.

## Prices and accounting

Read `audio.pricing` for the selected operation. Each tariff has `currency`, `revision` and `components`. A component specifies `meter`, `unitQuantity`, `unitPrice`, `roundingIncrement` and `minimumQuantity`. Character meters also define the character-counting method; duration meters define channel grouping. A short recording can therefore be billed at a minimum duration. Do not assume Audio uses text-token prices or that every model bills by the same unit.

The customer tariff is fixed when an operation starts. Balance and key spending limits apply to Audio. Check the final charge in [Usage](/en/docs/usage-costs); optional transcription `usage` fields describe measured usage and may be absent. The response does not publish a synthetic `usage.cost` in USD.

## Requests, jobs and retries

The public API returns the result on the same HTTP request. Speech is a binary byte stream; transcription waits for JSON. Cabinet generation runs as a background job and appears in its history. A cabinet job URL is not a public API polling endpoint.

A disconnected request may already have reached the supplier. Do not automatically repeat a request after a timeout or partial audio delivery. Preserve the request time and any request identifier, check Usage, and make an explicit retry decision. `session_id` groups metadata; it is not an idempotency key.

## Compatibility and optional features

The request shapes follow the [OpenRouter TTS interface](https://openrouter.ai/docs/api/api-reference/tts/create-speech) and [STT interface](https://openrouter.ai/docs/api/api-reference/stt/create-transcription). Supported models, limits, error bodies and accounting are platform-specific. Model and voice IDs from another service are not automatically available here.

Both operations accept `provider.data_collection` (`allow`/`deny`) and `provider.zdr`. A strict policy requires a verified supporting route; unknown metadata does not satisfy it. `provider.options` carries provider-keyed JSON options only where supported. The optional `session_id` and `user` strings are limited to 256 characters; `trace` is a JSON metadata object. These fields do not enable another platform's logging integrations.

Music generation, realtime conversations, translation and persistent voice training are not part of these endpoints. Multi-speaker input, reference recordings, diarization and keyterms require explicit model support.

## Troubleshooting


**The model is absent or unavailable**


Refresh the Audio catalog and check the exact model ID, operation and workspace access. A model advertised by a supplier is usable here only after its route and tariff are published.


**The request timed out**


Check Usage before retrying. An absent response does not establish that processing or billing never started; see [errors](/en/docs/errors).

## FAQ

### What is cicora.ai?

cicora.ai is a multi-model AI workspace and compatible API for chat, text, images, video, coding tools, and teams. Start with the [overview](/en.md), [documentation](/en/docs.md), or [model catalog](/en/models.md).

### How is usage billed?

Confirmed usage is charged in USD from the active workspace's prepaid balance. Use the live catalog for current model prices and the [usage guide](/en/docs/usage-costs.md) for settlement details.

### Which protocols and integrations are available?

Documentation covers OpenAI-compatible Chat Completions and Responses, Anthropic Messages, image interfaces, Claude Code, OpenCode, and Codex CLI. Compatibility does not imply support for every upstream parameter.

### Which sources are authoritative and current?

For model IDs, availability, capabilities, limits, and prices, use the [live catalog](/en/models.md). For API behavior, use the matching [documentation page](/en/docs.md). Never include API keys, private workspace data, or preview URLs in public documents.
