---
title: "Send install credentials to the traveler"
canonical: "https://bird.com/docs/api/reference/deliver-esim-credentials"
---

# Send install credentials to the traveler

`POST /v1/esim/sims/{esim_id}/credentials/deliver`

Sends a hosted installation link by email or SMS. The eSIM must be installable. Email includes the link expiry time; SMS includes the link. The recipient opens the page to view the QR code and manual installation details. Links expire after seven days; resending leaves earlier links valid until expiry or explicit revocation.

A `202` response confirms acceptance for sending. Check [List credential deliveries](/docs/api/reference/list-esim-deliveries) for the delivery outcome and any failure code. Reuse the same `Idempotency-Key` to recover an accepted send while its response is retained.

Returns `409` with `E26012` when the selected channel is unavailable; choose another configured channel. New deliveries return `501` while hosted links are unavailable. A retained successful response can still be replayed during that time.

## Code samples

**CLI**

```sh
bird esim credentials deliver <esim-id> \
  --channel sms \
  --locale nl \
  --to +31612345678
```

Examples: [CLI](/docs/api/reference/deliver-esim-credentials.cli.md) · [MCP](/docs/api/reference/deliver-esim-credentials.mcp.md) · [cURL](/docs/api/reference/deliver-esim-credentials.curl.md)

## Example response `202`

```json
{
  "id": "edv_01krdgeqcxet5s7t44vh8rt9mg",
  "channel": "email",
  "to": "traveler@example.com",
  "status": "pending",
  "failure_code": "invalid_recipient",
  "install_link": {
    "id": "eil_01krdgeqcxet5s7t44vh8rt9mg"
  }
}
```

## Path parameters

- `esim_id` (string): eSIM ID.

## Request body

- `to` (string, required): Recipient address. An email address for the email channel, an E.164 phone number for the sms channel.
- `channel` (string, required)

  Channel the install credentials are delivered over.

  Possible values: `email`, `sms`
- `locale` (string): Language for the message. Falls back to the closest available language, then English.

## Response body

- `id` (string, required)
- `channel` (string, required)
- `to` (string, required): Recipient address the message goes to.
- `status` (string, required)
- `failure_code` (nullable string, required)

  Why the delivery failed. Null unless status is failed. Open enum: treat unrecognized values as future failure kinds.

  Possible values (may grow over time): `invalid_recipient`, `suppressed`, `blocked`, `bounced`, `channel_unavailable`, `send_failed`
- `created_at` (string, required): When the delivery was accepted.
- `settled_at` (nullable string, required): When the outcome became known. Null while pending.
- `install_link` (nullable object, required): Link metadata for explicit revocation. Null for deliveries created before hosted links were enabled.
- `install_link.id` (string, required)
- `install_link.expires_at` (string, required): When the installation link expires.
- `install_link.revoked_at` (nullable string, required): When the link was revoked, or null while not revoked.

## Related resources

- [Should I use a Bird SDK or call the API directly?](/explained/platform/should-i-use-an-sdk-or-call-the-api-directly) (answer)
- [Build your first integration](/learn/paths/integration) (course)
- [Send your first email](/docs/get-started/send-your-first-email) (docs)

[Get an implementation brief](/learn/workspace?topic=api-basics)
