Place gift card orders, retrieve order history, cancel scheduled orders, and resend to recipients.
/api/v1/orders
Returns a paginated list of orders for your organization. Supports filtering by order type, status, card type, and date range.
orders.read
pagepageSizeorderTypeONE_TIME | SMART | LINK | CAMPAIGN | REWARDcardTypeBRANDED_CARD | CHOICE_CARDstatusPENDING | IN_PROGRESS | COMPLETE | CANCELEDstartDate2024-01-01endDate2024-12-31searchKeywordclientOrderIdPOST /api/v1/orders/reward-links
appear here with orderType: "LINK" and an orderId starting with
"LO" (the value returned by the reward link API).
Use that same ID for
GET /api/v1/orders/{orderId}
to retrieve per-link redemption URLs once the order reaches status: "COMPLETE".
Filter with orderType=LINK to list only reward link orders.
/api/v1/orders/{orderId}
Retrieves the full details of a single order by its ID.
orders.read
orderId
Each entry in recipients represents a single gift card issuance. Most fields are
self-describing; two are order-type dependent:
recipients[].emailLINKorderType: "LINK") have no recipient email — the link itself is the access credential, so this field is null.recipients[].rewardLinkstatus: "COMPLETE"null while
PENDING / IN_PROGRESS / CANCELED.
This safety gate prevents the URL from being exposed before a scheduled send time, and also
ensures LINK orders don't surface partially generated links before background
processing finishes.
/api/v1/orders/branded-cards
Places a branded gift card order. Each recipient can receive a different amount in the product's local currency. Supports immediate and scheduled delivery.
orders.write
{
"idempotencyKey": "order-unique-key-001",
"productId": "10042",
"sendTiming": {
"type": "SCHEDULED",
"scheduledAt": "2024-03-01T09:00:00Z",
"timezone": "America/New_York"
},
"emailSetting": {
"senderName": "Giftronaut",
"subject": "A gift for you!",
"message": "Thank you for your hard work.",
"templateId": "12"
},
"recipients": [
{ "email": "alice@giftronaut.com", "firstName": "Alice", "lastName": "Smith", "company": "Giftronaut", "department": "Engineering", "amount": 50 },
{ "email": "bob@giftronaut.com", "firstName": "Bob", "lastName": "Jones", "amount": 50 }
],
"refundOption": false
}
idempotencyKeyproductIdsendTimingsendTiming.typeIMMEDIATE | SCHEDULEDsendTiming.scheduledAt2024-03-01T09:00:00ZsendTiming.timezoneAmerica/New_YorkemailSettingemailSetting.senderNameemailSetting.subjectemailSetting.messageemailSetting.templateIdrecipientsrecipients[].emailrecipients[].amountrecipients[].firstNamerecipients[].lastNamerecipients[].companyrecipients[].departmentrefundOptionfalse (default) = 180-day expiry; true = 30-day expirySCHEDULED, both scheduledAt and timezone are required. For IMMEDIATE, neither may be provided.amount must match a valid price point for the selected product.If the refundOption value is set to true, the following expiration and refund policies apply.
/api/v1/orders/choice-cards
Places a choice card order where each recipient selects their own gift from a curated collection. Each recipient can receive a different balance amount.
orders.write
{
"idempotencyKey": "order-choice-unique-001",
"productId": "55",
"sendTiming": {
"type": "IMMEDIATE"
},
"emailSetting": {
"senderName": "Giftronaut",
"subject": "Choose your gift!",
"message": "We appreciate everything you do.",
"templateId": "12"
},
"recipients": [
{ "email": "alice@giftronaut.com", "firstName": "Alice", "lastName": "Smith", "amount": 100.00 },
{ "email": "bob@giftronaut.com", "firstName": "Bob", "lastName": "Jones", "amount": 50.00, "company": "Giftronaut", "department": "Sales" }
],
"refundOption": false
}
idempotencyKeyproductIdsendTimingsendTiming.typeIMMEDIATE | SCHEDULEDsendTiming.scheduledAtsendTiming.timezoneemailSettingemailSetting.senderNameemailSetting.subjectemailSetting.messageemailSetting.templateIdrecipientsrecipients[].emailrecipients[].amountrecipients[].firstNamerecipients[].lastNamerecipients[].companyrecipients[].departmentrefundOptionfalse (default) = 180-day expiry; true = 30-day expiryamount.If the refundOption value is set to true, the following expiration and refund policies apply.
/api/v1/orders/reward-links
Creates a batch of redeemable gift card links without requiring recipient email addresses. You specify how many links to generate and the amount per link; each link is a unique URL that end users can use to redeem a gift card. This is useful for marketing campaigns, quick-win incentives, in-app rewards, and other use cases where email-based delivery is not suitable.
status: "PENDING". A background job then generates the
individual redemption URLs. Poll GET /api/v1/orders/{orderId} —
once the order status becomes COMPLETE, each
recipients[].rewardLink contains its redemption URL. Until then, rewardLink
is null.
refundOption: true = 30 days) for public distribution to limit unclaimed-link exposure.
orders.write
{
"idempotencyKey": "reward-link-unique-001",
"cardType": "BRANDED_CARD",
"productId": "101",
"quantity": 50,
"amountPerLink": 25.00,
"refundOption": false
}
idempotencyKeyorderId.cardTypeBRANDED_CARD | CHOICE_CARDproductIdquantityamountPerLinkrefundOptionfalse (default) = 180-day expiry; true = 30-day expiry with 50% refund of unredeemed amount.
On success, returns HTTP 201 with the newly created order summary. The orderId returned here is
the one used for polling via Get order. totalCost is always in USD and
equals amountPerLink × quantity converted at the product's current exchange rate (for branded
cards) or 1:1 (for choice cards).
totalCost in USD at request time — the full amount is deducted immediately.amountPerLink must match an allowed price step of the product.amountPerLink must be within the organization's configured min / max range.quantity is capped at 500 per request. For larger batches, submit multiple requests with distinct idempotency keys.recipients[].rewardLink field of Get order only after the order reaches status: "COMPLETE".If the refundOption value is set to true, the following expiration and refund policies apply.
/api/v1/orders/{orderId}/cancel
Cancels a scheduled order. The request must be made at least 10 minutes before the scheduled send time. Immediate orders cannot be canceled once placed. The held balance is refunded to your account immediately.
orders.cancel
ORDER_NOT_CANCELABLE — order is not scheduled, already dispatched, or the 10-minute window has passed.orderIdstatusCANCELED on success.canceledAtrefundOption0 or null = 180-day expiry (non-refundable); 1 = 30-day expiry (refundable)./api/v1/orders/{orderId}/resend
Resends gift cards to specific recipients. Optionally update a recipient's email address before resending.
orders.write
recipientsrecipients[].emailrecipients[].updatedEmail{
"recipients": [
{
"email": "jane.doe@giftronaut.com",
"updatedEmail": "newemail@giftronaut.com"
}
]
}
orderIdrequeuedresentToEmailsupdatedEmail when provided)./api/v1/orders/test-email
Sends a preview of the choice-card gift email to an address you control — rendered
with the exact same layout as the real delivery email, including a working redeem button that opens
a live preview of the redeem page (issued under Giftronaut's internal demo account). Your balance is
never charged and nothing appears in your order history. Personalization variables such as
{{First Name}} render as placeholder text. A daily limit applies (default 10 per day).
Choice cards only.
orders.write
emailproductIdamountemailSubjectsenderNametemplateId is given), then your account's default sender name.emailMessagetemplateId is given.templateIdGET /api/v1/templates) supplying layout colors/logo
plus default sender name and message; directly provided senderName/emailMessage
take priority. Defaults to the Giftronaut palette.sentTostatusSENT on success.remainingTodaysentAt/api/v1/orders/limit-increase-requests
Submit a request to raise your organization's daily and monthly order spending limits (USD).
The request is not applied immediately — it is queued for review and you'll
be notified once approved (typically within 1–2 business days). Send the daily and monthly
limits you currently see as a confirmation check: if they don't match our records, the request
is rejected with 409 STALE_LIMIT_SNAPSHOT so you can refresh and retry.
orders.write
currentDailyLimitUsdcurrentMonthlyLimitUsdrequestedDailyLimitUsdrequestedMonthlyLimitUsd{
"currentDailyLimitUsd": 500,
"currentMonthlyLimitUsd": 4000,
"requestedDailyLimitUsd": 1000,
"requestedMonthlyLimitUsd": 8000
}
statusPENDING_REVIEW on success.messageStart typing to search...
Select the APIs you want to integrate. A ready-to-use Markdown file with full API specs and a project context template will be generated and downloaded. Paste it into your AI assistant to get started instantly.