Autentikasi & kunci API
Setiap permintaan terprogram ke Bird API melakukan autentikasi dengan kunci API yang dikirim sebagai bearer token. Kunci terikat pada workspace, membawa izin yang dapat Anda ubah, dan ditampilkan secara lengkap hanya sekali.
Untuk perbedaan antara kredensial layanan dan akses terdelegasi, lihat Kunci API dan token OAuth.
Cara permintaan melakukan autentikasi
Kirim kunci Anda di header Authorization pada setiap permintaan. SDK dan CLI menerima kunci sekali lalu mengatur header untuk Anda:
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." }'Region pada prefix kunci menunjukkan host mana yang harus dipanggil: kunci bk_us1_... menuju ke https://us1.platform.bird.com, kunci bk_eu1_... ke https://eu1.platform.bird.com. SDK resmi Bird dan CLI membaca region dari kunci dan memilih host untuk Anda. Kunci yang dikirim ke host regional yang salah mengembalikan 421 (tipe misdirected_error); lihat Region.
Kunci yang tidak ada atau tidak valid mengembalikan 401. Kunci valid yang tidak memiliki izin yang dibutuhkan endpoint mengembalikan 403. Semantik header dan respons kesalahan ada di referensi autentikasi.
Anatomi kunci
Contoh kode
bk_us1_Ab3xKq9mP2wR5tY8uI1oL4n3A3aww
└┬┘└┬┘ └──────────┬──────────┘└─┬──┘
│ │ payload checksum
│ └ region (routes the request)
└ Bird key prefix- Prefix: bk_{region}_ menamai tipe kredensial dan regionnya. Prefix tetap yang khas inilah yang memungkinkan pemindai rahasia mengenali kunci Bird dalam kode, dan segmen region mengarahkan permintaan Anda ke host yang tepat.
- Payload: 23 karakter acak yang membawa 136 bit entropi.
- Checksum: 6 karakter terakhir adalah checksum dari sisa kunci, sehingga SDK atau API dapat langsung menolak kunci yang salah ketik atau terpotong, sebelum kunci tersebut pernah dicari.
Kunci lengkap dikembalikan sekali, dalam respons yang membuatnya. Anda tidak dapat mengambil teks aslinya nanti. Respons berikutnya menyertakan 15 karakter pertama sebagai key_prefix, misalnya bk_us1_Ab3xKq9m. Respons juga menyertakan fingerprint stabil 12 karakter untuk mencocokkan kunci di log dan percakapan dukungan tanpa mengekspos nilainya.
Jika Anda kehilangan kunci, rotasi kunci tersebut untuk mendapatkan rahasia baru, atau cabut kunci tersebut dan buat yang baru.
Membuat kunci
Buat kunci di dashboard di bawah Platform tools > Kunci API. Kunci dibuat dengan nama, satu atau lebih scope, dan kedaluwarsa opsional. Respons yang membuatnya adalah satu-satunya yang membawa field token (kunci lengkap): simpan di secret manager Anda segera.
Anda juga dapat membuat kunci tanpa browser, dengan bird api-keys create. Penerbitan kunci memerlukan scope api_keys:write, yang tidak termasuk dalam baseline login read-only, jadi minta scope tersebut saat Anda masuk:
Contoh kode
bird auth login --scope api_keys:write
bird api-keys create --body-file - <<'JSON'
{
"name": "Email operations production key",
"scopes": [{ "scope": "emails", "level": "write" }]
}
JSONJalankan bird api-keys create --example untuk mencetak body lengkap yang bisa diedit.
Scope adalah satu hal yang tidak dapat diberikan kunci kepada dirinya sendiri: api_keys:write tidak tersedia untuk kunci API, sehingga kunci tidak pernah bisa menerbitkan kunci lain. Penerbitan berjalan sebagai Anda, pada sesi dashboard atau grant CLI atau MCP.

Anda dapat mengelola kunci setelah membuatnya:
- Scope dapat diedit. Pengeditan mengganti set izin dan mempertahankan rahasia yang sama. Anda dapat memberikan scope yang dimiliki akun Anda sendiri. Jika kunci dibuat sebelum bisa mendukung izin seperti voice, rotasi kunci tersebut untuk menambahkan izin itu. Kunci yang dicabut dan kunci yang sudah digantikan oleh rotasi tidak dapat diedit.
- Kedaluwarsa bersifat tetap. Atur expires_at ketika kunci harus berhenti bekerja pada waktu tertentu (keterlibatan kontraktor, jendela migrasi). Setelah momen tersebut, kunci mengembalikan 401; kunci tanpa kedaluwarsa berlaku sampai dicabut.
- Pengelolaan kunci tetap pada orang. Membuat, mengedit, dan mencabut kunci memerlukan izin api_keys:write, yang dimiliki oleh peran workspace admin dan developer (lihat Users, teams & roles) dan tidak pernah dapat diberikan ke kunci API itu sendiri. Kunci yang bocor tidak dapat membuat lebih banyak kunci.
Halaman kunci API menampilkan setiap kunci dengan key_prefix, scope, dan tanggal last_used_on (presisi hari), sehingga Anda dapat melihat kunci usang secara sekilas. Kunci yang dicabut tidak muncul di daftar kecuali Anda memilih untuk menampilkannya.
Scope & level
Setiap scope pada kunci adalah pasangan {scope, level}, di mana level adalah read atau write (write mencakup read). Kunci API memiliki scope berikut:
| Scope | read | write |
|---|---|---|
| emails | Membaca pesan terkirim dan status pengiriman | Mengirim email |
| email_management | Membaca supresi, konfigurasi email, dan template | Mengelola supresi, konfigurasi email, dan template |
| email_marketing | Membaca kontak, audiens, dan broadcast | Mengelola kontak, audiens, dan broadcast |
| domains | Membaca domain pengiriman dan catatan DNS-nya | Menambahkan, memverifikasi, dan mengelola domain pengiriman |
| sms | Membaca SMS terkirim dan status pengiriman | Mengirim SMS |
| sms_management | Membaca pengirim, registrasi, supresi, balasan kata kunci, tujuan, dan template | Mengelola pengirim, registrasi, supresi, balasan kata kunci, tujuan, dan template |
| Membaca pesan WhatsApp terkirim dan statusnya | Mengirim pesan WhatsApp | |
| whatsapp_management | Membaca template dan pengaturan WhatsApp | Mengelola template dan pengaturan WhatsApp |
| verify | Membaca status verifikasi | Mengirim dan memeriksa kode verifikasi |
| realtime | Membaca aplikasi Realtime, channel, dan anggota channel | Membuat aplikasi dan mempublikasikan event |
| voice | Membaca log leg dan statistik panggilan | Mengautentikasi panggilan SIP dan membuat kredensial sesi |
| voice_management | Membaca trunk, gateway, nomor, caller ID, dan tujuan | Mengelola trunk, gateway, nomor, caller ID, dan tujuan |
| mailbox | Membaca mailbox, thread, dan pesan | Mengirim dan membalas pesan mailbox |
| mailbox_management | Membaca aturan penerimaan dan konfigurasi mailbox | Membuat, memperbarui, dan menghapus mailbox dan aturan penerimaan |
| assets | Membaca aset dan folder | Mengunggah, memperbarui, dan menghapus aset dan folder |
| workspace | Membaca nama workspace, ID organisasi, dan pengaturan | Tidak tersedia |
| webhooks | Membaca langganan webhook dan percobaan pengirimannya | Membuat, memperbarui, menghapus, menguji, memutar ulang, dan merotasi rahasia webhook |
| lookup | Tidak tersedia | Mencari nomor telepon, alamat email, dan kecocokan identitas |
Mengubah pengaturan workspace, mengelola anggota, menerbitkan kunci, dan mengelola IP pool sengaja tidak dapat diberikan ke kunci API, sehingga operasi tersebut berjalan sebagai orang, bukan sebagai kunci: melalui dashboard, atau melalui CLI atau server MCP pada grant yang memiliki scope tersebut. Berikan set paling sempit yang memadai: kunci yang hanya mengirim email sebaiknya hanya memiliki emails:write dan tidak ada yang lain.
lookup tidak memiliki operasi level read: setiap endpoint pencarian, termasuk mengambil hasil yang sudah ada, memerlukan write.
Mencabut kunci
Cabut kunci dari barisnya di bawah Platform tools > Kunci API. Pencabutan bersifat permanen: kunci yang dicabut tidak dapat diaktifkan kembali, dan catatannya disimpan untuk audit dengan revoked_at diatur.
Pencabutan menyebar cepat tetapi tidak instan. Validasi kunci berjalan melalui cache berumur pendek, sehingga kunci yang baru dicabut dapat tetap bekerja selama beberapa detik (paling lama lima) sebelum setiap permintaan dengannya mengembalikan 401.
Merotasi kunci
Rotasi menerbitkan pengganti untuk kunci yang sudah Anda miliki dan mengembalikan token-nya sekali, dalam respons tersebut. Pengganti membawa nama, scope, dan pembatasan IP sumber dari kunci asal. Pengganti dimulai tanpa kedaluwarsa. Rotasi kunci dari barisnya di bawah Platform tools > Kunci API, atau tanpa browser dengan bird api-keys rotate dan tool api_keys_rotate MCP:
Contoh kode
bird auth login --scope api_keys:write
bird api-keys rotate key_01hqz8kp3v9x2m --yesKunci sebelumnya tetap bekerja selama masa tenggang, 24 jam secara default, sehingga Anda dapat men-deploy token baru sebelum yang lama berhenti. Kirim grace_period: 0 (--grace-period 0 di CLI) untuk langsung mencabut kunci sebelumnya, yang diperlukan untuk kunci yang bocor: tidak ada overlap, dan setiap permintaan yang masih membawanya mulai gagal. Kunci yang sudah diatur kedaluwarsa lebih awal dari masa tenggang tetap mempertahankan kedaluwarsanya sendiri, karena rotasi tidak pernah memperpanjang umur kunci.
Sebelum mengotomatiskan rotasi kunci, perhatikan dua batasan. Rotasi tidak pernah membawa kedaluwarsa ke kunci pengganti, jadi pengganti untuk kunci yang kedaluwarsa pada waktu tertentu akan hidup sampai dicabut; terbitkan ulang dengan create jika kedaluwarsa itu penting. Selain itu, satu kunci hanya bisa dirotasi sekali: rotasi kedua pada kunci yang sama mengembalikan 409, jadi kirim Idempotency-Key agar percobaan ulang memutar ulang respons asli. Tanpa itu, rotasi yang balasannya tidak pernah Anda terima telah membuat kunci aktif yang tokennya tidak bisa Anda baca kembali.
Menumpuk dua kunci secara manual tetap merupakan jalur yang lebih aman ketika Anda tidak dapat memprediksi berapa lama peralihan berlangsung, karena masa tenggang ditetapkan saat Anda merotasi dan tidak dapat diperpanjang setelahnya:
- Buat kunci baru dengan scope yang sama.
- Deploy kunci baru ke layanan Anda.
- Pantau last_used_on kunci lama sampai lalu lintas berpindah.
- Cabut kunci lama.
Kunci terikat pada workspace
Kunci API terikat pada workspace Anda dan melakukan autentikasi dengan otoritas workspace tersebut. Izin pribadi pembuat tidak memengaruhinya. Hal ini memiliki dua konsekuensi praktis:
- Kunci tetap bertahan saat seseorang pergi. Ketika seorang karyawan keluar dan akun penggunanya dihapus, kunci yang mereka buat tetap bekerja. Anda tidak pernah mengalami gangguan produksi karena orang yang mengklik "create" meninggalkan perusahaan. (Kepergian mereka tetap merupakan saat yang tepat untuk merotasi kunci yang pernah mereka akses.)
- Jangkauan kunci berhenti di workspace. Kunci tidak pernah dapat menjalankan operasi level organisasi: penagihan, anggota organisasi, pengaturan organisasi.
Karena kunci terpasang pada workspace, permintaan dengan kunci tidak memerlukan konteks tambahan; lihat Workspace untuk mengetahui bagaimana workspace dan organisasi di atasnya membagi apa yang dapat Anda jangkau.
Jalur terdelegasi: token OAuth untuk CLI dan server MCP
Kunci API ditujukan untuk layanan. Bird CLI dan server Bird MCP menggunakan OAuth saat seseorang masuk. Anda masuk melalui browser, memilih workspace, dan memberikan subset izin Anda. Tool kemudian menerima token pengguna bt_{region}_... berumur pendek.
Setiap token dibatasi pada izin yang Anda miliki. Anda dapat mencabut akses untuk setiap tool di bawah Profile > Connected apps. Tool mengelola token ini untuk Anda, jadi jangan menyalin atau menyimpannya di secret manager. Gunakan kunci API untuk beban kerja server.
Langkah selanjutnya
- Referensi autentikasi: semantik header permintaan dan respons kesalahan
- Region: host regional dan routing
- Users, teams & roles: siapa yang dapat mengelola kunci
- Workspace: workspace tempat kunci terikat