RevSendRevSend API

RevSend API

Send physical gifts, handwritten notes and digital gift cards from your own product or workflow. 51 operations, one GraphQL endpoint: https://graph.v2.revsend.com/

Getting started

The RevSend API is a GraphQL API. Send every request as an HTTP POST with a JSON body to one endpoint:

https://graph.v2.revsend.com/

All requests need an API key. Amounts are in cents unless a field says otherwise, and timestamps are ISO 8601 in UTC.

Your first request

curl https://graph.v2.revsend.com/ \
  -H "Authorization: Bearer $REVSEND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"{ me { id name email role } }"}'

A successful response has a data object. Problems come back in an errors array, sometimes with HTTP 400; see Errors.

Authentication

Create keys in the RevSend app under Integrations > API Keys. A key is shown once, starts with rk_, and belongs to the user who created it. Requests made with the key act as that user: they spend that user's budget, show that user as the sender, and can only see what that user can see.

Send the key in the Authorization header:

Authorization: Bearer rk_<publicId>_<secret>

Authorization: ApiKey rk_... also works. Keys can be given an expiry date and can be rotated or revoked in the app at any time.

Tip for platforms: create a dedicated RevSend user for your integration (a regular user, not an org admin) and create the key as that user. That keeps your integration's orders, budget and permissions separate from your team's.

Scopes

Each key has one or more scopes. Operations that need a scope list it in their reference entry.

ScopeAllows
campaigns:readList campaigns.
campaigns:writeCreate and update physical and digital campaigns.
orders:readList and export orders.
orders:writeCreate, bulk create and send physical and digital orders, and write handwritten notes.

Operations without a scope badge accept any valid key and follow the key user's role, so a regular user key cannot run org admin operations.

Common tasks

Use this when you do not have the recipient's address. RevSend returns a link you can put in your own email, LinkedIn message or sequence step. The recipient opens it, picks a gift if you offered more than one, and enters their address.

mutation {
  physicalOrderCreate(input: {
    campaignId: "CAMPAIGN_ID"
    recipient: { name: "Jordan Lee", email: "jordan@example.com", orgName: "Acme" }
    message: "Jordan, a small thank you for your time this week."
    recipientSubmitsAddress: true
    includeClaimUrl: true
    sendEmail: false
  }) {
    id
    claimUrl
    expiresAt
  }
}

Ship to an address you already have

mutation {
  physicalOrderCreate(input: {
    giftIds: [{ id: "GIFT_ID" }]
    recipient: { name: "Jordan Lee", email: "jordan@example.com", orgName: "Acme" }
    mailingAddress: {
      firstName: "Jordan", lastName: "Lee", company: "Acme"
      address1: "123 Main St", city: "Austin", provinceCode: "TX", zip: "78701", countryCode: "US"
    }
    validateAddress: true
    includeHandWritten: true
    physicalNote: "Jordan, congrats on the launch!"
  }) {
    id
    ref
  }
}

Let the recipient choose

Pass several gifts in giftIds (or use a campaign with several giftOptions) and leave sendAll unset. The claim page shows every option and the recipient picks one. Set sendAll: true to ship all of them together in one package instead.

Recommend a gift, then send it

  • Call the recommendation endpoint with what you know about the person.
  • Pick a result and pass its sourceUrl, title, imageUrl, priceCents and storeName to physicalOrderCreateWithImport as purchaseUrl, title, images, priceCents and source.
  • RevSend buys the item, repackages it in your branded box at our warehouse and ships it with your note.

Track an order

Query physicalOrder(id) for fulfillmentEvents, trackingUrl, selectedGifts and cancelledAt, or register a webhook to be told when an order ships or is delivered.

Send under your customer's brand

Create a brand template per brand with orgBrandTemplateCreate and pass its ID as brandTemplateId on each order. The claim page, emails and handwritten note use that template's logo, colors and handwriting style.

Recipient privacy: addresses that recipients enter are used only to ship the gift. They are never returned by the API, shown in the app or included in webhooks.

Meeting-gated gifts: requireBookedMeeting unlocks every meeting-gated gift to a recipient as soon as that person has ever been on a meeting with the sending user, on the user's Outlook or Google calendar. Cancelling the meeting does not lock the gifts again. Meetings where everyone else shares the sender's email domain do not count. When every order is sent from one integration user, connect that user's calendar or leave meeting gating off.

Gift recommendations

Get ranked gift ideas for a person from free text: a LinkedIn summary, a CRM note, recent posts, or a few sentences you write yourself. The recommendation engine reads it, picks themes and searches the catalog.

POST https://graph.v2.revsend.com/api/gift-recommendations
Body fieldTypeNotes
recipientInforequiredstringAnything you know about the person.
countrequiredintegerHow many ideas to return, 1 to 20.
budgetMinnumberLowest price in US dollars. Defaults to 0.
budgetMaxnumberHighest price in US dollars. Defaults to 500.
curl https://graph.v2.revsend.com/api/gift-recommendations \
  -H "Authorization: Bearer $REVSEND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recipientInfo": "VP Sales at Acme. USC alum, posts about golf and cold brew. Just closed a Series B.",
    "count": 3,
    "budgetMax": 120
  }'
{
  "recommendations": [
    {
      "productId": "...",
      "title": "USC Trojans Leather Golf Ball Marker Set",
      "oneLinePitch": "School pride for the course.",
      "priceCents": 4800,
      "currency": "USD",
      "imageUrl": "https://...",
      "sourceUrl": "https://...",
      "storeName": "...",
      "rationale": "Combines two interests from the profile: USC and golf.",
      "variants": []
    }
  ],
  "recipientProfile": {
    "occasionSlug": "congratulations",
    "personaSlugs": ["sales-leader"],
    "interests": ["golf", "coffee", "USC"],
    "tone": "celebratory",
    "relationshipContext": "prospect"
  }
}
StatusMeaning
400The body is missing recipientInfo, count is out of range, or budgetMin is above budgetMax.
401Missing, revoked or expired API key.
404No gifts matched the budget and profile. Widen the budget or add detail.

Webhook events

Register an HTTPS URL with integrationWebhookCreate. RevSend sends a JSON POST for every matching event in your organization. Delivery is best effort: respond with a 2xx quickly and do your processing afterwards, and use physicalOrder or digitalOrder to confirm state if you miss an event.

Include a long random token in your webhook URL (for example https://example.com/hooks/revsend/7f3c...) and reject requests that do not carry it.

ORDER_CREATE

Sent when an order is created.

{
  "order": {
    "id": "clx...",
    "value": 85.5,
    "message": "Jordan, a small thank you for your time this week.",
    "emailSubject": "A gift for you",
    "deliveryMethod": "LINK"
  },
  "recipient": { "name": "Jordan Lee", "email": "jordan@example.com", "orgName": "Acme" },
  "sender": { "id": "...", "email": "...", "name": "...", "teamId": "...", "teamName": "..." }
}

ORDER_STATUS_UPDATE

Sent as a physical order moves along. order.status is one of:

statusWhen
ViewedThe recipient opened the claim link.
Address SubmittedThe recipient entered their address (and chose a gift, if offered a choice).
SHIPPEDThe package is in transit.
DELIVEREDThe carrier reported delivery.
NOT DELIVEREDThe carrier reported a delivery failure.
{
  "order": { "id": "clx...", "status": "DELIVERED", "value": 85.5 },
  "recipient": { "name": "Jordan Lee", "email": "jordan@example.com", "orgName": "Acme" },
  "sender": { "id": "...", "email": "...", "name": "...", "teamId": "...", "teamName": "..." }
}

order.id is the same order ID the API returns, so you can pass it straight to physicalOrder. value is in US dollars. Webhook payloads never include recipient addresses.

Errors

Every error comes back as JSON with an errors array. Each error has a message and an extensions.code. Requests stopped before the operation runs (a missing or invalid API key, a malformed query, or a rate limit) return HTTP 400. Errors raised while the operation runs, such as a missing scope or an invalid argument, return HTTP 200. Check extensions.code rather than the HTTP status.

CodeMeaning
UNAUTHENTICATEDMissing, malformed, revoked or expired API key.
FORBIDDENThe key is valid but is missing a scope, or the key's user is not allowed to do this.
BAD_USER_INPUTAn argument is invalid. The message says which one.
TOO_MANY_REQUESTSRate limit reached. Wait and retry with backoff.
INTERNAL_SERVER_ERRORSomething failed on our side. Safe to retry reads; for writes, check whether the order was created before retrying.
{
  "errors": [
    {
      "message": "Context creation failed: Invalid / Expired Session. Please login again.",
      "extensions": { "code": "UNAUTHENTICATED" }
    }
  ]
}

Rate limits

LimitValue
Requests per API key user240 per 60 seconds
Requests per IP address120 per 60 seconds
Requests per operation per IP address40 per 60 seconds
Query depth16 levels
Aliases per request50

Each alias in a request counts as one more request toward these limits. Bulk endpoints are the better choice for large sends: physicalOrderBulkCreate and digitalOrderBulkCreate queue many orders in one call.

Account

Every API key belongs to one RevSend user. Requests act as that user, spend that user's budget and appear in that user's order history.

meQuery

The user the API key belongs to, including role, teams and current budget (budget.amount).

query me: User

Returns User

query {
  me {
    id
    name
    email
    role
    budget { amount }
  }
}
orgQuery

The organization the API key belongs to, including its brand templates.

query org: Org

Returns Org

Gift catalog

Physical gifts live in your organization's catalog. Use the catalog queries to browse what you can send, or import any product from the web and send it like a catalog gift.

physicalGiftsQuery

Page through the physical gifts available to your organization. Filter by category, occasion, search text, price range (in cents) or specific IDs.

query physicalGifts( skip: Int! take: Int! query: PhysicalGiftQuery ): PhysicalGifts!
ArgumentTypeDescription
skiprequiredInt!
takerequiredInt!
queryPhysicalGiftQuery

Returns PhysicalGifts!

physicalGiftQuery

One physical gift by ID, with its products and variants.

query physicalGift( id: ID! ): PhysicalGift
ArgumentTypeDescription
idrequiredID!

Returns PhysicalGift

categoriesQuery

Gift categories you can use to filter physicalGifts.

query categories: [Category!]!

Returns [Category!]!

occasionsQuery

Occasions you can use to filter physicalGifts.

query occasions: [Occasion!]!

Returns [Occasion!]!

marketplaceWebGiftsQuery

Search buyable products from retail partners by keyword. Results are cached. Pass excludeUrls to get a fresh page that skips gifts you already showed.

query marketplaceWebGifts( query: String! excludeUrls: [String!] ): [MarketplaceWebGift!]!
ArgumentTypeDescription
queryrequiredString!
excludeUrls[String!]

Returns [MarketplaceWebGift!]!

marketplaceWebGiftDetailQuery

Full product details (images, price, variants) for a result from marketplaceWebGifts.

query marketplaceWebGiftDetail( url: String! ): MarketplaceWebGiftDetail
ArgumentTypeDescription
urlrequiredString!

Returns MarketplaceWebGiftDetail

marketplaceWebGiftImportMutation

Add a marketplaceWebGifts result to your catalog so it can be sent. Pass color or size to import a specific option. Returns the new gift ID.

mutation marketplaceWebGiftImport( input: MarketplaceWebGiftImportInput! ): ProductImportResult!
ArgumentTypeDescription
inputrequiredMarketplaceWebGiftImportInput!

Returns ProductImportResult!

productImportMutation

Add any product to your catalog from its product page URL, title, price and images. Returns the new gift ID, which you can pass to physicalOrderCreate.

mutation productImport( input: ProductImportInput! ): ProductImportResult!
ArgumentTypeDescription
inputrequiredProductImportInput!

Returns ProductImportResult!

digitalBrandsQuery

Gift card brands available for digital campaigns and orders.

query digitalBrands( query: DigitalBrandQuery skip: Int take: Int ): [DigitalBrand!]!
ArgumentTypeDescription
queryDigitalBrandQuery
skipInt
takeInt

Returns [DigitalBrand!]!

Gift recommendations

The recommendation engine is a REST endpoint, documented in Gift recommendations. It takes free text about a person and returns ranked gift ideas from the catalog.

Campaigns

A campaign saves gift choices, message templates and settings so orders only need a recipient. Orders can also be sent without a campaign by passing gift IDs directly.

campaignsQueryscope: campaigns:read

Page through physical and digital campaigns together.

query campaigns( skip: Int! take: Int! sort: CampaignSortKey query: CampaignQuery ): Campaigns!
ArgumentTypeDescription
skiprequiredInt!
takerequiredInt!
sortCampaignSortKey
queryCampaignQuery

Returns Campaigns!

physicalCampaignsQuery

Page through physical gift campaigns.

query physicalCampaigns( skip: Int! take: Int! sort: PhysicalCampaignSortKey query: PhysicalCampaignQuery ): PhysicalCampaigns!
ArgumentTypeDescription
skiprequiredInt!
takerequiredInt!
sortPhysicalCampaignSortKey
queryPhysicalCampaignQuery

Returns PhysicalCampaigns!

physicalCampaignQuery

One physical campaign by ID.

query physicalCampaign( id: ID! ): PhysicalCampaign
ArgumentTypeDescription
idrequiredID!

Returns PhysicalCampaign

physicalCampaignCreateMutationscope: campaigns:write

Create a physical campaign. List several gifts in giftOptions to let recipients choose one, or set sendAll on the order to ship them all together.

mutation physicalCampaignCreate( input: PhysicalCampaignInput! ): PhysicalCampaign!
ArgumentTypeDescription
inputrequiredPhysicalCampaignInput!

Returns PhysicalCampaign!

physicalCampaignUpdateMutationscope: campaigns:write

Update a physical campaign. Fields you leave out keep their current values.

mutation physicalCampaignUpdate( id: ID! input: PhysicalCampaignInput! ): PhysicalCampaign!
ArgumentTypeDescription
idrequiredID!
inputrequiredPhysicalCampaignInput!

Returns PhysicalCampaign!

digitalCampaignsQuery

Page through digital gift card campaigns.

query digitalCampaigns( skip: Int! take: Int! sort: DigitalCampaignSortKey query: DigitalCampaignQuery ): DigitalCampaigns!
ArgumentTypeDescription
skiprequiredInt!
takerequiredInt!
sortDigitalCampaignSortKey
queryDigitalCampaignQuery

Returns DigitalCampaigns!

digitalCampaignQuery

One digital campaign by ID.

query digitalCampaign( id: ID! ): DigitalCampaign
ArgumentTypeDescription
idrequiredID!

Returns DigitalCampaign

digitalCampaignCreateMutationscope: campaigns:write

Create a digital gift card campaign with a set of brands and a reward value.

mutation digitalCampaignCreate( input: DigitalCampaignInput! ): DigitalCampaign!
ArgumentTypeDescription
inputrequiredDigitalCampaignInput!

Returns DigitalCampaign!

digitalCampaignUpdateMutationscope: campaigns:write

Update a digital campaign. Fields you leave out keep their current values.

mutation digitalCampaignUpdate( id: ID! input: DigitalCampaignInput! ): DigitalCampaign!
ArgumentTypeDescription
idrequiredID!
inputrequiredDigitalCampaignInput!

Returns DigitalCampaign!

Physical orders

A physical order ships a gift from the RevSend warehouse, in branded packaging with an optional handwritten note. You can send to an address you already have, or get a claim link the recipient uses to choose their gift and enter their own address.

physicalOrderCreateMutationscope: orders:write

Send a physical gift. Pass campaignId to use a campaign's gifts and templates, or giftIds to send specific gifts without one.

Send to a known address: pass mailingAddress (and validateAddress: true to check it first).

Send a claim link: set recipientSubmitsAddress: true and includeClaimUrl: true. The response includes claimUrl, which you can share in your own email or message. Set sendEmail: false if you do not want RevSend to email the recipient.

Let the recipient choose: pass several gifts and leave sendAll off. Set sendAll: true to ship every gift in one package.

Handwritten note: set includeHandWritten: true and pass the note text in physicalNote. Check that the text fits with physicalOrderHandWritingSample.

mutation physicalOrderCreate( input: PhysicalOrderInput! ): PhysicalOrder!
ArgumentTypeDescription
inputrequiredPhysicalOrderInput!

Returns PhysicalOrder!

mutation SendGift($input: PhysicalOrderInput!) {
  physicalOrderCreate(input: $input) {
    id
    ref
    claimUrl
    expiresAt
  }
}

# variables
{
  "input": {
    "giftIds": [{ "id": "GIFT_ID" }, { "id": "GIFT_ID_2" }],
    "recipient": { "name": "Jordan Lee", "email": "jordan@example.com", "orgName": "Acme" },
    "message": "Thanks for the great conversation, Jordan.",
    "includeHandWritten": true,
    "physicalNote": "Jordan, enjoy this one. Talk soon!",
    "recipientSubmitsAddress": true,
    "includeClaimUrl": true,
    "sendEmail": false
  }
}
physicalOrderCreateWithImportMutationscope: orders:write

Import a product from an external source and immediately create a physical order to send it. This combines productImport and physicalOrderCreate into a single call.

Use this when your system already picked a product on the web. RevSend buys it, repackages it at the warehouse and ships it with your branding.

mutation physicalOrderCreateWithImport( input: PhysicalOrderWithImportInput! ): PhysicalOrder!
ArgumentTypeDescription
inputrequiredPhysicalOrderWithImportInput!

Returns PhysicalOrder!

productImportAndSendMutation

Alias for physicalOrderCreateWithImport. Import a product and send it in one call.

mutation productImportAndSend( input: PhysicalOrderWithImportInput! ): PhysicalOrder!
ArgumentTypeDescription
inputrequiredPhysicalOrderWithImportInput!

Returns PhysicalOrder!

physicalHandwrittenNoteCreateMutationscope: orders:write

Create and send a handwritten note order. Looks up the Branded Handwritten Note gift automatically.

mutation physicalHandwrittenNoteCreate( input: PhysicalHandwrittenNoteInput! ): PhysicalOrder!
ArgumentTypeDescription
inputrequiredPhysicalHandwrittenNoteInput!

Returns PhysicalOrder!

physicalOrderHandWritingSampleMutation

Preview how note text will be laid out by the handwriting machine. Use it to check that a note fits before you create the order.

mutation physicalOrderHandWritingSample( text: String! ): HandWritingSampleOutput
ArgumentTypeDescription
textrequiredString!

Returns HandWritingSampleOutput

physicalOrderUpdateMutationscope: orders:write

Change the message, handwritten note or recipient on an order you created or manage. The message cannot change once the order has shipped.

mutation physicalOrderUpdate( input: PhysicalOrderInput! id: ID! ): PhysicalOrder!
ArgumentTypeDescription
inputrequiredPhysicalOrderInput!
idrequiredID!

Returns PhysicalOrder!

physicalOrderCancelMutationscope: orders:write

Cancel a physical order you created and refund its cost to the budget it was paid from. Orders that already shipped cannot be cancelled.

mutation physicalOrderCancel( id: ID! ): PhysicalOrder!
ArgumentTypeDescription
idrequiredID!

Returns PhysicalOrder!

physicalOrdersQuery

Page through physical orders. A user key sees its own orders; an org admin or team admin key sees the orders it manages. Filter by date range, team or delivery status.

query physicalOrders( skip: Int! take: Int! sort: PhysicalOrderSortKey query: PhysicalOrderQuery ): PhysicalOrders!
ArgumentTypeDescription
skiprequiredInt!
takerequiredInt!
sortPhysicalOrderSortKey
queryPhysicalOrderQuery

Returns PhysicalOrders!

physicalOrderQuery

One physical order by ID, with its status, claim link, selected gifts and shipping events.

query physicalOrder( id: ID! ): PhysicalOrder
ArgumentTypeDescription
idrequiredID!

Returns PhysicalOrder

Bulk physical orders

Send the same gift to many known addresses in one request. Bulk orders run in the background; poll the batch for progress.

physicalOrderBulkCreateMutationscope: orders:write

Queue a batch of physical orders, either from orders rows or from a CSV uploaded with bulkOrderSourceUploadUrl.

mutation physicalOrderBulkCreate( input: PhysicalOrderBulkCreateInput! ): PhysicalOrderBatch!
ArgumentTypeDescription
inputrequiredPhysicalOrderBulkCreateInput!

Returns PhysicalOrderBatch!

bulkOrderSourceUploadUrlMutation

Get a short-lived upload URL for a recipient CSV. PUT the file to url, then pass key as sourceS3Key to physicalOrderBulkCreate.

mutation bulkOrderSourceUploadUrl: AssetUploadUrl!

Returns AssetUploadUrl!

validatePhysicalOrderCsvQuery

Check a recipient CSV before you upload it. Returns row-level errors.

query validatePhysicalOrderCsv( csvContent: String! ): CSVValidationResult!
ArgumentTypeDescription
csvContentrequiredString!

Returns CSVValidationResult!

physicalOrderBulkStatusQuery

Progress of a batch you created: accepted, placed, failed and delivered counts.

query physicalOrderBulkStatus( id: ID! ): PhysicalOrderBatch!
ArgumentTypeDescription
idrequiredID!

Returns PhysicalOrderBatch!

Digital orders

Digital orders send gift cards by email or by a link you share yourself. Digital rewards can be redeemed in 200+ countries.

digitalOrderCreateMutationscope: orders:write

Send one digital gift card. Use deliveryMethod: LINK with includeClaimUrl: true to share the link yourself.

mutation digitalOrderCreate( input: DigitalOrderInput! ): DigitalOrder!
ArgumentTypeDescription
inputrequiredDigitalOrderInput!

Returns DigitalOrder!

digitalOrderBulkCreateMutationscope: orders:write

Send a digital campaign to a list of recipients in one request.

mutation digitalOrderBulkCreate( input: DigitalOrderBulkInput! ): DigitalOrderBatch!
ArgumentTypeDescription
inputrequiredDigitalOrderBulkInput!

Returns DigitalOrderBatch!

digitalOrderCancelMutation

Cancel an unredeemed digital order and refund it to the budget it was paid from.

mutation digitalOrderCancel( id: ID! ): DigitalOrder!
ArgumentTypeDescription
idrequiredID!

Returns DigitalOrder!

digitalOrdersQuery

Page through digital orders. A user key sees its own orders; an admin key sees the orders it manages.

query digitalOrders( skip: Int! take: Int! sort: DigitalOrderSortKey query: DigitalOrderQuery ): DigitalOrders!
ArgumentTypeDescription
skiprequiredInt!
takerequiredInt!
sortDigitalOrderSortKey
queryDigitalOrderQuery

Returns DigitalOrders!

digitalOrderQuery

One digital order by its ref.

query digitalOrder( orderRef: ID! ): DigitalOrder
ArgumentTypeDescription
orderRefrequiredID!

Returns DigitalOrder

digitalOrderBatchesQuery

Page through bulk digital sends.

query digitalOrderBatches( skip: Int! take: Int! sort: DigitalOrderBatchSortKey query: DigitalOrderBatchQuery ): DigitalOrderBatches!
ArgumentTypeDescription
skiprequiredInt!
takerequiredInt!
sortDigitalOrderBatchSortKey
queryDigitalOrderBatchQuery

Returns DigitalOrderBatches!

digitalOrderBatchQuery

One bulk digital send by its ref.

query digitalOrderBatch( orderBatchRef: ID! ): DigitalOrderBatch
ArgumentTypeDescription
orderBatchRefrequiredID!

Returns DigitalOrderBatch

Order history

Physical and digital orders in one list, for reporting.

ordersQueryscope: orders:read

Page through physical and digital orders together, newest first. Filter by date range, type, team or search text.

query orders( skip: Int! take: Int! sort: OrderSortKey myOrders: Boolean getAll: Boolean query: OrderQuery ): Orders!
ArgumentTypeDescription
skiprequiredInt!
takerequiredInt!
sortOrderSortKey
myOrdersBoolean
getAllBoolean
queryOrderQuery

Returns Orders!

ordersCsvCreateMutationscope: orders:read

Export order history as CSV. Returns the CSV text.

mutation ordersCsvCreate( query: OrderQuery myOrders: Boolean sort: OrderSortKey ): String!
ArgumentTypeDescription
queryOrderQuery
myOrdersBoolean
sortOrderSortKey

Returns String!

Branding

Brand templates control the logo, colors and handwriting style on claim pages, emails and notes. Create one per brand you send for and pass its ID as brandTemplateId on orders and campaigns. Creating and editing templates needs an org admin or team admin key.

orgBrandTemplatesQuery

Brand templates in your organization.

query orgBrandTemplates: [OrgBrandTemplate!]!

Returns [OrgBrandTemplate!]!

orgBrandTemplateCreateMutation

Create a brand template. Upload the logo first with assetUploadUrlCreate and pass the resulting URL as logoUrl.

mutation orgBrandTemplateCreate( input: OrgBrandTemplateInput! ): OrgBrandTemplate!
ArgumentTypeDescription
inputrequiredOrgBrandTemplateInput!

Returns OrgBrandTemplate!

orgBrandTemplateUpdateMutation

Update a brand template.

mutation orgBrandTemplateUpdate( id: ID! input: OrgBrandTemplateInput! ): OrgBrandTemplate!
ArgumentTypeDescription
idrequiredID!
inputrequiredOrgBrandTemplateInput!

Returns OrgBrandTemplate!

orgBrandTemplateDeleteMutation

Delete a brand template.

mutation orgBrandTemplateDelete( id: ID! ): Boolean!
ArgumentTypeDescription
idrequiredID!

Returns Boolean!

orgSetDefaultBrandTemplateMutation

Make a template the default for orders that do not pass brandTemplateId.

mutation orgSetDefaultBrandTemplate( id: ID! ): Org!
ArgumentTypeDescription
idrequiredID!

Returns Org!

assetUploadUrlCreateMutation

Get a short-lived upload URL for an image such as a logo. PUT the file to url with the same contentType.

mutation assetUploadUrlCreate( input: AssetUploadUrlInput! ): AssetUploadUrl
ArgumentTypeDescription
inputrequiredAssetUploadUrlInput!

Returns AssetUploadUrl

Webhooks

Register a URL to receive order events. See Webhook events for payloads.

integrationWebhookCreateMutation

Register an HTTPS URL for ORDER_CREATE or ORDER_STATUS_UPDATE events for your whole organization.

mutation integrationWebhookCreate( input: WebhookCreateInput! ): WebhookCreateResponse!
ArgumentTypeDescription
inputrequiredWebhookCreateInput!

Returns WebhookCreateResponse!

integrationWebhookDeleteMutation

Remove a webhook by the ID returned from integrationWebhookCreate.

mutation integrationWebhookDelete( input: WebhookDeleteInput! ): String!
ArgumentTypeDescription
inputrequiredWebhookDeleteInput!

Returns String!

integrationWebhookSampleQuery

A sample event payload, useful for building and testing your handler.

query integrationWebhookSample: WebhookSampleResponse

Returns WebhookSampleResponse

Types

Objects, inputs and enums used by the operations above. Fields used only inside RevSend are left out.

AssetUploadUrlobject
FieldTypeDescription
urlString!
keyString!
AssetUploadUrlInputinput
FieldTypeDescription
contentTyperequiredString!
Budgetobject
FieldTypeDescription
idID!
amountFloat!
isPaymentFallbackEnabledBoolean!
refillAmountInt!
isRolloverBoolean!
alertEnabledBoolean!
alertThresholdAmountInt
alertRecipientEmailString
alertLastSentAtDateTime
alertActiveBoolean!
Campaignobject
FieldTypeDescription
idID!
refString!
createdAtDateTime!
typeCampaignType!
nameString
brands[DigitalBrand]
gifts[PhysicalGift]
CampaignQueryinput
FieldTypeDescription
createdAtMinDateTime
createdAtMaxDateTime
isArchivedBoolean
teamIdString
typeCampaignType
textString
isRevSendCuratedBoolean
Campaignsobject
FieldTypeDescription
totalCountInt!
nodes[Campaign!]!
CampaignSortKeyenum
ValueDescription
CREATED_AT_ASC
CREATED_AT_DESC
CampaignTypeenum
ValueDescription
DIGITAL
PHYSICAL
Categoryobject
FieldTypeDescription
idID!
nameString!
iconString!
CSVValidationErrorobject

A validation error found in the CSV

FieldTypeDescription
rowNumberInt!

The row number where the error was found (1-indexed, including header)

fieldString!

The field/column where the error was found

messageString!

Description of the error

valueString

The actual value that caused the error (if applicable)

CSVValidationResultobject

Result of CSV validation for physical orders

FieldTypeDescription
isValidBoolean!

Whether the entire CSV is valid (no errors)

totalRowsInt!

Total number of rows in the CSV (excluding header)

validRowsInt!

Number of rows with valid data and addresses

errors[CSVValidationError!]!

List of validation errors found in the CSV

summaryCSVValidationSummary!

Summary of validation results

CSVValidationSummaryobject

Summary of CSV validation results

FieldTypeDescription
missingFieldsInt!

Number of rows with missing required fields

invalidAddressesInt!

Number of rows with invalid addresses

validAddressesInt!

Number of rows with valid addresses

Currencyenum
ValueDescription
USD
CAD
DateTimescalar
DigitalBrandobject

Digital reward brand

FieldTypeDescription
idID!
nameString!
iconUrlString
faceplateUrlString

For displaying the card image

legalTermsString
descriptionString
availableCountriesString
supportedCharitiesString
redemptionDisclaimerString
redemptionMethods[String!]
denominations[Int!]

The possible values, in cents, that the card can be redeemed for. A null value means the possible redemption values are defined by the increment.

incrementInt

The valid redemption increment, in cents. A null value means the possible redemption values are defined by the denominations.

maxValueInt!

Max redemption value of the card, in cents

minValueInt!

Min redemption value of the card, in cents

currencyCurrency!

Denominated currency for this brand

isFavoriteBoolean

Is this brand a favorite of the user

isNonRedeemableBoolean

When true, claiming this brand marks the gift redeemed without issuing a gift card

DigitalBrandQueryinput
FieldTypeDescription
searchString
categoryID
occasionID
internationalBoolean
minPriceInt

Minimum card value in dollars

maxPriceInt

Maximum card value in dollars

DigitalCampaignobject
FieldTypeDescription
idID!
createdAtDateTime!
refString!
nameString!
rewardValueInt!
brands[ID!]!
brandDetails[DigitalBrand]
messageTemplateString
headlineTemplateString
allowCharityBoolean!
brandsSummaryString
isArchivedBoolean!
requireEmailBoolean
currencyCurrency
teamTeam
privateBoolean!
requireBookedMeetingBoolean!
autoExpirationDaysInt
brandTemplateIdID
DigitalCampaignInputinput
FieldTypeDescription
nameString
messageTemplateString
headlineTemplateString
brands[ID!]
rewardValueInt
currencyCurrency
allowCharityBoolean
isArchivedBoolean
teamString
privateBoolean
requireBookedMeetingBoolean
autoExpirationDaysInt
brandTemplateIdID
DigitalCampaignQueryinput
FieldTypeDescription
creatorEmailString
createdAtMinDateTime
createdAtMaxDateTime
rewardValueMinInt
rewardValueMaxInt
isArchivedBoolean
currencyCurrency
DigitalCampaignsobject
FieldTypeDescription
totalCountInt!
nodes[DigitalCampaign!]!
DigitalCampaignSortKeyenum
ValueDescription
CREATED_AT_ASC
CREATED_AT_DESC
DigitalOrderobject
FieldTypeDescription
idID!
refString!
createdAtDateTime!
rewardValueInt!
statusDigitalOrderStatus!
rewardLinkString!
claimUrlString

Recipient claim URL. Populated on create when includeClaimUrl is true and deliveryMethod is LINK.

recipientRecipient!
creatorUser!
campaignDigitalCampaign
descriptionString
deliveryMethodDigitalOrderDeliveryMethod!
events[DigitalOrderEvent!]!
cancelledAtDateTime
expiresAtDateTime
teamIdString
hideExpirationWarningBoolean
requireBookedMeetingBoolean
notificationEmailsString

Comma-separated extra emails notified on order status events, in addition to the creator.

DigitalOrderBatchobject
FieldTypeDescription
idID!
refString!
creatorUser!
createdAtDateTime!
totalOrdersInt!
totalDeliveredInt!
totalPaidInt!
digitalOrdersDigitalOrders!
DigitalOrderBatchesobject
FieldTypeDescription
totalCountInt!
nodes[DigitalOrderBatch!]!
DigitalOrderBatchQueryinput
FieldTypeDescription
createdAtMinDateTime
createdAtMaxDateTime
teamIdString
DigitalOrderBatchSortKeyenum
ValueDescription
CREATED_AT_ASC
CREATED_AT_DESC
DigitalOrderBulkInputinput
FieldTypeDescription
recipientsrequired[RecipientInput!]!
campaignIdrequiredID!
messageTemplaterequiredString!
headlineTemplateString
deliveryMethodDigitalOrderDeliveryMethod
requireBookedMeetingBoolean

When true, the recipient can claim only after a meeting with the sender was ever scheduled. Cancelling the meeting does not lock the gift again. Defaults to the campaign setting when omitted.

notificationEmailsString

Comma-separated extra emails to notify on order status events for every order in the batch. The order creator is always notified; these addresses are added in addition.

DigitalOrderDeliveryMethodenum
ValueDescription
LINK
EMAIL
DigitalOrderEventobject
FieldTypeDescription
idID!
createdAtDateTime!
codeDigitalOrderEventCode!
DigitalOrderEventCodeenum
ValueDescription
CREATED
DELIVERED
VIEWED
PAYMENT_SUCCEEDED
REWARD_EMAIL_FAILED
REWARD_EMAIL_SUCCEEDED
EMAIL_OPENED
REDEEMED
DigitalOrderInputinput
FieldTypeDescription
recipientrequiredRecipientInput!
campaignIdID
brandIdID
brandTemplateIdID
currencyIdID
rewardValueInt
messageTemplateString
headlineTemplateString
deliveryMethodrequiredDigitalOrderDeliveryMethod!
includeClaimUrlBoolean

When true, include the recipient claim URL on the returned order.

requireBookedMeetingBoolean

When true, the recipient can claim only after a meeting with the sender was ever scheduled. Cancelling the meeting does not lock the gift again. Defaults to the campaign setting when omitted.

notificationEmailsString

Comma-separated extra emails to notify on order status events (viewed, redeemed, etc.). The order creator is always notified; these addresses are added in addition.

DigitalOrderQueryinput
FieldTypeDescription
createdAtMinDateTime
createdAtMaxDateTime
teamIdString
DigitalOrdersobject
FieldTypeDescription
totalCountInt!
nodes[DigitalOrder!]!
DigitalOrderSortKeyenum
ValueDescription
CREATED_AT_ASC
CREATED_AT_DESC
DigitalOrderStatusenum
ValueDescription
PAYMENT_PENDING
PAYMENT_SUCCEEDED
REVOKED
FulfillmentEventobject

A shipping status update at a point in time.

FieldTypeDescription
happenedAtDateTime!

The time at which this fulfillment event happened.

idID!

A globally-unique identifier.

messageString

A message associated with this fulfillment event.

statusFulfillmentEventStatus!

The status of this fulfillment event.

FulfillmentEventStatusenum

Shipping status reported by the carrier.

ValueDescription
LABEL_PURCHASED

A shipping label has been purchased.

LABEL_PRINTED

A purchased shipping label has been printed.

READY_FOR_PICKUP

The fulfillment is ready to be picked up.

CONFIRMED

The fulfillment is confirmed. This is the default value when no other information is available.

IN_TRANSIT

The fulfillment is in transit.

OUT_FOR_DELIVERY

The fulfillment is out for delivery.

ATTEMPTED_DELIVERY

A delivery was attempted.

DELIVERED

The fulfillment was successfully delivered.

FAILURE

The fulfillment request failed.

DELAYED

The fulfillment was delayed.

GiftQuantitiesinput
FieldTypeDescription
idrequiredID!
quantityInt
variantIdID
GiftQuantityInputinput

Input for specifying gift quantities

FieldTypeDescription
giftIdrequiredID!

Gift ID

quantityInt

Quantity of this gift

variantIdID

Product variant ID (optional)

HandwritingFontStyleenum
ValueDescription
CLEAN
MESSY
HandWritingSampleOutputobject
FieldTypeDescription
outputTextString!
Imageobject

Represents an image resource.

FieldTypeDescription
altTextString

A word or phrase to share the nature or contents of an image.

heightInt

Original height of the image in pixels, when known.

idID

A unique identifier for the image.

urlString!

The location of the image as a URL.

If no transform options are specified, then the original image will be preserved including any pre-applied transforms.

All transformation options are considered "best-effort". Any transformation that the original image type doesn't support will be ignored.

If you need multiple variations of the same image, then you can use GraphQL aliases.

widthInt

Original width of the image in pixels, when known.

IntegrationPartnersenum
ValueDescription
MAKE
ZAPIER
VIA_SOCKET
InvoiceItemobject
FieldTypeDescription
idID!
createdAtDateTime!
amountInt!
descriptionString
JSONscalar
MailingAddressInputinput

A mailing address. countryCode is ISO 3166-1 alpha-2 and provinceCode is the state or province code.

FieldTypeDescription
address1String

The first line of the address. Typically the street address or PO Box number.

address2String

The second line of the address. Typically the number of the apartment, suite, or unit.

cityString

The name of the city, district, village, or town.

companyString

The name of the customer's company or organization.

countryCodeString

The two-letter code for the country of the address.

firstNameString

The first name of the customer.

lastNameString

The last name of the customer.

phoneString

A unique phone number for the customer.

Formatted using E.164 standard. For example, _+16135551111_.

provinceCodeString

The code for the region of the address, such as the province, state, or district. For example QC for Quebec, Canada.

zipString

The zip or postal code of the address.

MarketplaceWebGiftobject
FieldTypeDescription
idID!
titleString!
urlString!
sourceString!
imageUrlString
priceFloat
snippetString
MarketplaceWebGiftDetailobject
FieldTypeDescription
urlString!
titleString!
descriptionString
priceFloat
sourceString!
images[String!]!
variants[MarketplaceWebGiftVariant!]!
MarketplaceWebGiftImportInputinput
FieldTypeDescription
urlrequiredString!

Product URL from a marketplaceWebGifts result.

titleString
sourceString
imageUrlString
priceFloat
queryString

The search text that found this product. Helps pick the right option when a color or size was requested.

colorString

Color option to import, when the product has several.

sizeString

Size option to import, when the product has several.

MarketplaceWebGiftVariantobject
FieldTypeDescription
titleString!
priceFloat
imageUrlString
colorString
sizeString
MeetingClaimGateobject
FieldTypeDescription
requireBookedMeetingBoolean!
isSatisfiedBoolean!
hasAssociatedMeetingBoolean!
meetingEndsAtDateTime
creatorBookingLinkString
creatorNameString
NotePaperSizeenum

Sheet a handwritten note is plotted on. CARD_5X7 is the current 5x7 card.

ValueDescription
CARD_5X7
A6
A5
A4
A3
B5
B4
US_LETTER
ENVELOPE_10
NotificationSettingsobject
FieldTypeDescription
emailAddressSubmittedEnabledBoolean!
emailShippedEnabledBoolean!
emailDeliveredEnabledBoolean!
emailViewedEnabledBoolean!
emailRedeemedEnabledBoolean!
slackAddressSubmittedEnabledBoolean!
slackShippedEnabledBoolean!
slackDeliveredEnabledBoolean!
slackViewedEnabledBoolean!
slackRedeemedEnabledBoolean!
Occasionobject
FieldTypeDescription
idID!
nameString!
iconString!
Orderobject
FieldTypeDescription
idID!
refString!
createdAtDateTime!
creatorNameString
creatorOrgString
recipientNameString
recipientOrgString
recipientSubmitsAddressBoolean
addressConfirmedDateDateTime
events[DigitalOrderEvent!]
fulfillmentEvents[FulfillmentEvent!]
typeOrderType!
totalCostInt!
descriptionString
cancelledAtDateTime
recipientLinkViewedAtDateTime
OrderQueryinput
FieldTypeDescription
createdAtMinDateTime
createdAtMaxDateTime
typeOrderType
teamIdString
searchString
creatorIdID
orgIdID
Ordersobject
FieldTypeDescription
totalCountInt!
nodes[Order!]!
OrderSampleOrderobject
FieldTypeDescription
idString!
valueInt!
messageString!
emailSubjectString!
deliveryMethodString!
statusString!
OrderSampleRecipientobject
FieldTypeDescription
nameString!
emailString
orgNameString!
OrderSampleSenderobject
FieldTypeDescription
idString!
emailString!
nameString!
teamIdString!
teamNameString!
OrderSortKeyenum
ValueDescription
CREATED_AT_ASC
CREATED_AT_DESC
OrderTypeenum
ValueDescription
DIGITAL
PHYSICAL
Orgobject
FieldTypeDescription
idID!
nameString!
formattedNameString!
logoUrlString
logoBackgroundColorString
logoPrimaryColorString
defaultBrandTemplateIdID
defaultBrandTemplateOrgBrandTemplate
brandTemplates[OrgBrandTemplate!]!
isInternationalBoolean
budgetAlertDefaultThresholdInt!
OrgBrandingobject
FieldTypeDescription
logoUrlString
logoBackgroundColorString
logoPrimaryColorString
OrgBrandTemplateobject
FieldTypeDescription
idID!
nameString!
logoUrlString
logoBackgroundColorString
logoPrimaryColorString
handwritingFontStyleHandwritingFontStyle!
isDefaultBoolean!
OrgBrandTemplateInputinput
FieldTypeDescription
namerequiredString!
logoUrlString
logoBackgroundColorString
logoPrimaryColorString
handwritingFontStyleHandwritingFontStyle
PhysicalCampaignobject
FieldTypeDescription
idID!
refString!
createdAtDateTime!
nameString!
gifts[PhysicalGift!]!
variants[ID!]
messageTemplateString
physicalNoteTemplateString
notePaperSizeNotePaperSize

Sheet notes from this campaign are plotted on. Orders that omit a size copy this. Defaults to the 5x7 card. The line limit follows this size.

teamTeam
privateBoolean!
requireBookedMeetingBoolean!
autoExpirationDaysInt
brandTemplateIdID
PhysicalCampaignInputinput
FieldTypeDescription
nameString
messageTemplateString
physicalNoteTemplateString
notePaperSizeNotePaperSize

Sheet notes from this campaign are plotted on. Orders that omit a size copy this. Defaults to the 5x7 card. The line limit follows this size.

giftOptions[GiftQuantities!]
replaceGiftsBoolean
isArchivedBoolean
isOneOffBoolean
privateBoolean
requireBookedMeetingBoolean
autoExpirationDaysInt
teamString
brandTemplateIdID
PhysicalCampaignQueryinput
FieldTypeDescription
createdAtMinDateTime
createdAtMaxDateTime
isArchivedBoolean
PhysicalCampaignsobject
FieldTypeDescription
totalCountInt!
nodes[PhysicalCampaign!]!
PhysicalCampaignSortKeyenum
ValueDescription
CREATED_AT_ASC
CREATED_AT_DESC
PhysicalGiftobject
FieldTypeDescription
idID!
titleString!
messageMaxLengthInt
messageMaxLinesInt
descriptionHtmlString
featuredImageSrcString
products[Product!]!
productVariants[ProductVariant!]!
isDisabledBoolean
categories[String!]!
occasions[String!]!
isAddOnBoolean
requiresPhoneBoolean
isFavoriteBoolean
selectedVariantProductVariant
optionIdID
PhysicalGiftQueryinput
FieldTypeDescription
categoryString
occasionString
searchString
addOnsBoolean
ids[String!]
minPriceInt

Minimum gift price in dollars, including shipping

maxPriceInt

Maximum gift price in dollars, including shipping

PhysicalGiftsobject
FieldTypeDescription
totalCountInt
nodes[PhysicalGift!]!
PhysicalHandwrittenNoteInputinput

Input for creating a handwritten note-only order.

FieldTypeDescription
recipientrequiredRecipientInput!

The recipient information for this order.

physicalNoterequiredString!

The message that will be physically printed on the handwritten note.

notePaperSizeNotePaperSize

Sheet the handwritten note is plotted on. Omit to use the 5x7 card. The line limit follows this size.

messageString

Optional email message sent to the recipient.

mailingAddressrequiredMailingAddressInput!

The mailing address for the recipient.

sendEmailBoolean

Whether to send the reward link immediately through email or if the user will share the link themselves.

headlineTemplateString

Subject line if sending email.

validateAddressBoolean

Check the mailing address before the order is placed and reject it if it cannot be delivered.

brandTemplateIdID
notificationEmailsString

Comma-separated extra emails to notify on order status events (shipped, delivered, viewed, etc.). The order creator is always notified; these addresses are added in addition.

PhysicalOrderobject
FieldTypeDescription
idID!
refString!
createdAtDateTime!
recipientRecipient!
isAddressConfirmedBoolean
addressConfirmedDateDateTime
recipientSubmitsAddressBoolean
creatorNameString!
creatorEmailString!
orgNameString!
orgBrandingOrgBranding!
messageString!
physicalNoteString!
notePaperSizeNotePaperSize!

Sheet the handwritten note is plotted on. Defaults to the 5x7 card.

invoiceItems[InvoiceItem!]!
descriptionString
trackingUrlString
gifts[PhysicalGift!]
sendAllBoolean
campaignPhysicalCampaign
fulfillmentEvents[FulfillmentEvent!]!
images[Image!]!
giftChoices[PhysicalGift!]!
selectedGifts[PhysicalGift!]
hideContentsBoolean
hideExpirationWarningBoolean
requireBookedMeetingBoolean
meetingClaimGateMeetingClaimGate
cancelledAtDateTime
needsToSelectGiftBoolean
includeHandwrittenBoolean
fontStyleHandwritingFontStyle!
expiresAtDateTime
isExpiredBoolean
recipientLinkViewedAtDateTime
claimUrlString

Recipient claim URL. Populated on create when includeClaimUrl is true and the recipient must submit their address.

notificationEmailsString

Comma-separated extra emails notified on order status events, in addition to the creator.

PhysicalOrderBatchobject
FieldTypeDescription
idID!
refString!
creatorUser!
createdAtDateTime!
statusString!
acceptedCountInt!
placedCountInt!
errorCountInt!
totalOrdersInt!
totalDeliveredInt!
totalPaidInt!
PhysicalOrderBulkCreateInputinput

Input for bulk creating physical orders from CSV data

FieldTypeDescription
sourceS3KeyString

S3 key from bulkOrderSourceUploadUrl. Required for more than 100 rows.

orders[PhysicalOrderBulkItemInput!]

Inline rows. Limited to 100. Prefer sourceS3Key for large batches.

campaignIdID

Campaign ID to use for all orders (mutually exclusive with giftQuantities)

giftQuantities[GiftQuantityInput!]

Array of gift quantities to use for all orders (mutually exclusive with campaignId)

sendAllBoolean

Whether to send all gifts in the campaign to each recipient

hideContentsBoolean

Hide gift/package details during redemption and show a surprise screen instead. Only valid when recipient selection is not required.

sendEmailBoolean

Whether to send email notifications to recipients

headlineTemplateString

Subject line template for emails

validateAddressBoolean

Whether to validate addresses before creating orders

includeHandWrittenBoolean

Whether to include handwritten notes

notePaperSizeNotePaperSize

Sheet every note in this batch is plotted on, unless a row sets its own size. Omit to copy the campaign size, then the 5x7 card. The line limit follows this size.

brandTemplateIdID
notificationEmailsString

Comma-separated extra emails to notify on order status events for every order in the batch. The order creator is always notified; these addresses are added in addition.

PhysicalOrderBulkItemInputinput

Input for a single order in bulk creation

FieldTypeDescription
recipientNamerequiredString!

Recipient name

recipientOrganizationrequiredString!

Recipient organization

handwrittenMessagerequiredString!

Handwritten message for the recipient

notePaperSizeNotePaperSize

Sheet this note is plotted on. Omit to use the batch or campaign size, then the 5x7 card.

address1requiredString!

First line of address

address2String

Second line of address (optional)

cityrequiredString!

City

staterequiredString!

State/Province

postalCoderequiredString!

Postal/ZIP code

countryrequiredString!

Country

PhysicalOrderDeliveryStatusenum
ValueDescription
ALL
DELIVERED
PROCESSING
ADDRESS_REQUESTED
VIEWED
SHIPPED
CANCELLED
NOT_DELIVERED
PhysicalOrderInputinput
FieldTypeDescription
giftIds[GiftQuantities!]

The IDs of the gifts for this order. Multiple gift ids can be provided if not from campaign.

campaignIdID

The ID of the specific campaign for this order. One of giftId or campaignId must be provided. If a campaing is provided, the giftId will be determined by the campaign when the recipients chooses a gift from that campaign.

sendAllBoolean

If true, all gifts in a campaign will be sent to the recipient.

hideContentsBoolean

Hide gift/package details during redemption and show a surprise screen instead. Only valid when recipient selection is not required.

requireBookedMeetingBoolean

When true, the recipient can claim only after a meeting with the sender was ever scheduled. Cancelling the meeting does not lock the gift again. Defaults to the campaign setting when omitted.

recipientRecipientInput

The recipient information for this order.

messageString

The message that the recipient will receive with the gift.

physicalNoteString

This message will be physically printed on a card.

notePaperSizeNotePaperSize

Sheet the handwritten note is plotted on. Omit to copy the campaign size, then the 5x7 card. The line limit follows this size.

recipientSubmitsAddressBoolean

Indicates whether the recipient will submit their mailing address. If false, the mailing address must be provided by the creator.

mailingAddressMailingAddressInput

The mailing address for the recipient.

sendEmailBoolean

Whether to send the reward link immediately through email or if the user will share the link themselves

headlineTemplateString

Subject line if sending email

validateAddressBoolean

Check the mailing address before the order is placed and reject it if it cannot be delivered.

includeHandWrittenBoolean

Should this order explicitly include a handwritten note

brandTemplateIdID
includeClaimUrlBoolean

When true, include the recipient claim URL on the returned order.

notificationEmailsString

Comma-separated extra emails to notify on order status events (shipped, delivered, viewed, etc.). The order creator is always notified; these addresses are added in addition.

PhysicalOrderQueryinput
FieldTypeDescription
createdAtMinDateTime
createdAtMaxDateTime
deliveryStatusPhysicalOrderDeliveryStatus
teamIdString
isDeliveredBoolean
PhysicalOrdersobject
FieldTypeDescription
totalCountInt!
nodes[PhysicalOrder!]!
PhysicalOrderSortKeyenum
ValueDescription
CREATED_AT_ASC
CREATED_AT_DESC
PO_NUMBER_ASC
PhysicalOrderWithImportInputinput

Input for importing a product and creating an order in a single call. Combines ProductImportInput and PhysicalOrderInput fields.

FieldTypeDescription
titlerequiredString!

The name/title of the product.

priceFloat

Product price in US dollars, for example 29.99. Pass price or priceCents.

priceCentsInt

Product price in cents, for example 2999. Pass price or priceCents.

imagesrequired[String!]!

Array of image URLs for the product. The first image will be used as the featured image.

sourcerequiredString!

Where the product comes from, for example amazon or the store name from a recommendation.

purchaseUrlrequiredString!

Product page URL where RevSend will buy the item.

shortenTitleBoolean

Clean up long retail titles. Default: true.

categoryIds[String!]

Category IDs to associate with the created gift.

occasionIds[String!]

Occasion IDs to associate with the created gift.

recipientrequiredRecipientInput!

The recipient information for this order.

messageString

The message that the recipient will receive with the gift.

physicalNoteString

This message will be physically printed on a card.

notePaperSizeNotePaperSize

Sheet the handwritten note is plotted on. Omit to use the 5x7 card. The line limit follows this size.

recipientSubmitsAddressBoolean

Indicates whether the recipient will submit their mailing address. If false, the mailing address must be provided by the creator.

mailingAddressMailingAddressInput

The mailing address for the recipient.

sendEmailBoolean

Whether to send the reward link immediately through email or if the user will share the link themselves.

headlineTemplateString

Subject line if sending email.

validateAddressBoolean

Check the mailing address before the order is placed and reject it if it cannot be delivered.

includeHandWrittenBoolean

Should this order explicitly include a handwritten note.

hideContentsBoolean

Hide gift/package details during redemption and show a surprise screen instead. Only valid when recipient selection is not required.

brandTemplateIdID
saveToFavoritesBoolean

Whether to immediately save the gift to the current user's favorites. Default: false

includeClaimUrlBoolean

When true, include the recipient claim URL on the returned order.

notificationEmailsString

Comma-separated extra emails to notify on order status events (shipped, delivered, viewed, etc.). The order creator is always notified; these addresses are added in addition.

Productobject

A product in the catalog, with its images and variants.

FieldTypeDescription
idID!

Globally unique identifier.

titleString

A product is an addon if it doesn't belong to a single gift, but can be added on to gifts. E.g. special wrapping paper, or a custom printed card.

isAddonBoolean
images[Image!]!

A list of images associated with this product

variants[ProductVariant!]

A list of variants associated with the product.

totalInventoryInt

Inventory level for item in warehouse

ProductImportInputinput

Input for importing a product from an external source.

FieldTypeDescription
titlerequiredString!

The name/title of the product.

priceFloat

Product price in US dollars, for example 29.99. Pass price or priceCents.

priceCentsInt

Product price in cents, for example 2999. Pass price or priceCents.

imagesrequired[String!]!

Array of image URLs for the product. The first image will be used as the featured image.

sourcerequiredString!

Where the product comes from, for example amazon or the store name from a recommendation.

purchaseUrlrequiredString!

Product page URL where RevSend will buy the item.

shortenTitleBoolean

Clean up long retail titles. Default: true.

categoryIds[String!]

Category IDs to associate with the created gift.

occasionIds[String!]

Occasion IDs to associate with the created gift.

saveToFavoritesBoolean

Whether to immediately save the gift to the current user's favorites. Default: false

variants[ProductImportVariantInput!]

Product variants such as sizes or colors, so the sender or recipient can choose one. Up to 20.

ProductImportResultobject

Result returned after successfully importing a product.

FieldTypeDescription
giftIdID!

The created PhysicalGift ID. Use this ID to add the gift to campaigns or create orders.

productIdID!

ID of the created product.

variantIdID!

The default ProductVariant ID.

titleString!

The final title (may be shortened if shortenTitle was true).

priceCentsInt!

Final gift price in cents.

imageUrlString

The URL of the featured image, if available.

variants[ProductImportVariantResult!]!

Created variants. Includes the default variant when none were supplied.

ProductImportVariantInputinput
FieldTypeDescription
titlerequiredString!

Variant title shown to the sender/recipient (e.g. "M" or "Medium / Navy").

priceFloat

Variant price in dollars. Defaults to the product price.

optionValuesJSON

Option map, for example {"Size": "M", "Color": "Navy"}.

ProductImportVariantResultobject
FieldTypeDescription
idID!
titleString!
ProductVariantobject

Represents a product variant.

FieldTypeDescription
idID!

Globally unique identifier.

priceInt!

Price, in cents

images[Image!]

A list of images associated with this product variant

titleString

The title of the product variant

availableBoolean!

False when the variant is no longer sold. Past orders can still reference it.

Recipientobject
FieldTypeDescription
idID!
orgOrg
emailString
nameString!
orgNameString
RecipientInputinput
FieldTypeDescription
emailString
namerequiredString!
orgNameString
Roleenum
ValueDescription
ADMIN
USER
Teamobject
FieldTypeDescription
idID!
nameString!
isAdminBoolean!
Userobject
FieldTypeDescription
idID!
nameString!
emailString!
roleRole!
budgetBudget
teams[UserTeams]
statusUserStatus!
budgetReminderEnabledBoolean
shippingUpdatesEnabledBoolean
notificationSettingsNotificationSettings
bookingLinkString
jobTitleString
phoneString
createdAtDateTime
lastActiveDateTime
UserStatusenum
ValueDescription
ACTIVE
INACTIVE
INVITED
UserTeamsobject
FieldTypeDescription
userIdString!
teamIdString!
nameString!
isAdminBoolean!
WebhookCreateInputinput
FieldTypeDescription
urlrequiredString!
sourcerequiredIntegrationPartners!

Label for the tool that registered the webhook. It does not change delivery; any value works.

typerequiredWebhookTypes!
WebhookCreateResponseobject
FieldTypeDescription
idString!
WebhookDeleteInputinput
FieldTypeDescription
idrequiredString!
WebhookSampleResponseobject
FieldTypeDescription
orderOrderSampleOrder!
recipientOrderSampleRecipient!
senderOrderSampleSender!
WebhookTypesenum
ValueDescription
ORDER_STATUS_UPDATE
ORDER_CREATE