# Quickstart

Source: https://parasend.com/docs/quickstart

Send your first registered delivery in five minutes. Everything here runs in **test mode**: nothing is sent to anyone and nothing is billed.

## 1. Get a test key

[Create a free account](https://app.parasend.com/register), or [sign in](https://app.parasend.com/sign-in). In the portal, open **API keys** and make a key in test mode. Test keys start with `ps_test_`.

Keep the key out of your code:

```bash
export PARASEND_KEY=ps_test_...
```

## 2. Upload a file

Upload the document to send. The answer is the file's ID and its SHA-256.

```bash
curl -X POST "https://api.parasend.com/v1/files" \
  -H "Authorization: Bearer $PARASEND_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -F "file=@invoice-2026-114.pdf"
```

```json
{
  "id": "fil_01M6P3Q7Z8XK2VQ4N9R5T1W3YB",
  "object": "file",
  "name": "invoice-2026-114.pdf",
  "bytes": 48213,
  "sha256": "9f2c…",
  "created": "2026-11-06T10:12:03Z"
}
```

## 3. Send the delivery

Send it to a recipient, with the file's ID. Use your own e-mail address: in test mode it receives nothing, but you will open the link yourself in the next step.

```bash
curl -X POST "https://api.parasend.com/v1/deliveries" \
  -H "Authorization: Bearer $PARASEND_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "recipient": { "name": "Anna Björk Jónsdóttir", "email": "anna.bjork@example.com", "verification_level": "low" },
    "files": ["fil_01M6P3Q7Z8XK2VQ4N9R5T1W3YB"],
    "title": "Final notice: invoice 2026-114",
    "language": "en"
  }'
```

The answer is the delivery. Keep its `id`. Its `delivery_url` is the recipient's link.

## 4. Open it as the recipient

Open the `delivery_url` in a browser and confirm receipt. With `verification_level: "low"` the link alone is enough. To try an SMS code instead, send with `"verification_level": "medium"` and a `phone`: in test mode no SMS is sent and the code is always `000000`.

## 5. See what happened

List the delivery's events:

```bash
curl "https://api.parasend.com/v1/deliveries/dlv_.../events" \
  -H "Authorization: Bearer $PARASEND_KEY"
```

You will see `delivery.created`, `delivery.notified`, `delivery.opened` and `delivery.confirmed`. In production you would not poll: [add a webhook endpoint](/docs/api/webhooks/create) and Parasend sends each event as it happens.

## 6. Download the proof

```bash
curl "https://api.parasend.com/v1/deliveries/dlv_.../evidence/document" \
  -H "Authorization: Bearer $PARASEND_KEY" \
  -o delivery-certificate.pdf
```

That is the Delivery Certificate: who sent what to whom, how the recipient verified, and when each step happened.

## Next

- [Receiving webhooks](/docs/webhooks), and checking their signature.
- [Authentication](/docs/authentication): permissions, and moving to a live key.
- [Batches](/docs/api/batches): many deliveries at once, with follow-up.
- [Follow-up policies](/docs/api/follow-up-policies): the reminders a delivery sends while it waits.
