Skip to content

API keys are the primary way to authenticate. Each key is scoped by permissions and bound to one workspace, so you can issue separate keys per application, per environment, or per team — and revoke them independently.

  1. Log in to the customer portal.

  2. Go to Settings → API Keys and click Create API Key.

  3. Pick the permissions the key needs (see the table below) and, optionally, enable HMAC signature verification for high-security environments.

  4. Copy the key (sk_prod_…). It is shown only once — store it in your secrets manager right away.

Keys follow a deny-by-default model: a key can only call endpoints its permissions allow.

PermissionGrants
*Full access
sms.sendSend SMS (POST /sms/send)
sms.readStatus, stats, messages, unified view (GET /sms/*)
balance.readBalance (GET /user/balance)
pricing.readPricing (GET/POST /user/pricing)
payments.readPayments (GET /user/payments)
webhooks.readWebhook settings and logs (GET /user/webhooks, GET /user/webhooks/logs)
webhooks.writeUpdate webhooks and send tests (PUT /user/webhooks, POST /user/webhooks/test)
Use casePermissions
Send + track deliverysms.send, sms.read
Send only (fire & forget)sms.send
Dashboard / monitoringsms.read, balance.read
Webhook managementwebhooks.read, webhooks.write
Full API accesssms.send, sms.read, balance.read, pricing.read, payments.read, webhooks.read, webhooks.write

Calling an endpoint outside the key’s permissions returns 403 FORBIDDEN.

  • One key per application and environment. Separate keys for staging and production let you rotate or revoke one without touching the other.
  • Grant the minimum permissions. A background sender rarely needs payments.read.
  • Store keys in environment variables or a secrets manager. Never commit them to version control or embed them in client-side code.
  • Rotate on staff changes and on any suspicion of exposure — create a new key, switch traffic, then delete the old one.
  • Enable HMAC signing for environments where transport interception is a concern — see authentication.
HTTPCodeMeaning
401INVALID_API_KEYKey not found or malformed
401API_KEY_INACTIVEKey exists but is disabled
401API_KEY_EXPIREDKey past its expiry date
403FORBIDDENKey lacks the permission for this endpoint

Full list: error reference.