1
Create a workspace
Sign up at buzzkit.dev/signup. Every account starts with a workspace and a
default tenant, which is the tenant every call uses when you send no BuzzKit-Tenant header.2
Connect Apple
In the dashboard, open Settings → Channels and upload the APNs key for your app: the
.p8 file, your Team ID, the Key ID and your bundle id.BuzzKit probes the key against both APNs hosts and stores one credential per environment it is valid for, so a key scoped to sandbox, to production or to both needs no choice from you.Nothing can be sent on a channel with no credential. Topics, subscriptions and sends all answer
400 channel_not_connected until one is connected.3
Create an API key
Under API keys, create a workspace key. The secret is shown once and stored only as a hash. Give it the scopes your backend needs,
subscribers:write, messages:send and events:write to start.Create a client key too. It carries fixed capabilities rather than scopes, is safe to ship inside your app binary, and can only reach /v1/client/*.4
Register a device
Add the iOS SDK to your app with the client key. On launch it asks for permission, registers the device token and identifies the user by the id your backend already uses.
5
Identify the subscriber from your backend
The same subscriber can be created or updated from your server. This is an idempotent upsert on your own id, so it is safe to call on every login.
6
Send
202 with a message id (msg_...) and status: "queued". Delivery is asynchronous, so the 202 says the send was accepted, not that a device has it.7
Check what happened
GET /v1/deliveries/:id/attempts shows every attempt with the provider response and latency.Next
Authentication
Key kinds, scopes and how to pick a tenant per request.
Topics and preferences
Let people choose what reaches them, with the settings screen rendered from the API.
Segments
Send to everyone who matches conditions instead of a list of ids.
Workflows
React to what a user did, with waits, branches and dry runs.