Create, bind and rotate API keys
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.
Read this article →Replace a key in four steps so there is never a moment when nothing can send — and know what to do first if the key leaked.
A key is a credential, and credentials accumulate exposure: a CI variable, a colleague’s laptop, a log line, a screenshot in a ticket. Rotating on a schedule turns a potential incident into a configuration change, because the team has already done it once.
The order matters: create first, revoke last. Revoking before the replacement is deployed is what turns a rotation into an outage.
Create a second key and bind it to the same channels the old one could send over. A key with no channel binding is rejected — there is no "all channels" fallback.
Put the new value into whatever holds the credential — environment variable, secret store, CI setting — and roll the service that sends.
Send one message you can observe, then look it up in the log by time window and recipient. Confirm it went out under the new key.
Only after a verified send. Revocation applies to new requests; messages already accepted are already on their way.
Order reverses: revoke first, then create and deploy. You accept a short window where sending fails, which is better than a window where someone else sends on your account.
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.
Read this article →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 →