Autenticazione e chiavi API
Ogni richiesta programmatica alle Bird API si autentica con una chiave API passata come bearer token. Le chiavi appartengono a uno spazio di lavoro, hanno permessi modificabili e vengono mostrate per intero una sola volta.
Per la distinzione tra credenziali di servizio e accesso delegato, vedi Chiavi API e token OAuth.
Come si autenticano le richieste
Passa la tua chiave nell'header Authorization in ogni richiesta. Gli SDK e la CLI accettano la chiave una sola volta e impostano l'header per te:
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." }'La regione nel prefisso della chiave indica quale host chiamare: le chiavi bk_us1_... vanno a https://us1.platform.bird.com, le chiavi bk_eu1_... a https://eu1.platform.bird.com. Gli SDK ufficiali Bird e la CLI leggono la regione dalla chiave e selezionano l'host per te. Una chiave inviata all'host regionale sbagliato restituisce 421 (tipo misdirected_error); vedi Regioni.
Una chiave mancante o non valida restituisce 401. Una chiave valida priva del permesso richiesto dall'endpoint restituisce 403. La semantica degli header e le risposte di errore si trovano nel riferimento all'autenticazione.
Anatomia di una chiave
Esempio di codice
bk_us1_Ab3xKq9mP2wR5tY8uI1oL4n3A3aww
└┬┘└┬┘ └──────────┬──────────┘└─┬──┘
│ │ payload checksum
│ └ region (routes the request)
└ Bird key prefix- Prefisso: bk_{region}_ indica il tipo di credenziale e la sua regione. Il prefisso fisso e distintivo è ciò che permette ai secret scanner di riconoscere una chiave Bird nel codice, e il segmento di regione instrada la richiesta all'host corretto.
- Payload: 23 caratteri casuali con 136 bit di entropia.
- Checksum: gli ultimi 6 caratteri sono un checksum del resto della chiave, così un SDK o la API possono rifiutare immediatamente una chiave digitata male o troncata, prima ancora di cercarla.
La chiave completa viene restituita una sola volta, nella risposta che la crea. Non puoi recuperare il testo in chiaro in seguito. Le risposte successive includono i primi 15 caratteri come key_prefix, ad esempio bk_us1_Ab3xKq9m. Includono anche un fingerprint stabile di 12 caratteri per abbinare una chiave nei log e nelle conversazioni con il supporto senza esporne il valore.
Creare una chiave
Crea le chiavi nella dashboard in Platform tools > Chiavi API. Una chiave viene creata con un nome, uno o più scope e una scadenza facoltativa. La risposta che la crea è l'unica che contiene il campo token (la chiave completa): salvala subito nel tuo secret manager.
Puoi anche crearne una senza browser, con bird api-keys create. L'emissione delle chiavi richiede lo scope api_keys:write, che il profilo di login in sola lettura non include, quindi richiedilo quando effettui l'accesso:
Esempio di codice
bird auth login --scope api_keys:write
bird api-keys create --body-file - <<'JSON'
{
"name": "Email operations production key",
"scopes": [{ "scope": "emails", "level": "write" }]
}
JSONEsegui bird api-keys create --example per stampare un body completo da modificare.
Gli scope sono l'unica cosa che una chiave non può concedersi da sola: api_keys:write non è disponibile per le chiavi API, quindi una chiave non può mai emetterne un'altra. L'emissione avviene come te, in una sessione della dashboard o con un grant CLI o MCP.

Puoi gestire una chiave dopo averla creata:
- Gli scope sono modificabili. La modifica sostituisce l'insieme dei permessi mantenendo lo stesso segreto. Puoi concedere scope di cui dispone il tuo account. Se la chiave è stata creata prima che potesse supportare un permesso come voice, ruotala per aggiungerlo. Le chiavi revocate e quelle già sostituite da una rotazione non possono essere modificate.
- La scadenza è fissa. Imposta expires_at quando una chiave deve smettere di funzionare a un momento noto (l'incarico di un collaboratore, una finestra di migrazione). Superato quel momento la chiave restituisce 401; una chiave senza scadenza resta attiva fino alla revoca.
- La gestione delle chiavi resta alle persone. Creare, modificare e revocare chiavi richiede il permesso api_keys:write, assegnato ai ruoli admin e developer dello spazio di lavoro (vedi Utenti, team e ruoli) e mai concedibile a una chiave API stessa. Una chiave compromessa non può generarne altre.
La pagina delle chiavi API elenca ogni chiave con il proprio key_prefix, gli scope e la data di last_used_on (precisione al giorno), così puoi individuare a colpo d'occhio le chiavi inutilizzate. Le chiavi revocate restano escluse dall'elenco, a meno che tu non scelga di mostrarle.
Scope e livelli
Ogni scope su una chiave è una coppia {scope, level}, dove level è read o write (write include read). Le chiavi API hanno questi scope:
| Scope | read | write |
|---|---|---|
| emails | Lettura dei messaggi inviati e dello stato di consegna | Invio di email |
| email_management | Lettura di soppressioni, configurazione email e template | Gestione di soppressioni, configurazione email e template |
| email_marketing | Lettura di contatti, audience e broadcast | Gestione di contatti, audience e broadcast |
| domains | Lettura dei domini di invio e dei relativi record DNS | Aggiunta, verifica e gestione dei domini di invio |
| sms | Lettura degli SMS inviati e dello stato di consegna | Invio di SMS |
| sms_management | Lettura di sender, registrazioni, soppressioni, risposte a keyword, destinazioni e template | Gestione di sender, registrazioni, soppressioni, risposte a keyword, destinazioni e template |
| Lettura dei messaggi WhatsApp inviati e del relativo stato | Invio di messaggi WhatsApp | |
| whatsapp_management | Lettura di template e impostazioni WhatsApp | Gestione di template e impostazioni WhatsApp |
| verify | Lettura dello stato di verifica | Invio e controllo dei codici di verifica |
| realtime | Lettura di app Realtime, canali e membri dei canali | Creazione di app e pubblicazione di eventi |
| voice | Lettura dei log delle leg e delle statistiche di chiamata | Autenticazione delle chiamate SIP e creazione di credenziali di sessione |
| voice_management | Lettura di trunk, gateway, numeri, caller ID e destinazioni | Gestione di trunk, gateway, numeri, caller ID e destinazioni |
| mailbox | Lettura di caselle di posta, thread e messaggi | Invio e risposta ai messaggi delle caselle di posta |
| mailbox_management | Lettura delle regole di ricezione e della configurazione delle caselle di posta | Creazione, aggiornamento ed eliminazione di caselle di posta e regole di ricezione |
| assets | Lettura di asset e cartelle | Caricamento, aggiornamento ed eliminazione di asset e cartelle |
| workspace | Lettura del nome, dell'ID organizzazione e delle impostazioni dello spazio di lavoro | Non disponibile |
| webhooks | Lettura delle sottoscrizioni webhook e dei relativi tentativi di consegna | Creazione, aggiornamento, eliminazione, test, replay e rotazione del segreto di un webhook |
| lookup | Non disponibile | Ricerca di numeri di telefono, indirizzi email e corrispondenze di identità |
La modifica delle impostazioni dello spazio di lavoro, la gestione dei membri, l'emissione di chiavi e la gestione dei pool IP non sono intenzionalmente concedibili alle chiavi API, quindi vengono eseguite come persona e non come chiave: tramite la dashboard, oppure tramite la CLI o il server MCP con un grant che possiede lo scope. Concedi l'insieme più ristretto possibile: una chiave che invia solo email dovrebbe avere emails:write e nient'altro.
lookup non ha operazioni a livello di lettura: ogni endpoint di ricerca, incluso il recupero di un risultato esistente, richiede write.
Revocare una chiave
Revoca una chiave dalla sua riga in Platform tools > Chiavi API. La revoca è permanente: una chiave revocata non può essere riattivata e il suo record viene conservato per audit con revoked_at impostato.
La revoca si propaga rapidamente ma non istantaneamente. La validazione delle chiavi passa attraverso una cache a breve durata, quindi una chiave appena revocata può continuare a funzionare per alcuni secondi (cinque al massimo) prima che ogni richiesta con essa restituisca 401.
Ruotare una chiave
La rotazione emette una sostituta per una chiave che già possiedi e ne restituisce il token una sola volta, in quella risposta. La sostituta eredita nome, scope e restrizioni IP sorgente della chiave originale. Inizia senza scadenza. Ruota una chiave dalla sua riga in Platform tools > Chiavi API, oppure senza browser con bird api-keys rotate e lo strumento api_keys_rotate MCP:
Esempio di codice
bird auth login --scope api_keys:write
bird api-keys rotate key_01hqz8kp3v9x2m --yesLa chiave precedente continua a funzionare per un periodo di grazia, 24 ore per impostazione predefinita, così puoi distribuire il nuovo token prima che il vecchio smetta di funzionare. Passa grace_period: 0 (--grace-period 0 sulla CLI) per revocare immediatamente la chiave precedente, che è quanto serve per una chiave compromessa: non c'è sovrapposizione e ogni richiesta che la utilizza ancora inizia a fallire. Una chiave già impostata per scadere prima del periodo di grazia mantiene la propria scadenza, perché la rotazione non estende mai la vita di una chiave.
Prima di automatizzare la rotazione delle chiavi, tieni presenti due vincoli. Una rotazione non trasferisce mai la scadenza, quindi la sostituzione di una chiave che scadeva a una data nota resta attiva fino alla revoca; riemettila con create quando la scadenza è importante. Inoltre una chiave può essere ruotata una sola volta: una seconda rotazione della stessa chiave restituisce 409, quindi invia un Idempotency-Key e un nuovo tentativo riprodurrà la risposta originale. Senza di esso, una rotazione la cui risposta non hai mai ricevuto ha generato una chiave attiva il cui token non puoi più leggere.
Sovrapporre due chiavi manualmente è comunque il percorso più sicuro quando non puoi prevedere quanto durerà il passaggio, perché il periodo di grazia è fissato al momento della rotazione e non può essere esteso in seguito:
- Crea una nuova chiave con gli stessi scope.
- Distribuisci la nuova chiave ai tuoi servizi.
- Monitora il last_used_on della vecchia chiave finché il traffico non si è spostato.
- Revoca la vecchia chiave.
Le chiavi appartengono allo spazio di lavoro
Una chiave API è legata al tuo spazio di lavoro e si autentica con l'autorità di quello spazio di lavoro. I permessi personali di chi l'ha creata non la influenzano. Questo ha due conseguenze pratiche:
- Le chiavi sopravvivono alle partenze. Quando un dipendente lascia l'azienda e il suo account utente viene rimosso, le chiavi che ha creato continuano a funzionare. Non avrai mai un'interruzione in produzione perché la persona che ha cliccato "create" ha lasciato l'azienda. (La sua partenza è comunque un buon motivo per ruotare le chiavi a cui aveva accesso.)
- Il raggio d'azione della chiave si ferma allo spazio di lavoro. Non può mai eseguire operazioni a livello di organizzazione: fatturazione, membri dell'organizzazione, impostazioni dell'organizzazione.
Poiché la chiave è vincolata allo spazio di lavoro, le richieste con una chiave non richiedono contesto aggiuntivo; vedi Spazio di lavoro per capire come lo spazio di lavoro e l'organizzazione superiore suddividono ciò che puoi raggiungere.
Il percorso delegato: token OAuth per la CLI e il server MCP
Le chiavi API sono per i servizi. La Bird CLI e il server Bird MCP usano OAuth quando una persona effettua l'accesso. Accedi tramite il browser, scegli uno spazio di lavoro e concedi un sottoinsieme dei tuoi permessi. Lo strumento riceve quindi un token utente bt_{region}_... a breve durata.
Ogni token è limitato ai permessi che possiedi. Puoi revocare l'accesso per ogni strumento in Profile > Connected apps. Gli strumenti gestiscono questi token per te, quindi non copiarli né salvarli in un secret manager. Usa le chiavi API per i carichi di lavoro lato server.
Passaggi successivi
- Riferimento all'autenticazione: semantica degli header di richiesta e risposte di errore
- Regioni: host regionali e instradamento
- Utenti, team e ruoli: chi può gestire le chiavi
- Spazio di lavoro: lo spazio di lavoro a cui è legata una chiave