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
{
  "success": true,
  "payload": { … },
  "timestamp": "2026-10-24T09:10:00.000Z"
}
Error
{
  "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

FieldTypeDetails
organisationstringYour organisation's name.
isTrialbooleanA trial: keys stop at expiresAt.
expiresAtstring | nullWhen a trial ends.
limits.monthlyCharsinteger | nullCharacters a month; null is no limit.
limits.monthlyLiveMinutesinteger | nullLive minutes a month.
limits.monthlyVideosinteger | nullVideos a month.
thisMonthUsageBelow.

Usage, this calendar month (UTC):

FieldTypeDetails
requestsintegerCalls made.
charsintegerCharacters signed.
liveSecondsintegerSeconds connected to live sessions.
videosintegerVideos made.
subtitleSecondsintegerSeconds of audio turned into subtitles.

Client token

POST /v1/api/client-tokens

FieldTypeDetails
tokenstringct_…: use it like the key, from a page or app.
expiresAtstringWhen it stops working (at most an hour).

Languages

GET /v1/languages

FieldTypeDetails
spokenstring[]Codes you can send as from / lang.
signedstring[]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

FieldTypeDetails
langstringThe spoken language.
durationnumberSeconds of audio in the file.
textstringEverything said, as one string.
cuesCue[]In order.

Cue

FieldTypeDetails
startnumberSeconds from the start of the file.
endnumberSeconds from the start of the file.
textstringAt most two lines (separated by \n) of 42 characters.

Speech

POST /v1/stt

FieldTypeDetails
textstringThe transcript.
langstringThe language it was heard in.
providerstringWhich recogniser answered.

POST /v1/tts

FieldTypeDetails
audiostringThe speech, base64.
providerstring
langstring

Overlay

POST /v1/overlays, GET /v1/overlays

FieldTypeDetails
iduuidUse it in /v1/overlays/:id/… and in a live start message.
orgIduuidYour organisation.
namestringYours.
createdAtstring
urlstringOnly when created: the page to put on screen, with its token after #.
tokenstringOnly when created: ovt_…, lets a screen watch the overlay.

POST /v1/overlays/:id/sign

FieldTypeDetails
wordsintegerWords signed onto the overlay.
watchersintegerScreens showing the overlay when it was sent.

Live messages

From the server, as JSON text messages (and binary .sgn segments when signing).

typeFieldsWhen
ready—After the start message: send audio.
speakingactive: booleanSpeech started or stopped.
partialtextWhat is heard so far, still changing.
finalid, textSettled words, in order; ids only go up.
signingidWith sign: true: that final's signs follow as binary messages.
signedid, wordsAll of that final's signs were sent.
sign_errorid, messageThat final could not be signed.
errormessageThe session ended with a problem.
done—After a stop, everything was sent.