Kirim email pertama Anda
Buat key API, kirim melalui domain onboarding bersama Bird, dan periksa hasilnya. Anda tidak perlu memverifikasi domain pengirim atau mempublikasikan catatan DNS untuk panduan ini. Verifikasi domain Anda sendiri sebelum mengirim ke pelanggan.
1. Buat key API
Di dashboard, buka Developers > Key API dan buat key. Key dicakupkan ke satu region dan berbentuk seperti bk_us1_... atau bk_eu1_...; region di awalan menunjukkan host API mana yang harus dipanggil: https://us1.platform.bird.com atau https://eu1.platform.bird.com.

Key lengkap ditampilkan sekali saja, saat pembuatan. Salin ke tempat yang aman, lalu ekspor agar cuplikan kode di langkah 2 dapat membacanya:
Contoh kode
export BIRD_API_KEY="bk_us1_..."2. Kirim email
Kirim dari onboarding@messagebird.dev, domain onboarding bersama Bird, yang tersedia di workspace Anda tanpa perlu pengaturan. Tujukan ke delivered@messagebird.dev, penerima sandbox yang selalu berhasil terkirim, sehingga hasilnya deterministik tanpa kotak surat asli.
Panggilan cURL menggunakan host US. Jika key Anda diawali bk_eu1_, panggil https://eu1.platform.bird.com sebagai gantinya. SDK membaca region dari key Anda dan memilih host secara otomatis. Tab TypeScript memerlukan npm install @messagebird/sdk.
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const msg = await bird.email.send({
from: { email: "onboarding@messagebird.dev", name: "Bird" },
to: ["delivered@messagebird.dev"],
subject: "Hello from Bird",
html: "<p>My first Bird email.</p>",
});
console.log(msg.id, msg.status);from bird import APIError, Bird
with Bird() as client:
try:
message = client.email.send(
from_={"email": "onboarding@messagebird.dev", "name": "Bird"},
to=["delivered@messagebird.dev"],
subject="Hello from Bird",
html="<p>My first Bird email.</p>",
)
print(message.id, message.status)
except APIError as err:
print("send failed:", err)package main
import (
"encoding/json"
"errors"
"log"
"net/http"
"os"
bird "github.com/messagebird/bird-sdk-go"
"github.com/messagebird/bird-sdk-go/option"
)
func main() {
client, err := bird.NewClient(option.WithAPIKey(os.Getenv("BIRD_API_KEY")))
if err != nil {
log.Fatal(err)
}
http.HandleFunc("POST /send", func(w http.ResponseWriter, r *http.Request) {
msg, err := client.Email.Send(r.Context(), bird.EmailSendParams{
From: "onboarding@messagebird.dev",
To: []string{"delivered@messagebird.dev"},
Subject: "Hello from Bird",
HTML: "<p>My first Bird email.</p>",
})
if err != nil {
var apiErr *bird.APIError
if errors.As(err, &apiErr) {
http.Error(w, apiErr.Error(), apiErr.StatusCode)
return
}
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusAccepted)
_ = json.NewEncoder(w).Encode(msg)
})
log.Fatal(http.ListenAndServe(":3000", nil))
}<?php
// Send your first email. Set BIRD_API_KEY in your environment, then run:
// php examples/quickstart-email.php
declare(strict_types=1);
require __DIR__ . '/../vendor/autoload.php';
use MessageBird\Bird;
$bird = new Bird(getenv('BIRD_API_KEY') ?: '');
$message = $bird->email->send(
from: 'Bird <onboarding@messagebird.dev>',
to: ['delivered@messagebird.dev'],
subject: 'Hello from Bird',
html: '<p>My first Bird email.</p>',
);
echo $message->getId(), ' ', $message->getStatus(), "\n";bird email send \
--from 'Bird <onboarding@messagebird.dev>' \
--html '<p>My first Bird email.</p>' \
--subject 'Hello from Bird' \
--to delivered@messagebird.devcurl -X POST "https://us1.platform.bird.com/v1/email/messages" \
-H "Authorization: Bearer $BIRD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": { "email": "onboarding@messagebird.dev", "name": "Bird" },
"to": ["delivered@messagebird.dev"],
"subject": "Hello from Bird",
"html": "<p>My first Bird email.</p>"
}'Untuk langkah instalasi dan eksekusi lengkap di setiap bahasa atau framework, gunakan quickstart per SDK.
3. Lihat hasilnya
API merespons dengan 202: Bird telah menerima pengiriman untuk diproses secara asinkron. Periksa status pengiriman secara terpisah. Field *_count melacak penerima melalui status-status pengiriman. Pada respons awal, satu penerima diterima dan belum ada yang terkirim.
Contoh kode
{
"id": "em_01ky7ma8y2es1s2akzk53tmjn0",
"status": "accepted",
"category": "marketing",
"from": { "email": "onboarding@messagebird.dev" },
"to": [{ "email": "delivered@messagebird.dev" }],
"subject": "Hello from Bird",
"accepted_count": 1,
"processed_count": 0,
"delivered_count": 0,
"deferred_count": 0,
"bounced_count": 0,
"complained_count": 0,
"rejected_count": 0,
"open_count": 0,
"click_count": 0,
"track_opens": true,
"track_clicks": true,
"created_at": "2026-07-23T13:58:20.866Z"
}Ambil pesan berdasarkan ID em_ untuk melihat statusnya saat ini. Pesan berpindah dari accepted melalui processed ke delivered. Lakukan polling hingga pesan sandbox mencapai delivered:
const msg = await bird.email.get("em_abc123");
msg.status; // "accepted" | "processed" | "delivered" | "bounced" | …
msg.delivered_count;
msg.bounced_count;message = client.email.get("em_abc123")
print(message.id, message.status, message.delivered_count)package main
import (
"context"
"fmt"
"log"
"os"
bird "github.com/messagebird/bird-sdk-go"
"github.com/messagebird/bird-sdk-go/option"
)
func main() {
client, err := bird.NewClient(option.WithAPIKey(os.Getenv("BIRD_API_KEY")))
if err != nil {
log.Fatal(err)
}
msg, err := client.Email.Get(context.Background(), "em_abc123")
if err != nil {
log.Fatal(err)
}
fmt.Println(*msg.Status, *msg.DeliveredCount)
}$message = $bird->email->get('em_01krdgeqcxet5s7t44vh8rt9mg');
echo $message->getStatus();bird email get <message-id>curl -X GET "https://{region}.platform.bird.com/v1/email/messages/{message_id}" \
-H "Authorization: Bearer $TOKEN"Di tab cURL, ganti {region} dan {message_id}, dan gunakan $BIRD_API_KEY sebagai pengganti $TOKEN.
Pembacaan sekarang menunjukkan status: "delivered", delivered_count: 1, dan stempel waktu delivered_at. Lihat panduan event untuk mengetahui apa yang ditetapkan delivered bagi penerima asli.
Karena Anda mengirim ke delivered@messagebird.dev, hasilnya dijamin: pesan melewati pipeline pengiriman asli Bird, termasuk bentuk event dan webhook produksi, tetapi tidak pernah menyentuh kotak surat asli. Untuk menguji bounce, kirim ke bounce@messagebird.dev. Panduan testing sandbox mencantumkan setiap alamat sandbox dan hasil simulasinya.
Tentang domain onboarding
Pengirim bersama onboarding@messagebird.dev tersedia untuk onboarding dan memiliki batasan berikut:
- Selain alamat sandbox @messagebird.dev, pengirim ini hanya mengirim ke anggota workspace Anda yang terverifikasi; penerima lain ditolak dengan 422.
- Pengiriman dibatasi 50 penerima per organisasi per hari UTC, menghitung setiap alamat to, cc, dan bcc, termasuk penerima sandbox. Melewati batas tersebut, API mengembalikan 429.
Saat Anda siap mengirim email ke pelanggan sesungguhnya, verifikasi domain pengirim Anda sendiri dan masukkan alamat Anda di from; semua bagian lain dalam request tetap sama.
Langkah berikutnya
- Quickstart per SDK: alur yang sama dalam bahasa dan framework Anda.
- Domain pengirim: verifikasi domain Anda sendiri untuk pengiriman produksi.
- Testing sandbox: setiap alamat sandbox dan event yang dipicunya.
- Referensi API email: skema request dan respons lengkap.
- Memulai dengan email: video onboarding dashboard, yang membahas lebih jauh dari halaman ini dan menambahkan domain pengirim beserta catatan DNS-nya
Sumber daya terkait
Lanjutkan dengan dokumentasi, panduan, dan contoh untuk topik ini. Sumber daya tersedia dalam bahasa Inggris.
Pahami konsepnyaShould I use a Bird SDK or call the API directly?Jelajahi kemampuannyaEmailIkuti jalur pembelajaranBuild your first integration
Coba praktiknya dan dapatkan ringkasan implementasi