Authenticatie & API-keys
Elk programmatisch verzoek aan de Bird API wordt geauthenticeerd met een API-key die als bearer token wordt meegegeven. Keys horen bij een werkruimte, dragen machtigingen die je kunt wijzigen en worden slechts één keer volledig getoond.
Zie API-keys en OAuth-tokens voor het verschil tussen servicecredentials en gedelegeerde toegang.
Hoe verzoeken authenticeren
Geef je key mee in de Authorization-header bij elk verzoek. De SDK's en de CLI nemen de key één keer over en stellen de header voor je in:
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
await bird.email.send({
from: "hello@yourdomain.com",
to: ["delivered@messagebird.dev"],
subject: "Hi",
text: "Hello.",
});import os
from bird import Bird
client = Bird(api_key=os.environ["BIRD_API_KEY"])
client.email.send(
from_="hello@yourdomain.com",
to=["delivered@messagebird.dev"],
subject="Hi",
text="Hello.",
)client, err := bird.NewClient(option.WithAPIKey(os.Getenv("BIRD_API_KEY")))
if err != nil {
log.Fatal(err)
}
_, err = client.Email.Send(context.Background(), bird.EmailSendParams{
From: "hello@yourdomain.com",
To: []string{"delivered@messagebird.dev"},
Subject: "Hi",
Text: "Hello.",
})use MessageBird\Bird;
$bird = new Bird(getenv('BIRD_API_KEY') ?: '');
$bird->email->send(
from: 'hello@yourdomain.com',
to: ['delivered@messagebird.dev'],
subject: 'Hi',
text: 'Hello.',
);export BIRD_API_KEY="bk_us1_..."
bird email send \
--from hello@yourdomain.com \
--to delivered@messagebird.dev \
--subject Hi \
--text Hello.curl -X POST https://us1.platform.bird.com/v1/email/messages \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "from": "hello@yourdomain.com", "to": ["delivered@messagebird.dev"], "subject": "Hi", "text": "Hello." }'De regio in het key-prefix vertelt welke host je moet aanroepen: bk_us1_...-keys gaan naar https://us1.platform.bird.com, bk_eu1_...-keys naar https://eu1.platform.bird.com. Officiële Bird SDK's en de CLI lezen de regio uit de key en selecteren de host voor je. Een key die naar de verkeerde regionale host wordt gestuurd, retourneert 421 (type misdirected_error); zie Regions.
Een ontbrekende of ongeldige key retourneert 401. Een geldige key zonder de machtiging die een endpoint vereist, retourneert 403. Headersemantiek en foutantwoorden staan in de authenticatiereferentie.
Opbouw van een key
Codevoorbeeld
bk_us1_Ab3xKq9mP2wR5tY8uI1oL4n3A3aww
└┬┘└┬┘ └──────────┬──────────┘└─┬──┘
│ │ payload checksum
│ └ region (routes the request)
└ Bird key prefix- Prefix: bk_{region}_ benoemt het credentialtype en de regio. Het vaste, herkenbare prefix is wat secret scanners in staat stelt een Bird-key in code te herkennen, en het regiosegment routeert je verzoek naar de juiste host.
- Payload: 23 willekeurige tekens met 136 bits aan entropie.
- Checksum: de laatste 6 tekens zijn een checksum van de rest van de key, zodat een SDK of de API een verkeerd getypte of afgekapte key direct kan afwijzen, voordat deze ooit wordt opgezocht.
De volledige key wordt eenmalig geretourneerd, in het antwoord dat de key aanmaakt. Je kunt de plaintext later niet meer ophalen. Daaropvolgende antwoorden bevatten de eerste 15 tekens als key_prefix, bijvoorbeeld bk_us1_Ab3xKq9m. Ze bevatten ook een stabiel 12-teken fingerprint om een key in logs en supportgesprekken te herkennen zonder de waarde prijs te geven.
Als je een key kwijtraakt, roteer hem voor een nieuw geheim, of trek hem in en maak een nieuwe aan.
Een key aanmaken
Maak keys aan in het dashboard onder Platform tools > API keys. Een key wordt aangemaakt met een naam, een of meer scopes en een optionele verloopdatum. Het antwoord dat de key aanmaakt is het enige dat ooit het token-veld (de volledige key) bevat: sla het meteen op in je secret manager.
Je kunt er ook een aanmaken zonder browser, met bird api-keys create. Voor het uitgeven van keys is de api_keys:write-scope nodig, die niet in de read-only loginbasislijn zit. Vraag deze daarom aan wanneer je inlogt:
Codevoorbeeld
bird auth login --scope api_keys:write
bird api-keys create --body-file - <<'JSON'
{
"name": "Email operations production key",
"scopes": [{ "scope": "emails", "level": "write" }]
}
JSONVoer bird api-keys create --example uit om een volledige body af te drukken die je kunt bewerken.
Scopes zijn het enige wat een key niet aan zichzelf kan toekennen: api_keys:write is niet beschikbaar voor API-keys, dus een key kan nooit een andere key uitgeven. Uitgifte draait als jij, op een dashboardsessie of een CLI- of MCP-grant.

Je kunt een key na het aanmaken beheren:
- Scopes zijn bewerkbaar. Bewerken vervangt de machtigingenset en behoudt hetzelfde geheim. Je kunt scopes toekennen die je eigen account heeft. Als de key is aangemaakt voordat deze een machtiging zoals voice kon ondersteunen, roteer hem dan om die machtiging toe te voegen. Ingetrokken keys en keys die al door rotatie zijn vervangen, kunnen niet worden bewerkt.
- De verloopdatum staat vast. Stel expires_at in wanneer een key op een bekend tijdstip moet stoppen met werken (de opdracht van een contractant, een migratieperiode). Na dat moment retourneert de key 401; een key zonder verloopdatum blijft geldig tot hij wordt ingetrokken.
- Keybeheer blijft bij mensen. Het aanmaken, bewerken en intrekken van keys vereist de api_keys:write-machtiging, die de werkruimte-admin- en developer-rollen hebben (zie Users, teams & roles) en die nooit aan een API-key zelf kan worden toegekend. Een gelekte key kan geen nieuwe keys aanmaken.
De API keys-pagina toont elke key met de bijbehorende key_prefix, scopes en last_used_on-datum (dagprecisie), zodat je verouderde keys in één oogopslag kunt herkennen. Ingetrokken keys worden niet getoond, tenzij je ervoor kiest ze weer te laten zien.
Scopes & niveaus
Elke scope op een key is een {scope, level}-paar, waarbij level gelijk is aan read of write (write omvat read). API-keys hebben deze scopes:
| Scope | read | write |
|---|---|---|
| emails | Lees verzonden berichten en bezorgstatus | Verstuur e-mail |
| email_management | Lees suppressies, e-mailconfiguratie en templates | Beheer suppressies, e-mailconfiguratie en templates |
| email_marketing | Lees contacten, doelgroepen en broadcasts | Beheer contacten, doelgroepen en broadcasts |
| domains | Lees verzenddomeinen en hun DNS-records | Voeg verzenddomeinen toe, verifieer en beheer ze |
| sms | Lees verzonden SMS en bezorgstatus | Verstuur SMS |
| sms_management | Lees afzenders, registraties, suppressies, keyword replies, bestemmingen en templates | Beheer afzenders, registraties, suppressies, keyword replies, bestemmingen en templates |
| Lees verzonden WhatsApp-berichten en status | Verstuur WhatsApp-berichten | |
| whatsapp_management | Lees WhatsApp-templates en -instellingen | Beheer WhatsApp-templates en -instellingen |
| verify | Lees verificatiestatus | Verstuur en controleer verificatiecodes |
| realtime | Lees Realtime-apps, -kanalen en -kanaalleden | Maak apps aan en publiceer events |
| voice | Lees leglogs en gespreksstatistieken | Authenticeer SIP-gesprekken en maak sessiecredentials aan |
| voice_management | Lees trunks, gateways, nummers, beller-ID's en bestemmingen | Beheer trunks, gateways, nummers, beller-ID's en bestemmingen |
| mailbox | Lees mailboxen, threads en berichten | Verstuur en beantwoord mailboxberichten |
| mailbox_management | Lees ontvangstregels en mailboxconfiguratie | Maak mailboxen en ontvangstregels aan, werk ze bij en verwijder ze |
| assets | Lees assets en mappen | Upload, werk bij en verwijder assets en mappen |
| workspace | Lees de naam, organisatie-ID en instellingen van de werkruimte | Niet beschikbaar |
| webhooks | Lees webhookabonnementen en hun afleveringspogingen | Maak webhooks aan, werk ze bij, verwijder, test, replay en roteer het geheim van een webhook |
| lookup | Niet beschikbaar | Zoek telefoonnummers, e-mailadressen en identiteitsmatches op |
Het wijzigen van werkruimte-instellingen, beheren van leden, uitgeven van keys en beheren van IP-pools zijn bewust niet toekenbaar aan API-keys, zodat ze als persoon worden uitgevoerd in plaats van als key: via het dashboard, of via de CLI of MCP-server op een grant die de scope heeft. Ken de smalst mogelijke set toe: een key die alleen e-mail verstuurt, hoeft alleen emails:write te hebben.
lookup heeft geen bewerkingen op leesniveau: elk opzoek-endpoint, inclusief het ophalen van een bestaand resultaat, vereist write.
Een key intrekken
Trek een key in vanuit de rij onder Platform tools > API keys. Intrekking is permanent: een ingetrokken key kan niet opnieuw worden geactiveerd en het record blijft bewaard voor audit met revoked_at ingesteld.
Intrekking propageert snel maar niet onmiddellijk. Keyvalidatie verloopt via een kortstondige cache, dus een net ingetrokken key kan nog een paar seconden blijven werken (maximaal vijf) voordat elk verzoek ermee 401 retourneert.
Een key roteren
Roteren geeft een vervanging uit voor een key die je al hebt en retourneert de token ervan eenmalig, in dat antwoord. De vervanging neemt de naam, scopes en bron-IP-restricties van de bronkey over. De vervanging begint zonder verloopdatum. Roteer een key vanuit de rij onder Platform tools > API keys, of zonder browser met bird api-keys rotate en de api_keys_rotate MCP-tool:
Codevoorbeeld
bird auth login --scope api_keys:write
bird api-keys rotate key_01hqz8kp3v9x2m --yesDe vorige key blijft werken gedurende een overgangsperiode, standaard 24 uur, zodat je het nieuwe token kunt deployen voordat het oude stopt. Geef grace_period: 0 mee (--grace-period 0 op de CLI) om de vorige key onmiddellijk in te trekken. Dat is wat een gelekte key vereist: er is geen overlap en elk verzoek dat de oude key nog meestuurt, begint te falen. Een key die al eerder verloopt dan de overgangsperiode behoudt zijn eigen verloopdatum, omdat roteren het leven van een key nooit verlengt.
Let op twee beperkingen voordat je sleutelrotatie automatiseert. Een rotatie neemt de vervaldatum nooit mee, dus de vervanging van een sleutel die op een vast moment verliep, blijft geldig tot hij wordt ingetrokken; maak opnieuw aan met create als de vervaldatum ertoe doet. Een sleutel kan maar één keer worden geroteerd: een tweede rotatie van dezelfde sleutel retourneert 409, dus stuur een Idempotency-Key mee en een retry speelt het oorspronkelijke antwoord opnieuw af. Zonder idempotency-sleutel heeft een rotatie waarvan je het antwoord nooit hebt ontvangen een actieve sleutel aangemaakt waarvan je het token niet meer kunt opvragen.
Twee keys handmatig overlappen is nog steeds het veiligste pad wanneer je niet kunt voorspellen hoe lang de omschakeling duurt, omdat de overgangsperiode vaststaat op het moment van roteren en achteraf niet kan worden verlengd:
- Maak een nieuwe key aan met dezelfde scopes.
- Deploy de nieuwe key naar je services.
- Houd de last_used_on van de oude key in de gaten totdat het verkeer is verplaatst.
- Trek de oude key in.
Keys horen bij de werkruimte
Een API-key is gebonden aan je werkruimte en authenticeert met de autoriteit van die werkruimte. De persoonlijke machtigingen van de maker hebben er geen invloed op. Dat heeft twee praktische gevolgen:
- Keys overleven vertrekken. Wanneer een medewerker vertrekt en het gebruikersaccount wordt verwijderd, blijven de keys die diegene heeft aangemaakt werken. Je hebt nooit een productie-uitval omdat de persoon die op "create" klikte het bedrijf heeft verlaten. (Het vertrek is wel een goed moment om keys te roteren waartoe diegene toegang had.)
- Het bereik van de key stopt bij de werkruimte. De key kan nooit bewerkingen op organisatieniveau uitvoeren: facturering, organisatieleden, organisatie-instellingen.
Omdat de key aan de werkruimte is vastgepind, hebben verzoeken met een key geen extra context nodig; zie Workspace voor hoe de werkruimte en de bovenliggende organisatie verdelen wat je kunt bereiken.
Het gedelegeerde pad: OAuth-tokens voor de CLI en MCP-server
API-keys zijn voor services. De Bird CLI en Bird MCP-server gebruiken OAuth wanneer een persoon inlogt. Je logt in via de browser, kiest een werkruimte en kent een subset van je machtigingen toe. De tool ontvangt dan een kortstondig bt_{region}_...-usertoken.
Elk token is beperkt tot machtigingen die je hebt. Je kunt de toegang per tool intrekken onder Profile > Connected apps. De tools beheren deze tokens voor je; kopieer ze niet en sla ze niet op in een secret manager. Gebruik API-keys voor serverworkloads.
Volgende stappen
- Authenticatiereferentie: headersemantiek en foutantwoorden voor verzoeken
- Regions: regionale hosts en routering
- Users, teams & roles: wie keys kan beheren
- Workspace: de werkruimte waaraan een key is gebonden