Schemas
Every object the API sends, field by field. Times are ISO 8601 in UTC; durations and cue times are seconds.
Envelopes
JSON answers are wrapped the same way; the object is in payload. Signs (.sgn), videos and subtitle files come as files, unwrapped.
{
"success": true,
"payload": { … },
"timestamp": "2026-10-24T09:10:00.000Z"
}{
"status": "error",
"message": "That API key is not valid. Check it, or ask Signa for a new one.",
"code": "INVALID_API_KEY",
"details": { "code": "INVALID_API_KEY" },
"timestamp": "2026-10-24T09:10:00.000Z"
}Errors and limits lists the codes.
Account
GET /v1/api/me
| Field | Type | Details |
|---|---|---|
organisation | string | Your organisation's name. |
isTrial | boolean | A trial: keys stop at expiresAt. |
expiresAt | string | null | When a trial ends. |
limits.monthlyChars | integer | null | Characters a month; null is no limit. |
limits.monthlyLiveMinutes | integer | null | Live minutes a month. |
limits.monthlyVideos | integer | null | Videos a month. |
thisMonth | Usage | Below. |
Usage, this calendar month (UTC):
| Field | Type | Details |
|---|---|---|
requests | integer | Calls made. |
chars | integer | Characters signed. |
liveSeconds | integer | Seconds connected to live sessions. |
videos | integer | Videos made. |
subtitleSeconds | integer | Seconds of audio turned into subtitles. |
Client token
POST /v1/api/client-tokens
| Field | Type | Details |
|---|---|---|
token | string | ct_…: use it like the key, from a page or app. |
expiresAt | string | When it stops working (at most an hour). |
Languages
GET /v1/languages
| Field | Type | Details |
|---|---|---|
spoken | string[] | Codes you can send as from / lang. |
signed | string[] | Codes you can send as to. |
Signs (.sgn)
POST /v1/sign answers application/vnd.signa.sgn: one segment per word, each with its frame size, frame rate, word and frames of body, head and hand points. The byte layout is in The .sgn format.
Subtitles
POST /v1/subtitles with format=json
| Field | Type | Details |
|---|---|---|
lang | string | The spoken language. |
duration | number | Seconds of audio in the file. |
text | string | Everything said, as one string. |
cues | Cue[] | In order. |
Cue
| Field | Type | Details |
|---|---|---|
start | number | Seconds from the start of the file. |
end | number | Seconds from the start of the file. |
text | string | At most two lines (separated by \n) of 42 characters. |
Speech
POST /v1/stt
| Field | Type | Details |
|---|---|---|
text | string | The transcript. |
lang | string | The language it was heard in. |
provider | string | Which recogniser answered. |
POST /v1/tts
| Field | Type | Details |
|---|---|---|
audio | string | The speech, base64. |
provider | string | |
lang | string |
Overlay
POST /v1/overlays, GET /v1/overlays
| Field | Type | Details |
|---|---|---|
id | uuid | Use it in /v1/overlays/:id/… and in a live start message. |
orgId | uuid | Your organisation. |
name | string | Yours. |
captions | boolean | Whether the caption line shows under the signer. |
createdAt | string | |
url | string | Only when created: the page to put on screen, with its token after #. |
token | string | Only when created: ovt_…, lets a screen watch the overlay. |
POST /v1/overlays/:id/sign
| Field | Type | Details |
|---|---|---|
words | integer | Words signed onto the overlay. |
watchers | integer | Screens showing the overlay when it was sent. |
Live messages
From the server, as JSON text messages (and binary .sgn segments when signing).
| type | Fields | When |
|---|---|---|
ready | — | After the start message: send audio. |
speaking | active: boolean | Speech started or stopped. |
partial | text | What is heard so far, still changing. |
final | id, text | Settled words, in order; ids only go up. |
signing | id | With sign: true: that final's signs follow as binary messages. |
signed | id, words | All of that final's signs were sent. |
sign_error | id, message | That final could not be signed. |
error | message | The session ended with a problem. |
done | — | After a stop, everything was sent. |