Send a message with the API
One endpoint accepts asynchronously. A success code means the platform took the message — not that a handset received it.
Read this article →A key proves which tenant is calling and which channels it may use. It is shown in full once, and a key with no binding cannot send at all.
A key is not just an identifier — it pairs a tenant with a set of permitted channels. The server checks both on every request, so a key is also the narrowest available way to scope what an integration can do.
Either header works; there is no difference in behaviour between them.
| Header | Value |
|---|---|
| Authorization | Bearer sk_… |
| X-API-Key | sk_… |
This page lists existing keys and their bindings.
The full value is displayed once, shaped sk_…. Store it the way you store any other production credential.
Select one or more channels the key may send over. Multiple bindings are allowed and are load-balanced.
Keys can be revoked and rotated from the console at any time. Because a key is bound to specific channels, rotating one is also how you narrow what a compromised integration is able to do.
One endpoint accepts asynchronously. A success code means the platform took the message — not that a handset received it.
Read this article →Four states, and one of them does not belong in the same bucket as the others. Reading suppressed as a failure sends you looking in the wrong place.
Read this article →The platform POSTs to a URL you configure, with a token you generate. Two implementation details decide whether you lose events.
Read this article →