API Reference

Services

An org can have more than one service for the same scope — for example a local Whisper service and an OpenAI transcription service, both serving `stt`. This endpoint lists them so your client knows which service_ids it can route to.

Why multiple services per scope?

Each service carries its own configuration, limits, and upstream binding. For scopes where that matters — different audio models, different PII thresholds, different language backends — configuring a second service is cleaner than juggling one shared row. Requests without a service_id hit the one flagged as is_default for that scope; requests with a service_id go straight to that service.

Completions route the same way via the model field plus per-model upstream bindings, so service_iddoesn't apply there. TTS voices currently live at the service-config level (piper/kokoro backend per voice), so service_id on /v1/audio/speech and /v1/audio/voices is rejected with a 400 — pick a different voice instead.

List services

GET/v1/services

Lists the services the caller can reach. For API tokens, filtered to the scopes the token carries; for portal sessions, returns every service in the org.

Request

scopestring
Optional. Narrow to a single scope (e.g. stt, pii, language).
bash
curl https://api.inferada.com/v1/services?scope=stt \
  -H "Authorization: Bearer inf_YOUR_TOKEN"

Response · 200

services[].idstring
Service identifier. Pass as service_id on scope-specific endpoints.
services[].scopestring
completions, language, pii, stt or tts.
services[].namestring
Human-readable display name.
services[].activeboolean
Inactive services are filtered out but surface here for visibility.
services[].is_defaultboolean
True for the service that handles scope requests when no service_id is given.
json
{
  "services": [
    {
      "id": "01J5Z...",
      "scope": "stt",
      "name": "Speech-to-Text (Local Whisper)",
      "active": true,
      "is_default": true
    },
    {
      "id": "01J6A...",
      "scope": "stt",
      "name": "Speech-to-Text (OpenAI)",
      "active": true,
      "is_default": false
    }
  ]
}

Route a request with service_id

Pass service_idalongside the normal request body (or as a form field for multipart endpoints). The gateway validates that the service belongs to your org and matches the endpoint's scope, then routes there instead of the default.

bash
curl https://api.inferada.com/v1/audio/transcriptions \
  -H "Authorization: Bearer inf_YOUR_TOKEN" \
  -F service_id=01J6A... \
  -F file=@speech.mp3

Errors: unknown service_id404; service_id from another org or with the wrong scope → 403.