Place gift card orders, retrieve order history, cancel scheduled orders, and resend to recipients.
Use the following endpoints to create, view, cancel, and resend orders. The Giftronaut API allows you to automate, track, and manage reward orders—whether you're sending Branded Cards, Choice Cards, or reward links.
/api/v1/orders
Returns a paginated list of orders for your organization. Supports filtering by order type, status, card type, and date range.
orderType: ONE_TIME · SMART · LINK · CAMPAIGN · REWARD — cardType: BRANDED_CARD · CHOICE_CARD
Client order reference for looking up and tracking orders: filter with clientOrderId.
Similarly, you can pull individual orders using either your client order reference, or the order ID
provided by Giftronaut.
View order history and balance ledger: orders here, ledger in the Balance API.
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
orderIdLINK: This will return the reward link in recipients[].rewardLink once the
order is complete.
The GET /api/v1/orders/{orderId} response for a completed reward link order includes each
link in recipients[].rewardLink.
Giftronaut order ID · Recipient email and reward link
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.
Each recipient in a Giftronaut order can receive a different amount.
Attach your own client order reference to orders through idempotencyKey for internal
tracking (e.g., transaction number or campaign name).
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
}
idempotencyKey409 DUPLICATE_IDEMPOTENCY_KEY; no second order is created.productIdsendTimingsendTiming.typeIMMEDIATE | SCHEDULEDsendTiming.scheduledAt2024-03-01T09:00:00ZsendTiming.timezoneAmerica/New_YorkemailSettingemailSetting.senderNameemailSetting.subjectemailSetting.messageemailSetting.templateIdrecipientsrecipients[].emailrecipients[].amountrecipients[].firstNamerecipients[].lastNamerecipients[].companyrecipients[].departmentrefundOptionfalse (default, or omit) = no refund, 180-day card expiry. true = unredeemed funds are refunded and the card expires sooner — see refundOptionDays.refundOptionDays30 (50% refund), 60 (40%), 90 (30%). Only valid when refundOption is true. Omit with refundOption: true to default to 30.SCHEDULED, both scheduledAt and timezone are required. For IMMEDIATE, neither may be provided.amount must match a valid price point for the selected product.When refundOption is set to true, the following expiration and refund policies apply based on refundOptionDays (30 / 60 / 90). Omitting refundOptionDays with refundOption: true defaults to 30 days (50% refund).
/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
}
idempotencyKey409 DUPLICATE_IDEMPOTENCY_KEY; no second order is created.productIdsendTimingsendTiming.typeIMMEDIATE | SCHEDULEDsendTiming.scheduledAtsendTiming.timezoneemailSettingemailSetting.senderNameemailSetting.subjectemailSetting.messageemailSetting.templateIdrecipientsrecipients[].emailrecipients[].amountrecipients[].firstNamerecipients[].lastNamerecipients[].companyrecipients[].departmentrefundOptionfalse (default, or omit) = no refund, 180-day card expiry. true = unredeemed funds are refunded and the card expires sooner — see refundOptionDays.refundOptionDays30 (50% refund), 60 (40%), 90 (30%). Only valid when refundOption is true. Omit with refundOption: true to default to 30.amount.When refundOption is set to true, the following expiration and refund policies apply based on refundOptionDays (30 / 60 / 90). Omitting refundOptionDays with refundOption: true defaults to 30 days (50% refund).
/api/v1/orders/reward-links
A Giftronaut reward link order generates up to 500 unique gift card links in a single request. 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.
The API returns a unique reward link for each gift card. Your system delivers the reward link however you want: Slack, QR codes, SMS, in-app UI, CRM campaigns, or lead capture forms. Reward links should be treated as secrets.
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 with refundOptionDays: 30 = 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, or omit) = no refund, 180-day card expiry. true = unredeemed funds are refunded and the card expires sooner — see refundOptionDays.refundOptionDays30 (50% refund), 60 (40%), 90 (30%). Only valid when refundOption is true. Omit with refundOption: true to default to 30.
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".When refundOption is set to true, the following expiration and refund policies apply based on refundOptionDays (30 / 60 / 90). Omitting refundOptionDays with refundOption: true defaults to 30 days (50% refund).
/api/v1/orders/{orderId}/cancel
Giftronaut cancels only scheduled orders, and only at least 10 minutes before the send time. Immediate orders and reward link orders cannot be canceled. Once a Giftronaut order is sent, it cannot be canceled, returned, or exchanged.
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 = non-refundable; 1 = refundable.refundOptionDays30 / 60 / 90). null when non-refundable, or when a refundable order has no explicit window (refundOption: 1 with no days is treated as 30 days).refundOption typesrefundOption as an integer (0/1)
for backward compatibility with existing integrations. The list and detail endpoints
(GET /api/v1/orders,
GET /api/v1/orders/{orderId}) report it as a
boolean. Both describe the same underlying policy.
/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. 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.
Increased daily and monthly order limits can be requested through the API and are typically approved within 1–2 business days.
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.