---
title: "Send install credentials to the traveler"
method: POST
path: "/v1/esim/sims/{esim_id}/credentials/deliver"
tags: ["esims"]
---

# Send install credentials to the traveler

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

## Request

- Base URL: `https://us1.platform.bird.com`
- URL: `https://us1.platform.bird.com/v1/esim/sims/{esim_id}/credentials/deliver`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `bird_session`

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.

## Path parameters

- `esim_id` string, required

## Headers

- `Idempotency-Key` string
- `X-Workspace-Id` string
- `X-Organization-Id` string

## Request body

- EsimDelivery: Where and how install credentials reach the traveler. The recipient is a raw address, so delivery works for travelers who are not stored anywhere: an email address for email, an E.164 phone number for sms.
  - `to` string, required: Recipient address. An email address for the email channel, an E.164 phone number for the sms channel.
  - `channel` 'email' | 'sms', required: Channel the install credentials are delivered over.
  - `locale` string: A language tag in BCP-47 form, for example `en` or `pt-BR`.

## Response `202`

The delivery was accepted. The returned id reappears on the `esim.credentials.delivered` or `esim.credentials.delivery_failed` event that settles this delivery.

- EsimCredentialsDelivery: One credential delivery to a traveler. Returned when a delivery is accepted and listed on the eSIM's delivery history; the id reappears on the event that settles it.
  - `id` string, required
  - `channel` 'email' | 'sms', required: Channel the install credentials are delivered over.
  - `to` string, required: Recipient address the message goes to.
  - `status` 'pending' | 'delivered' | 'failed', required: Outcome of a credential delivery. - `pending`: accepted; the outcome has not settled. - `delivered`: the message reached the recipient's provider; terminal. - `failed`: the message could not be delivered; `failure_code` says why. Terminal.
  - `failure_code` string, nullable, required: Why the delivery failed. Null unless status is failed. Open enum: treat unrecognized values as future failure kinds.
  - `created_at` string, date-time, required: When the delivery was accepted.
  - `settled_at` string, date-time, nullable, required: When the outcome became known. Null while pending.
  - `install_link` EsimInstallLinkMetadata, required: Non-secret link details for identifying and revoking a delivered installation link. Contains no token or installation credentials.
    - `id` string, required
    - `expires_at` string, date-time, required: When the installation link expires.
    - `revoked_at` string, date-time, nullable, required: When the link was revoked, or null while not revoked.

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Insufficient permissions
- `404`: Resource not found
- `409`: Resource conflict
- `422`: The request has invalid field values, violates a business rule, or carries a query parameter the endpoint does not declare. Field validation errors use `type: validation_error` and include the affected fields in `details`. Business-rule errors identify the failed rule in `type`.
- `429`: Rate limit exceeded
- `500`: Internal server error
- `501`: The operation is not supported
- `503`: The service is temporarily unavailable. If `Retry-After` is present, wait for that delay before retrying; otherwise, retry with exponential backoff. Reuse the same idempotency key and request when retrying a mutation.

---

[API](https://skmtc.dev/messagebird/apis/bird-api.md) · [All operations](https://skmtc.dev/messagebird/apis/bird-api/llms.txt) · [OpenAPI document](https://skmtc.dev/messagebird/apis/bird-api/revisions/3e2a50466454?raw)
