Skip to Content
Transport APIREST API Reference

Train Announcement API

Generate BSL train announcement videos using Signapse AI technology.

POST/v1/sign-requests/train-announcements

Rate limit: 1,500 requests per 5 minutes on both Staging and Production.

Authentication

All requests require an OAuth2 Bearer token in the Authorization header. See How to Authenticate for details.

Request Body

The request body is a JSON object with announcement parameters. Only destination is required — all other fields are optional and combine to form different announcement types.

Core Parameters

Core

NameTypeRequiredDescription
destinationstringrequired
Destination of train. 3-letter CRS code or TIPLOC code.
Default: KGX
timingstringoptional
Time of train departure. 4-digit HHMM format (e.g. "1130"). Empty string if no timing.
platformstringoptional
Platform number (0-24). Can include letters A-D (e.g. "3A"). Empty string if unknown.
operatorstringoptional
ATOC code of UK Train Operating Company (e.g. "SW", "GR").
viastringoptional
Comma-separated CRS codes for intermediate stations (e.g. "SOU,BMH").

Delays, Cancellations & Updates

Updates

NameTypeRequiredDescription
updatedTimingstringoptional
New departure time if delayed. 4-digit HHMM format.
updatedPlatformstringoptional
New platform if changed. Same format as platform.
cancelledbooleanoptional
Set to "true" if the train is cancelled.
Default: false
shortDelaybooleanoptional
Set to "true" if the train is indefinitely delayed.
Default: false
longDelaybooleanoptional
Set to "true" for indefinitely delayed with apology message.
Default: false
disruptionReasonstringoptional
Darwin disruption code for delay, cancellation, or not-calling-at reason.
noPlatformbooleanoptional
Set to "true" if no platform has been assigned yet.
Default: false

Route Information

Route

NameTypeRequiredDescription
callingAtstringoptional
Comma-separated CRS/TIPLOC codes for calling stations in order. Final destination is auto-added.
notCallingAtstringoptional
Comma-separated CRS codes for stations the train no longer stops at.
splitInfostringoptional
Train splitting info. Format: "atXXX" (splits at), "splitXXX" (splits for), "frontXXX"/"backXXX" (front/back for), with optional carriage count (e.g. "atAWK,2frontWEY,3backSOU").

Display & Announcements

Display

NameTypeRequiredDescription
platformInfostringoptional
Alters message structure for platform announcements.
nextapproachingnow
arrivalInfostringoptional
Alters message structure for arrival announcements.
will_arrivehas_arrived
stopInfostringoptional
Alters message to "The next/final stop is...".
nextfinal
currentlyAtstringoptional
CRS code of current station, or two comma-separated codes if between stations (e.g. "WAT,CLJ").
waitsHerestringoptional
Number of minutes the train waits at this station (e.g. "7").
exitSidestringoptional
Which side to exit the train.
leftright

Service & Facility Status

Service

NameTypeRequiredDescription
busReplacementbooleanoptional
Set to "true" if there is a replacement bus service.
Default: false
currentStationstringoptional
CRS code of current station for bus replacement stop message. Requires busReplacement="true".
operatorDelaystringoptional
Operator-wide delay announcement. Must be paired with an "operator".
minorseverespecial
liftStatusstringoptional
Lift status. Format: "Xbroke,Ywork", "allwork", or "allbroke" (e.g. "1broke,3work").
escalatorStatusstringoptional
Escalator status. Same format as liftStatus.
staticMessagestringoptional
Predefined static message code (e.g. "Wait", "British_Transport_Police"). Overrides all other request variables.
bgColourstringoptional
Background colour as comma-separated RGB values (e.g. "18,195,83"). Use "-1,-1,-1" for transparent .webm output.

Response

Returns a 200 OK with a request ID. Use this ID to poll for status.

data.idstring

The request/job ID. Use this to check the status of video generation.

Check Request Status

GET/v1/sign-requests/{requestId}

Poll this endpoint with the id from the generate response. Add ?filter=status to get a compact status response.

data.statusstring

Job status: IN_PROGRESS, COMPLETED, or FAILED.

data.downloadLinkstring

Presigned URL to download the generated video. Only present when status is COMPLETED.

data.errorLogstring

Error details. Only present when status is FAILED.

Error Codes

StatusMeaning
400Request error — invalid parameters
401Provided token cannot be verified
403Token not provided or invalid token
404Client not found

Common Use Cases

Basic Departure

{ "destination": "KGX", "timing": "1130", "platform": "6" }

Departure with Operator and Calling Points

{ "destination": "NCL", "timing": "1458", "platform": "1", "operator": "GR", "callingAt": "DHM,DAR" }

Cancellation with Reason

{ "destination": "KGX", "timing": "1845", "cancelled": "true", "disruptionReason": "109" }

Platform Change

{ "destination": "SLB", "timing": "1422", "platform": "1", "updatedPlatform": "6" }

Delay with Updated Time

{ "destination": "BHI", "timing": "1010", "updatedTiming": "1030", "disruptionReason": "656" }

Train Splitting

{ "splitInfo": "atAWK,2frontWEY,3backSOU" }

Transparent Background

{ "destination": "LDS", "timing": "1220", "platform": "7", "bgColour": "-1,-1,-1" }
Request
curl --location \
  'https://sign.client.api.stag.signapsesolutions.com/v1/sign-requests/train-announcements' \
  --header 'Authorization: Bearer {token}' \
  --header 'Content-Type: application/json' \
  --data '{
    "destination": "KGX",
    "timing": "1130",
    "platform": "6",
    "operator": "GR",
    "callingAt": "DON,YRK"
  }'
Response
{
  "data": {
    "id": "c4c7ac45-79c2-48b2-99ff-61775e2d3d3e"
  }
}
Last updated on
Question? Give us feedback
support@signapse.ai