Sign inGet Started

Python · FastAPI

Envía tu primer correo electrónico desde un endpoint de FastAPI usando el cliente asíncrono del Bird Python SDK. Tres pasos: instalar, enviar, ejecutar.

1. Instala el SDK

Ejemplo de código
python -m pip install messagebird-sdk "fastapi[standard]"
Requiere Python 3.10+. El paquete de importación es bird.

2. Envía un correo electrónico

Exporta tu clave API. El SDK lee BIRD_API_KEY del entorno e infiere la región (us1 o eu1) a partir del prefijo bk_us1_ / bk_eu1_, así que AsyncBird() no necesita argumentos:
Ejemplo de código
export BIRD_API_KEY="bk_us1_..."
Crea main.py. Construye un AsyncBird al inicio y reutilízalo en todas las solicitudes: agrupa conexiones y es seguro compartirlo entre tareas.
Ejemplo de código
from bird import AsyncBird, APIError
from fastapi import FastAPI, HTTPException

app = FastAPI()
client = AsyncBird()


@app.post("/send", status_code=202)
async def send() -> dict[str, str]:
    try:
        message = await client.email.send(
            from_="onboarding@messagebird.dev",
            to=["delivered@messagebird.dev"],
            subject="Hello from Bird",
            html="<p>My first Bird email.</p>",
        )
    except APIError as err:
        raise HTTPException(status_code=502, detail=str(err))
    return {"id": message.id, "status": message.status}
from_ es la forma en Python del campo from (from es una palabra reservada). onboarding@messagebird.dev es el remitente compartido de incorporación de Bird (no requiere verificación de dominio) y delivered@messagebird.dev es un destinatario de sandbox que siempre entrega.
El SDK reintenta automáticamente los errores transitorios y reutiliza la clave de idempotencia de la llamada en cada intento. Esto evita que un reintento envíe el mensaje dos veces.

3. Pruébalo

Ejemplo de código
fastapi dev main.py
curl -X POST http://localhost:8000/send
Bird acepta el mensaje con un 202 y lo entrega de forma asíncrona; tu endpoint devuelve el ID de em_ y el estado:
Ejemplo de código
{
  "id": "em_01ky7ma8y2es1s2akzk53tmjn0",
  "status": "accepted"
}
Consulta el mensaje por su ID de em_ con await client.email.get(...) y observa cómo el estado pasa de accepted a delivered.

Próximos pasos