Delivery methods
How gifts reach recipients: EMAIL, TEXT, LINK, DIRECT_SHIPPING, and CODE — and what each requires.
The delivery.method you choose when creating an order determines how the gift reaches the recipient — and what information you must provide.
Choosing a method
| Method | How the gift is delivered | You must provide | Best for |
|---|---|---|---|
EMAIL | We email the voucher to the recipient | recipient.name, recipient.email, sender.name | Most digital gifting |
TEXT | We send the voucher via SMS | recipient.name, recipient.phone_number (in the product country's format), sender.name | Recipients you have phone numbers for |
LINK | You get a secure voucher URL and deliver it through your own channel (your app, chat, push, etc.) | recipient.name, sender.name | In-app rewards, full control over delivery UX |
DIRECT_SHIPPING | We ship a physical product to the address you provide | recipient.name, recipient.address, sender.name | Physical gifts when you already have the address |
CODE | No delivery at all — you receive the raw voucher code (value / PIN / URL) and use it however you like | Nothing (no recipient or sender needed) | Wallet top-ups, printing codes, custom fulfillment |
Every product supports a specific subset of methods — check available_delivery_method in the product catalog before ordering.
Retrieving the voucher after ordering
For LINK and CODE, the order creation response does not contain the voucher itself. Fetch it with GET /v1/orders/{id}:
LINK→order_items[].delivery.link— a secure URL for the recipient.CODE→order_items[].delivery.code—{ value, pin, url, expired_at }. Which ofvalue/pin/urlare populated varies by product — some vouchers are a code string, some are a redemption URL, some are a combination. Each field can benull, so handle all combinations.
Treat links and codes as secrets. Anyone holding the URL or code can redeem the gift. Deliver them only to the intended recipient, and never log them.
Recipient-provided delivery information
Some products let the recipient enter their own delivery details (e.g. their shipping address) through a secure link, instead of you collecting them upfront. This is controlled by the product's recipient_info_provided_by field:
["SENDER"]— you provide all delivery details at order time.["RECIPIENT"]or["SENDER", "RECIPIENT"]— the recipient can be asked to fill in their own details. The secure link is sent viaEMAILorLINK(and via SMS forMERCHANDISEproducts ordered withTEXT).
In recipient-provided flows:
- The order item stays
PENDINGuntil the recipient submits their information ("accepts" the gift). Track this viaorder_items[].delivery.recipient.acceptance—{ status: PENDING | ACCEPTED | EXPIRED, expiry_date }. - If the acceptance link expires before the recipient responds, the item will not be fulfilled.
- For privacy, delivery details the recipient entered themselves (phone number, address) are returned as
nullin order query responses.
Physical shipping tracking
For MERCHANDISE products, once shipped, tracking appears in order_items[].delivery.shipping — { tracking_number, courier }.
Updated about 3 hours ago
