# Python

> Send your first email from Python using requests against the SendPing API.

SendPing ships an official Python SDK — see [Send emails with Python](https://www.sendping.co/docs/integrations/python) for the `pip install sendping` path — but you do not need it: this guide sends email by POSTing JSON to `https://www.sendping.co/api/emails`. The examples below use the popular [`requests`](https://pypi.org/project/requests/) library, but any HTTP client (including the stdlib `urllib`) works.

## 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.
- Python 3.8 or newer if you install the official `sendping` package (it declares `requires-python >= 3.8`). The `requests` example below runs on older interpreters too.

## 1. Install an HTTP client

**Pip**

```bash
pip install requests
```

## 2. Set your API key

Read your key from the environment so it never lives in source.

**.env**

```sh
SENDPING_API_KEY=mb_xxxxxxxxx
```

## 3. Send email using HTML

The easiest way to send an email is with the `html` field.

**requests**

```python
import os
import requests

res = requests.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()
print(res.json()["id"])
```

**urllib (stdlib)**

```python
import json, os, urllib.request

body = json.dumps({
    "from": "Acme <onboarding@yourdomain.com>",
    "to": ["delivered@test.sendping.co"],
    "subject": "hello world",
    "html": "<strong>it works!</strong>",
}).encode()

req = urllib.request.Request(
    "https://www.sendping.co/api/emails",
    data=body,
    headers={
        "Authorization": f"Bearer {os.environ['SENDPING_API_KEY']}",
        "Content-Type": "application/json",
    },
    method="POST",
)

with urllib.request.urlopen(req) as resp:
    print(json.load(resp)["id"])
```

> **Note:** Inside Flask, FastAPI, or Django, call the API the same way from your view/route handler. See [Send an email](https://www.sendping.co/docs/api/emails-send) for every body field.
