Sign in
API Reference

Orders

Place gift card orders, retrieve order history, cancel scheduled orders, and resend to recipients.

GET /api/v1/orders

List orders

Returns a paginated list of orders for your organization. Supports filtering by order type, status, card type, and date range.

Required scope

orders.read

Query parameters

Parameter
Type
Required
Description
page
integer
No
Page number, default 1
pageSize
integer
No
Results per page, default 20, max 100
orderType
string
No
ONE_TIME | SMART | LINK | CAMPAIGN | REWARD
cardType
string
No
BRANDED_CARD | CHOICE_CARD
status
string
No
PENDING | IN_PROGRESS | COMPLETE | CANCELED
startDate
string
No
ISO-8601 date, e.g. 2024-01-01
endDate
string
No
ISO-8601 date, e.g. 2024-12-31
searchKeyword
string
No
Search by order number or sender name
clientOrderId
string
No
Look up by your own client order reference
Reward link orders in this list
Orders created via POST /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.
GET /api/v1/orders/{orderId}

Get order

Retrieves the full details of a single order by its ID.

Required scope

orders.read

Path parameters

orderId
string
Yes
The order ID

Response fields — recipients

Each entry in recipients represents a single gift card issuance. Most fields are self-describing; two are order-type dependent:

Field
Type
When present
Description
recipients[].email
string
All order types except LINK
Recipient email address. Reward link orders (orderType: "LINK") have no recipient email — the link itself is the access credential, so this field is null.
recipients[].rewardLink
string
Only when status: "COMPLETE"
Redemption URL that the recipient uses to claim their gift card. Populated only after the order has fully completed delivery — 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.
POST /api/v1/orders/branded-cards

Create branded card order

Places a branded gift card order. Each recipient can receive a different amount in the product's local currency. Supports immediate and scheduled delivery.

Required scope

orders.write

Request body

JSON
{
  "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
}

Request body fields

Field
Type
Required
Description
idempotencyKey
string
Yes
Client-generated unique key (max 64 chars). Duplicate requests with the same key return the original order.
productId
string
Yes
Branded card product ID from the catalog API
sendTiming
object
Yes
Controls when the gift cards are delivered to recipients
sendTiming.type
string
Yes
IMMEDIATE | SCHEDULED
sendTiming.scheduledAt
string
SCHEDULED only
ISO-8601 datetime, e.g. 2024-03-01T09:00:00Z
sendTiming.timezone
string
SCHEDULED only
IANA timezone, e.g. America/New_York
emailSetting
object
Yes
Customizes the gift email sent to recipients.
emailSetting.senderName
string
Yes
Display name shown in the email From header
emailSetting.subject
string
Yes
Email subject line
emailSetting.message
string
No
Personal message included in the gift email
emailSetting.templateId
string
No
Email template ID. Falls back to the organization's default template.
recipients
array
Yes
One or more recipient objects (see below)
recipients[].email
string
Yes
Recipient email address
recipients[].amount
number
Yes
Per-recipient card value in the product's local currency (e.g. JPY for Japanese cards). Whole number only (no decimal places).
recipients[].firstName
string
No
Recipient first name
recipients[].lastName
string
No
Recipient last name
recipients[].company
string
No
Recipient company
recipients[].department
string
No
Recipient department
refundOption
boolean
No
false (default) = 180-day expiry; true = 30-day expiry

Business rules

  • For SCHEDULED, both scheduledAt and timezone are required. For IMMEDIATE, neither may be provided.
  • Account balance must cover the sum of all recipient amounts converted to USD.
  • Each recipient's amount must match a valid price point for the selected product.

Refund Option

If the refundOption value is set to true, the following expiration and refund policies apply.

Giftronaut Refund Option — 30 Day Expiration
Enhance your campaign ROI by setting the expiration period to 30 days and receiving 50% of unredeemed funds upon expiration. Ideal for consumer promotions and campaigns.
How It Works
Giftronaut returns 50% of unredeemed funds to your account upon expiration.
Example: If a $100 gift card expires unredeemed, $50 will be credited back to your account.
POST /api/v1/orders/choice-cards

Create choice card order

Places a choice card order where each recipient selects their own gift from a curated collection. Each recipient can receive a different balance amount.

Required scope

orders.write

Request body

JSON
{
  "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
}

Request body fields

Field
Type
Required
Description
idempotencyKey
string
Yes
Client-generated unique key (max 64 chars). Duplicate requests with the same key return the original order.
productId
string
Yes
Choice card design ID from the catalog API
sendTiming
object
Yes
Controls when the gift cards are delivered to recipients
sendTiming.type
string
Yes
IMMEDIATE | SCHEDULED
sendTiming.scheduledAt
string
SCHEDULED only
ISO-8601 datetime
sendTiming.timezone
string
SCHEDULED only
IANA timezone
emailSetting
object
Yes
Customizes the gift email sent to recipients.
emailSetting.senderName
string
Yes
Display name shown in the email From header
emailSetting.subject
string
Yes
Email subject line
emailSetting.message
string
No
Personal message included in the gift email
emailSetting.templateId
string
No
Email template ID. Falls back to the organization's default template.
recipients
array
Yes
One or more recipient objects; each specifies their own balance amount
recipients[].email
string
Yes
Recipient email address
recipients[].amount
number
Yes
Balance loaded onto this recipient's choice card (must be positive)
recipients[].firstName
string
No
Recipient first name
recipients[].lastName
string
No
Recipient last name
recipients[].company
string
No
Recipient company
recipients[].department
string
No
Recipient department
refundOption
boolean
No
false (default) = 180-day expiry; true = 30-day expiry

Business rules

  • Every recipient must include a positive amount.
  • Account balance must cover the sum of all recipient amounts.
  • Each recipient's amount must fall within the range configured for your organization (see catalog choice cards).

Refund Option

If the refundOption value is set to true, the following expiration and refund policies apply.

Giftronaut Refund Option — 30 Day Expiration
Enhance your campaign ROI by setting the expiration period to 30 days and receiving 50% of unredeemed funds upon expiration. Ideal for consumer promotions and campaigns.
How It Works
Giftronaut returns 50% of unredeemed funds to your account upon expiration.
Example: If a $100 gift card expires unredeemed, $50 will be credited back to your account.
DELETE /api/v1/orders/{orderId}/cancel

Cancel order

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.

Required scope

orders.cancel

Error responses

409
ORDER_NOT_CANCELABLE — order is not scheduled, already dispatched, or the 10-minute window has passed.

Response

Field
Type
Description
orderId
string
The canceled order ID.
status
string
Always CANCELED on success.
canceledAt
string
Cancellation timestamp (ISO-8601 UTC).
refundOption
integer
Refund policy of the canceled order: 0 or null = 180-day expiry (non-refundable); 1 = 30-day expiry (refundable).
POST /api/v1/orders/{orderId}/resend

Resend order

Resends gift cards to specific recipients. Optionally update a recipient's email address before resending.

Required scope

orders.write

Request body

Field
Type
Required
Description
recipients
array
required
List of recipients to resend to.
recipients[].email
string
required
Email address of the recipient to resend to.
recipients[].updatedEmail
string
optional
New email address to use instead. If provided, the gift card is sent to this address.
JSON
{
  "recipients": [
    {
      "email": "jane.doe@giftronaut.com",
      "updatedEmail": "newemail@giftronaut.com"
    }
  ]
}

Response

Field
Type
Description
orderId
string
The order ID that was requeued.
requeued
integer
Number of recipients successfully requeued for resend.
resentToEmails
array
The exact email addresses requeued (reflects updatedEmail when provided).
POST /api/v1/orders/test-email

Send test email (preview)

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.

Required scope

orders.write

Request body

Field
Type
Required
Description
email
string
required
Address to send the preview to (typically your own inbox).
productId
string
required
Choice card design ID to preview.
amount
number
required
USD amount displayed in the email.
emailSubject
string
required
Email subject line.
senderName
string
optional
Sender display name shown in the email. If omitted, falls back to the template's sender name (when templateId is given), then your account's default sender name.
emailMessage
string
optional
Email body message. If omitted, falls back to the template's message when templateId is given.
templateId
string
optional
Email template (from GET /api/v1/templates) supplying layout colors/logo plus default sender name and message; directly provided senderName/emailMessage take priority. Defaults to the Giftronaut palette.

Response

Field
Type
Description
sentTo
string
Address the preview was delivered to.
status
string
Always SENT on success.
remainingToday
integer
Remaining test sends for today (daily limit, default 10).
sentAt
string
Send timestamp (ISO-8601 UTC).
POST /api/v1/orders/limit-increase-requests

Request order limit increase

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.

Required scope

orders.write

Request body

Field
Type
Required
Description
currentDailyLimitUsd
number
required
Your current daily limit in USD, as shown to you (confirmation check).
currentMonthlyLimitUsd
number
required
Your current monthly limit in USD, as shown to you (confirmation check).
requestedDailyLimitUsd
number
required
Requested new daily limit in USD. Must be greater than the current daily limit.
requestedMonthlyLimitUsd
number
required
Requested new monthly limit in USD. Must be greater than the current monthly limit.
JSON
{
  "currentDailyLimitUsd": 500,
  "currentMonthlyLimitUsd": 4000,
  "requestedDailyLimitUsd": 1000,
  "requestedMonthlyLimitUsd": 8000
}

Response

Field
Type
Description
status
string
Always PENDING_REVIEW on success.
message
string
Human-readable confirmation message.