# FastAPI

> Send your first email from a FastAPI endpoint by calling the SendPing API with httpx.

Python has an official package — `pip install sendping` — and it works unchanged from a FastAPI route. The example below instead POSTs JSON to `https://www.sendping.co/api/emails` with the async [`httpx`](https://www.python-httpx.org/) client, which pairs naturally with FastAPI. See [SDKs](https://www.sendping.co/docs/resources/sdks) for the package.

## Prerequisites

- A SendPing [API key](https://www.sendping.co/docs/api-keys/overview).
- A [verified domain](https://www.sendping.co/docs/domains/managing) to send from.

## 1. Install an HTTP client

**Pip**

```bash
pip install httpx
```

## 2. Set your API key

**.env**

```ini
SENDPING_API_KEY=mb_xxxxxxxxx
```

## 3. Send email from an endpoint

POST the email body to the SendPing API from a route handler. The easiest way to send is with the `html` field.

**main.py**

```py
import os
import httpx
from fastapi import FastAPI

app = FastAPI()


@app.post("/")
async def send_mail():
    async with httpx.AsyncClient() as client:
        res = await client.post(
            "https://www.sendping.co/api/emails",
            headers={"Authorization": f"Bearer {os.environ['SENDPING_API_KEY']}"},
            json={
                "from": "Acme <onboarding@yourdomain.com>",
                "to": ["delivered@test.sendping.co"],
                "subject": "hello world",
                "html": "<strong>it works!</strong>",
            },
        )
    res.raise_for_status()
    return res.json()
```

> **Note:** A successful call returns the created email's `id`. See every supported field in the [Send an email](https://www.sendping.co/docs/api/emails-send) reference.
