For the complete documentation index, see llms.txt. This page is also available as Markdown.
Programmable Push Notifications
Sending push notifications
In order to send a push notification, you must have an active Push Notifications channel installed in your workspace with valid credentials for the gateway(s) you intend to use (Firebase Cloud Messaging for Android, APNs for iOS, or VAPID for Web Push). Send a push by performing an HTTP request to the channel's messages endpoint with a valid access key.
Send a message
Send a message
post
Send a message to a channel
Authorizations
HTTPRequired
Uses the Authorization header: 'AccessKey ' followed by your access key token
Path parameters
workspaceIdstring · uuidRequired
The unique identifier of the workspace.
channelIdstring · uuidRequired
The ID for a channel
Body
and
anyOptional
object · ChannelMessageCreateWithTemplateOptional
or
object · ChannelMessageCreateWithBodyOptional
Responses
202
Message was accepted for processing
application/json
bodyone ofOptional
or
or
or
or
or
or
or
or
or
or
bodyIdstring · uuidOptional
channelIdstring · uuidRequired
chargeableUnitsinteger · uint32Optional
createdAtstring · date-timeRequired
detailsstringOptional
This field is used to store additional information related to the message status.
directionstring · enumOptionalPossible values:
idstring · uuidRequired
ignorePersistedEventhooksbooleanOptional
lastStatusAtstring · date-timeRequired
platformIdstringOptional
platformReferenceIdstringOptional
reasonstringOptional
referencestringOptional
A reference to the message. This can be used to identify the message in the channel.
scheduledForstring · date-timeOptional
Scheduled message send time (RFC3339). Messages scheduled within 10 minutes may be sent immediately; messages scheduled more than 35 days out will be rejected.
sendAtstring · date-timeOptional
statusstring · enumRequiredPossible values:
tagIdsstring · uuid[]Optional
tagsstring[]Optional
Tags to associate with the message. Tags are converted to lower case and automatically created if they don't exist. Up to 10 tags per message.
updatedAtstring · date-timeRequired
400
An error
application/json
404
An error
application/json
409
The request conflicts with the current state of the resource.
application/json
413
The request was rejected for exceeding a size limit: the total request body must not exceed 200 KB, and a single attachment's inline content must not exceed 100 KB.
application/json
422
The request contains invalid parameters or body fields.
Push notifications use a channel-scoped identifier key and a gateway-prefixed identifier value. This differs from SMS/WhatsApp where the identifier key is phonenumber and the value is a raw E.164 number.
identifierKey must be push-{channelId} — the literal string push- followed by the UUID of the push channel you are sending through. This is the same channel UUID that appears in the request URL.
identifierValue must be {gateway}:{deviceToken} where {gateway} is one of:
firebase — for Android devices registered with Firebase Cloud Messaging (FCM v1)
apns — for iOS devices registered with Apple Push Notification service
web — for browsers registered with the Web Push protocol via VAPID
A bare device token without the gateway prefix is rejected.
Example receiver block:
Note: FCM tokens contain : characters internally — only the first colon (separating the gateway from the token) is parsed by Bird. The rest of the value is treated as one opaque token string.
Push notification body
Push messages use body.type: "list" with title and text fields. The text body type used by SMS, WhatsApp, and email is not supported by the push platform.
Field
Description
body.type
Must be "list".
body.list.title
The notification title that appears in bold at the top of the system notification.
body.list.text
The notification body text below the title.
Example:
Full request examples
Send to an Android device (Firebase)
Send to an iOS device (APNs)
Send to a browser (Web Push)
Troubleshooting
If a send fails, the failure.reason field on the message contains the underlying error. Fetch the message via GET /workspaces/{workspaceId}/channels/{channelId}/messages/{messageId} and check that field.
The three most common failure modes are payload-shape mismatches. Match the symptom to the fix:
failure.reason contains
Fix
invalid identifier value format, missing gateway type prefix
The identifierValue is missing the gateway prefix. Prepend firebase:, apns:, or web: to the device token.
PlatformAddress does not match any selector(visible in worker logs) / message stuck in sending_failed with no token-shaped value
The identifierKey is wrong. It must be push-{channelId}, not pushtoken, user_id, emailaddress, etc.
message body is empty
The body.type is something other than list (most commonly text). Switch to list with list.title and list.text.
Other failures (expired device tokens, FCM/APNs auth errors, throttling) are surfaced from the gateway response and should be self-explanatory.