Skip to main content

Errors

Every error response is JSON with a single detail field. For almost all statuses detail is a string:

{ "detail": "Version not found: 6990" }

The exception is 422 from request validation, which FastAPI emits before the handler runs. There detail is a list, one entry per problem:

{
"detail": [
{
"type": "missing",
"loc": ["body", "targets"],
"msg": "Field required",
"input": { "user_email": "sam.reviewer@studio.example" }
}
]
}

Each reference page lists the statuses its endpoint can return; the schema for all of them is ErrorResponse.

Status codes​

StatusMeaningWhat to do
400The production tracking or transcription provider rejected the call. The detail is the provider's message.Usually bad input the schema could not catch: an unsupported entity type, a status code the project does not define, a meeting the bot cannot join. Fix the request.
401No bearer token, or the token failed validation. Response also carries WWW-Authenticate: Bearer.Get a fresh token. See Authentication.
403The user_email in the path is not the authenticated caller. Only /users/{user_email}/... routes do this check.Use the caller's own email.
404Entity not found in the provider, DNA record not found, or the feature is disabled on this deployment (publish-transcript, extension health).Distinguish the cases by the detail text. "Not Found" with no subject means a disabled feature.
422Validation failed (list form), or the request is well-formed but the state does not allow it (string form), e.g. publishing a transcript for a playlist with no meeting.Validation: fix the body. State: do the prerequisite step first.
500Only from publish-transcript: the provider row was created or updated, but DNA could not record it.Do not retry blindly - a retry creates a duplicate row. The detail names the entity ID so an operator can reconcile.
501The configured provider does not implement the operation (the mock provider is read-only).Nothing to retry; a different deployment is needed.
502The provider accepted the request but reported failure.Safe to retry once; then check the provider directly.

Partial failure on publish​

POST /playlists/{playlist_id}/publish-notes does not fail when individual notes fail. It returns 200 with counts:

{ "published_count": 3, "republished_count": 0, "skipped_count": 1, "failed_count": 1, "total": 5 }

Treat failed_count > 0 as an error in your tool. The failed drafts keep published: false and can be resubmitted. skipped_count covers drafts with nothing to publish (empty body, or already published and unchanged).

Timeouts​

Two endpoints call out to slow services and have no server-side timeout of their own beyond the LLM client's (30 s by default): POST /generate-note and POST .../run-qc-checks. Give them a client timeout of at least 60 s. POST /transcription/bot returns as soon as the bot is dispatched; use the status endpoint or the /ws events to learn when it is in the call.