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.
| Scope | Allows |
|---|---|
campaigns:read | List campaigns. |
campaigns:write | Create and update physical and digital campaigns. |
orders:read | List and export orders. |
orders:write | Create, 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
Send a gift link
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,priceCentsandstoreNametophysicalOrderCreateWithImportaspurchaseUrl,title,images,priceCentsandsource. - 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 field | Type | Notes |
|---|---|---|
recipientInforequired | string | Anything you know about the person. |
countrequired | integer | How many ideas to return, 1 to 20. |
budgetMin | number | Lowest price in US dollars. Defaults to 0. |
budgetMax | number | Highest 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"
}
}
| Status | Meaning |
|---|---|
| 400 | The body is missing recipientInfo, count is out of range, or budgetMin is above budgetMax. |
| 401 | Missing, revoked or expired API key. |
| 404 | No 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:
| status | When |
|---|---|
Viewed | The recipient opened the claim link. |
Address Submitted | The recipient entered their address (and chose a gift, if offered a choice). |
SHIPPED | The package is in transit. |
DELIVERED | The carrier reported delivery. |
NOT DELIVERED | The 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.
| Code | Meaning |
|---|---|
UNAUTHENTICATED | Missing, malformed, revoked or expired API key. |
FORBIDDEN | The key is valid but is missing a scope, or the key's user is not allowed to do this. |
BAD_USER_INPUT | An argument is invalid. The message says which one. |
TOO_MANY_REQUESTS | Rate limit reached. Wait and retry with backoff. |
INTERNAL_SERVER_ERROR | Something 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
| Limit | Value |
|---|---|
| Requests per API key user | 240 per 60 seconds |
| Requests per IP address | 120 per 60 seconds |
| Requests per operation per IP address | 40 per 60 seconds |
| Query depth | 16 levels |
| Aliases per request | 50 |
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.
The user the API key belongs to, including role, teams and current budget (budget.amount).
Returns User
query {
me {
id
name
email
role
budget { amount }
}
}
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.
Page through the physical gifts available to your organization. Filter by category, occasion, search text, price range (in cents) or specific IDs.
| Argument | Type | Description |
|---|---|---|
| skiprequired | Int! | |
| takerequired | Int! | |
| query | PhysicalGiftQuery |
Returns PhysicalGifts!
One physical gift by ID, with its products and variants.
| Argument | Type | Description |
|---|---|---|
| idrequired | ID! |
Returns PhysicalGift
Gift categories you can use to filter physicalGifts.
Returns [Category!]!
Search buyable products from retail partners by keyword. Results are cached. Pass excludeUrls to get a fresh page that skips gifts you already showed.
| Argument | Type | Description |
|---|---|---|
| queryrequired | String! | |
| excludeUrls | [String!] |
Returns [MarketplaceWebGift!]!
Full product details (images, price, variants) for a result from marketplaceWebGifts.
| Argument | Type | Description |
|---|---|---|
| urlrequired | String! |
Returns MarketplaceWebGiftDetail
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.
| Argument | Type | Description |
|---|---|---|
| inputrequired | MarketplaceWebGiftImportInput! |
Returns ProductImportResult!
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.
| Argument | Type | Description |
|---|---|---|
| inputrequired | ProductImportInput! |
Returns ProductImportResult!
Gift card brands available for digital campaigns and orders.
| Argument | Type | Description |
|---|---|---|
| query | DigitalBrandQuery | |
| skip | Int | |
| take | Int |
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.
Page through physical and digital campaigns together.
| Argument | Type | Description |
|---|---|---|
| skiprequired | Int! | |
| takerequired | Int! | |
| sort | CampaignSortKey | |
| query | CampaignQuery |
Returns Campaigns!
Page through physical gift campaigns.
| Argument | Type | Description |
|---|---|---|
| skiprequired | Int! | |
| takerequired | Int! | |
| sort | PhysicalCampaignSortKey | |
| query | PhysicalCampaignQuery |
Returns PhysicalCampaigns!
One physical campaign by ID.
| Argument | Type | Description |
|---|---|---|
| idrequired | ID! |
Returns PhysicalCampaign
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.
| Argument | Type | Description |
|---|---|---|
| inputrequired | PhysicalCampaignInput! |
Returns PhysicalCampaign!
Update a physical campaign. Fields you leave out keep their current values.
| Argument | Type | Description |
|---|---|---|
| idrequired | ID! | |
| inputrequired | PhysicalCampaignInput! |
Returns PhysicalCampaign!
Page through digital gift card campaigns.
| Argument | Type | Description |
|---|---|---|
| skiprequired | Int! | |
| takerequired | Int! | |
| sort | DigitalCampaignSortKey | |
| query | DigitalCampaignQuery |
Returns DigitalCampaigns!
One digital campaign by ID.
| Argument | Type | Description |
|---|---|---|
| idrequired | ID! |
Returns DigitalCampaign
Create a digital gift card campaign with a set of brands and a reward value.
| Argument | Type | Description |
|---|---|---|
| inputrequired | DigitalCampaignInput! |
Returns DigitalCampaign!
Update a digital campaign. Fields you leave out keep their current values.
| Argument | Type | Description |
|---|---|---|
| idrequired | ID! | |
| inputrequired | DigitalCampaignInput! |
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.
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.
| Argument | Type | Description |
|---|---|---|
| inputrequired | PhysicalOrderInput! |
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
}
}
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.
| Argument | Type | Description |
|---|---|---|
| inputrequired | PhysicalOrderWithImportInput! |
Returns PhysicalOrder!
Alias for physicalOrderCreateWithImport. Import a product and send it in one call.
| Argument | Type | Description |
|---|---|---|
| inputrequired | PhysicalOrderWithImportInput! |
Returns PhysicalOrder!
Create and send a handwritten note order. Looks up the Branded Handwritten Note gift automatically.
| Argument | Type | Description |
|---|---|---|
| inputrequired | PhysicalHandwrittenNoteInput! |
Returns PhysicalOrder!
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.
| Argument | Type | Description |
|---|---|---|
| textrequired | String! |
Returns HandWritingSampleOutput
Change the message, handwritten note or recipient on an order you created or manage. The message cannot change once the order has shipped.
| Argument | Type | Description |
|---|---|---|
| inputrequired | PhysicalOrderInput! | |
| idrequired | ID! |
Returns PhysicalOrder!
Cancel a physical order you created and refund its cost to the budget it was paid from. Orders that already shipped cannot be cancelled.
| Argument | Type | Description |
|---|---|---|
| idrequired | ID! |
Returns PhysicalOrder!
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.
| Argument | Type | Description |
|---|---|---|
| skiprequired | Int! | |
| takerequired | Int! | |
| sort | PhysicalOrderSortKey | |
| query | PhysicalOrderQuery |
Returns PhysicalOrders!
One physical order by ID, with its status, claim link, selected gifts and shipping events.
| Argument | Type | Description |
|---|---|---|
| idrequired | ID! |
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.
Queue a batch of physical orders, either from orders rows or from a CSV uploaded with bulkOrderSourceUploadUrl.
| Argument | Type | Description |
|---|---|---|
| inputrequired | PhysicalOrderBulkCreateInput! |
Returns PhysicalOrderBatch!
Get a short-lived upload URL for a recipient CSV. PUT the file to url, then pass key as sourceS3Key to physicalOrderBulkCreate.
Returns AssetUploadUrl!
Check a recipient CSV before you upload it. Returns row-level errors.
| Argument | Type | Description |
|---|---|---|
| csvContentrequired | String! |
Returns CSVValidationResult!
Progress of a batch you created: accepted, placed, failed and delivered counts.
| Argument | Type | Description |
|---|---|---|
| idrequired | ID! |
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.
Send one digital gift card. Use deliveryMethod: LINK with includeClaimUrl: true to share the link yourself.
| Argument | Type | Description |
|---|---|---|
| inputrequired | DigitalOrderInput! |
Returns DigitalOrder!
Send a digital campaign to a list of recipients in one request.
| Argument | Type | Description |
|---|---|---|
| inputrequired | DigitalOrderBulkInput! |
Returns DigitalOrderBatch!
Cancel an unredeemed digital order and refund it to the budget it was paid from.
| Argument | Type | Description |
|---|---|---|
| idrequired | ID! |
Returns DigitalOrder!
Page through digital orders. A user key sees its own orders; an admin key sees the orders it manages.
| Argument | Type | Description |
|---|---|---|
| skiprequired | Int! | |
| takerequired | Int! | |
| sort | DigitalOrderSortKey | |
| query | DigitalOrderQuery |
Returns DigitalOrders!
One digital order by its ref.
| Argument | Type | Description |
|---|---|---|
| orderRefrequired | ID! |
Returns DigitalOrder
Page through bulk digital sends.
| Argument | Type | Description |
|---|---|---|
| skiprequired | Int! | |
| takerequired | Int! | |
| sort | DigitalOrderBatchSortKey | |
| query | DigitalOrderBatchQuery |
Returns DigitalOrderBatches!
One bulk digital send by its ref.
| Argument | Type | Description |
|---|---|---|
| orderBatchRefrequired | ID! |
Returns DigitalOrderBatch
Order history
Physical and digital orders in one list, for reporting.
Page through physical and digital orders together, newest first. Filter by date range, type, team or search text.
| Argument | Type | Description |
|---|---|---|
| skiprequired | Int! | |
| takerequired | Int! | |
| sort | OrderSortKey | |
| myOrders | Boolean | |
| getAll | Boolean | |
| query | OrderQuery |
Returns Orders!
Export order history as CSV. Returns the CSV text.
| Argument | Type | Description |
|---|---|---|
| query | OrderQuery | |
| myOrders | Boolean | |
| sort | OrderSortKey |
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.
Brand templates in your organization.
Returns [OrgBrandTemplate!]!
Create a brand template. Upload the logo first with assetUploadUrlCreate and pass the resulting URL as logoUrl.
| Argument | Type | Description |
|---|---|---|
| inputrequired | OrgBrandTemplateInput! |
Returns OrgBrandTemplate!
Update a brand template.
| Argument | Type | Description |
|---|---|---|
| idrequired | ID! | |
| inputrequired | OrgBrandTemplateInput! |
Returns OrgBrandTemplate!
Delete a brand template.
| Argument | Type | Description |
|---|---|---|
| idrequired | ID! |
Returns Boolean!
Make a template the default for orders that do not pass brandTemplateId.
| Argument | Type | Description |
|---|---|---|
| idrequired | ID! |
Returns Org!
Get a short-lived upload URL for an image such as a logo. PUT the file to url with the same contentType.
| Argument | Type | Description |
|---|---|---|
| inputrequired | AssetUploadUrlInput! |
Returns AssetUploadUrl
Webhooks
Register a URL to receive order events. See Webhook events for payloads.
Register an HTTPS URL for ORDER_CREATE or ORDER_STATUS_UPDATE events for your whole organization.
| Argument | Type | Description |
|---|---|---|
| inputrequired | WebhookCreateInput! |
Returns WebhookCreateResponse!
Remove a webhook by the ID returned from integrationWebhookCreate.
| Argument | Type | Description |
|---|---|---|
| inputrequired | WebhookDeleteInput! |
Returns String!
A sample event payload, useful for building and testing your handler.
Returns WebhookSampleResponse
Types
Objects, inputs and enums used by the operations above. Fields used only inside RevSend are left out.
| Field | Type | Description |
|---|---|---|
| url | String! | |
| key | String! |
| Field | Type | Description |
|---|---|---|
| contentTyperequired | String! |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| amount | Float! | |
| isPaymentFallbackEnabled | Boolean! | |
| refillAmount | Int! | |
| isRollover | Boolean! | |
| alertEnabled | Boolean! | |
| alertThresholdAmount | Int | |
| alertRecipientEmail | String | |
| alertLastSentAt | DateTime | |
| alertActive | Boolean! |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| ref | String! | |
| createdAt | DateTime! | |
| type | CampaignType! | |
| name | String | |
| brands | [DigitalBrand] | |
| gifts | [PhysicalGift] |
| Field | Type | Description |
|---|---|---|
| createdAtMin | DateTime | |
| createdAtMax | DateTime | |
| isArchived | Boolean | |
| teamId | String | |
| type | CampaignType | |
| text | String | |
| isRevSendCurated | Boolean |
| Field | Type | Description |
|---|---|---|
| totalCount | Int! | |
| nodes | [Campaign!]! |
| Value | Description |
|---|---|
| CREATED_AT_ASC | |
| CREATED_AT_DESC |
| Value | Description |
|---|---|
| DIGITAL | |
| PHYSICAL |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| name | String! | |
| icon | String! |
A validation error found in the CSV
| Field | Type | Description |
|---|---|---|
| rowNumber | Int! | The row number where the error was found (1-indexed, including header) |
| field | String! | The field/column where the error was found |
| message | String! | Description of the error |
| value | String | The actual value that caused the error (if applicable) |
Result of CSV validation for physical orders
| Field | Type | Description |
|---|---|---|
| isValid | Boolean! | Whether the entire CSV is valid (no errors) |
| totalRows | Int! | Total number of rows in the CSV (excluding header) |
| validRows | Int! | Number of rows with valid data and addresses |
| errors | [CSVValidationError!]! | List of validation errors found in the CSV |
| summary | CSVValidationSummary! | Summary of validation results |
Summary of CSV validation results
| Field | Type | Description |
|---|---|---|
| missingFields | Int! | Number of rows with missing required fields |
| invalidAddresses | Int! | Number of rows with invalid addresses |
| validAddresses | Int! | Number of rows with valid addresses |
| Value | Description |
|---|---|
| USD | |
| CAD |
Digital reward brand
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| name | String! | |
| iconUrl | String | |
| faceplateUrl | String | For displaying the card image |
| legalTerms | String | |
| description | String | |
| availableCountries | String | |
| supportedCharities | String | |
| redemptionDisclaimer | String | |
| 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. |
| increment | Int | The valid redemption increment, in cents. A null value means the possible redemption values are defined by the denominations. |
| maxValue | Int! | Max redemption value of the card, in cents |
| minValue | Int! | Min redemption value of the card, in cents |
| currency | Currency! | Denominated currency for this brand |
| isFavorite | Boolean | Is this brand a favorite of the user |
| isNonRedeemable | Boolean | When true, claiming this brand marks the gift redeemed without issuing a gift card |
| Field | Type | Description |
|---|---|---|
| search | String | |
| category | ID | |
| occasion | ID | |
| international | Boolean | |
| minPrice | Int | Minimum card value in dollars |
| maxPrice | Int | Maximum card value in dollars |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| createdAt | DateTime! | |
| ref | String! | |
| name | String! | |
| rewardValue | Int! | |
| brands | [ID!]! | |
| brandDetails | [DigitalBrand] | |
| messageTemplate | String | |
| headlineTemplate | String | |
| allowCharity | Boolean! | |
| brandsSummary | String | |
| isArchived | Boolean! | |
| requireEmail | Boolean | |
| currency | Currency | |
| team | Team | |
| private | Boolean! | |
| requireBookedMeeting | Boolean! | |
| autoExpirationDays | Int | |
| brandTemplateId | ID |
| Field | Type | Description |
|---|---|---|
| name | String | |
| messageTemplate | String | |
| headlineTemplate | String | |
| brands | [ID!] | |
| rewardValue | Int | |
| currency | Currency | |
| allowCharity | Boolean | |
| isArchived | Boolean | |
| team | String | |
| private | Boolean | |
| requireBookedMeeting | Boolean | |
| autoExpirationDays | Int | |
| brandTemplateId | ID |
| Field | Type | Description |
|---|---|---|
| totalCount | Int! | |
| nodes | [DigitalCampaign!]! |
| Value | Description |
|---|---|
| CREATED_AT_ASC | |
| CREATED_AT_DESC |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| ref | String! | |
| createdAt | DateTime! | |
| rewardValue | Int! | |
| status | DigitalOrderStatus! | |
| rewardLink | String! | |
| claimUrl | String | Recipient claim URL. Populated on create when includeClaimUrl is true and deliveryMethod is LINK. |
| recipient | Recipient! | |
| creator | User! | |
| campaign | DigitalCampaign | |
| description | String | |
| deliveryMethod | DigitalOrderDeliveryMethod! | |
| events | [DigitalOrderEvent!]! | |
| cancelledAt | DateTime | |
| expiresAt | DateTime | |
| teamId | String | |
| hideExpirationWarning | Boolean | |
| requireBookedMeeting | Boolean | |
| notificationEmails | String | Comma-separated extra emails notified on order status events, in addition to the creator. |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| ref | String! | |
| creator | User! | |
| createdAt | DateTime! | |
| totalOrders | Int! | |
| totalDelivered | Int! | |
| totalPaid | Int! | |
| digitalOrders | DigitalOrders! |
| Field | Type | Description |
|---|---|---|
| totalCount | Int! | |
| nodes | [DigitalOrderBatch!]! |
| Value | Description |
|---|---|
| CREATED_AT_ASC | |
| CREATED_AT_DESC |
| Field | Type | Description |
|---|---|---|
| recipientsrequired | [RecipientInput!]! | |
| campaignIdrequired | ID! | |
| messageTemplaterequired | String! | |
| headlineTemplate | String | |
| deliveryMethod | DigitalOrderDeliveryMethod | |
| requireBookedMeeting | Boolean | 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. |
| notificationEmails | String | 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. |
| Value | Description |
|---|---|
| LINK | |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| createdAt | DateTime! | |
| code | DigitalOrderEventCode! |
| Value | Description |
|---|---|
| CREATED | |
| DELIVERED | |
| VIEWED | |
| PAYMENT_SUCCEEDED | |
| REWARD_EMAIL_FAILED | |
| REWARD_EMAIL_SUCCEEDED | |
| EMAIL_OPENED | |
| REDEEMED |
| Field | Type | Description |
|---|---|---|
| recipientrequired | RecipientInput! | |
| campaignId | ID | |
| brandId | ID | |
| brandTemplateId | ID | |
| currencyId | ID | |
| rewardValue | Int | |
| messageTemplate | String | |
| headlineTemplate | String | |
| deliveryMethodrequired | DigitalOrderDeliveryMethod! | |
| includeClaimUrl | Boolean | When true, include the recipient claim URL on the returned order. |
| requireBookedMeeting | Boolean | 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. |
| notificationEmails | String | 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. |
| Field | Type | Description |
|---|---|---|
| totalCount | Int! | |
| nodes | [DigitalOrder!]! |
| Value | Description |
|---|---|
| CREATED_AT_ASC | |
| CREATED_AT_DESC |
| Value | Description |
|---|---|
| PAYMENT_PENDING | |
| PAYMENT_SUCCEEDED | |
| REVOKED |
A shipping status update at a point in time.
| Field | Type | Description |
|---|---|---|
| happenedAt | DateTime! | The time at which this fulfillment event happened. |
| id | ID! | A globally-unique identifier. |
| message | String | A message associated with this fulfillment event. |
| status | FulfillmentEventStatus! | The status of this fulfillment event. |
Shipping status reported by the carrier.
| Value | Description |
|---|---|
| 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. |
| Field | Type | Description |
|---|---|---|
| idrequired | ID! | |
| quantity | Int | |
| variantId | ID |
Input for specifying gift quantities
| Field | Type | Description |
|---|---|---|
| giftIdrequired | ID! | Gift ID |
| quantity | Int | Quantity of this gift |
| variantId | ID | Product variant ID (optional) |
| Value | Description |
|---|---|
| CLEAN | |
| MESSY |
| Field | Type | Description |
|---|---|---|
| outputText | String! |
Represents an image resource.
| Field | Type | Description |
|---|---|---|
| altText | String | A word or phrase to share the nature or contents of an image. |
| height | Int | Original height of the image in pixels, when known. |
| id | ID | A unique identifier for the image. |
| url | String! | 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. |
| width | Int | Original width of the image in pixels, when known. |
| Value | Description |
|---|---|
| MAKE | |
| ZAPIER | |
| VIA_SOCKET |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| createdAt | DateTime! | |
| amount | Int! | |
| description | String |
A mailing address. countryCode is ISO 3166-1 alpha-2 and provinceCode is the state or province code.
| Field | Type | Description |
|---|---|---|
| address1 | String | The first line of the address. Typically the street address or PO Box number. |
| address2 | String | The second line of the address. Typically the number of the apartment, suite, or unit. |
| city | String | The name of the city, district, village, or town. |
| company | String | The name of the customer's company or organization. |
| countryCode | String | The two-letter code for the country of the address. |
| firstName | String | The first name of the customer. |
| lastName | String | The last name of the customer. |
| phone | String | A unique phone number for the customer. Formatted using E.164 standard. For example, _+16135551111_. |
| provinceCode | String | The code for the region of the address, such as the province, state, or district. For example QC for Quebec, Canada. |
| zip | String | The zip or postal code of the address. |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| title | String! | |
| url | String! | |
| source | String! | |
| imageUrl | String | |
| price | Float | |
| snippet | String |
| Field | Type | Description |
|---|---|---|
| url | String! | |
| title | String! | |
| description | String | |
| price | Float | |
| source | String! | |
| images | [String!]! | |
| variants | [MarketplaceWebGiftVariant!]! |
| Field | Type | Description |
|---|---|---|
| urlrequired | String! | Product URL from a |
| title | String | |
| source | String | |
| imageUrl | String | |
| price | Float | |
| query | String | The search text that found this product. Helps pick the right option when a color or size was requested. |
| color | String | Color option to import, when the product has several. |
| size | String | Size option to import, when the product has several. |
| Field | Type | Description |
|---|---|---|
| title | String! | |
| price | Float | |
| imageUrl | String | |
| color | String | |
| size | String |
| Field | Type | Description |
|---|---|---|
| requireBookedMeeting | Boolean! | |
| isSatisfied | Boolean! | |
| hasAssociatedMeeting | Boolean! | |
| meetingEndsAt | DateTime | |
| creatorBookingLink | String | |
| creatorName | String |
Sheet a handwritten note is plotted on. CARD_5X7 is the current 5x7 card.
| Value | Description |
|---|---|
| CARD_5X7 | |
| A6 | |
| A5 | |
| A4 | |
| A3 | |
| B5 | |
| B4 | |
| US_LETTER | |
| ENVELOPE_10 |
| Field | Type | Description |
|---|---|---|
| emailAddressSubmittedEnabled | Boolean! | |
| emailShippedEnabled | Boolean! | |
| emailDeliveredEnabled | Boolean! | |
| emailViewedEnabled | Boolean! | |
| emailRedeemedEnabled | Boolean! | |
| slackAddressSubmittedEnabled | Boolean! | |
| slackShippedEnabled | Boolean! | |
| slackDeliveredEnabled | Boolean! | |
| slackViewedEnabled | Boolean! | |
| slackRedeemedEnabled | Boolean! |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| name | String! | |
| icon | String! |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| ref | String! | |
| createdAt | DateTime! | |
| creatorName | String | |
| creatorOrg | String | |
| recipientName | String | |
| recipientOrg | String | |
| recipientSubmitsAddress | Boolean | |
| addressConfirmedDate | DateTime | |
| events | [DigitalOrderEvent!] | |
| fulfillmentEvents | [FulfillmentEvent!] | |
| type | OrderType! | |
| totalCost | Int! | |
| description | String | |
| cancelledAt | DateTime | |
| recipientLinkViewedAt | DateTime |
| Field | Type | Description |
|---|---|---|
| totalCount | Int! | |
| nodes | [Order!]! |
| Field | Type | Description |
|---|---|---|
| id | String! | |
| value | Int! | |
| message | String! | |
| emailSubject | String! | |
| deliveryMethod | String! | |
| status | String! |
| Field | Type | Description |
|---|---|---|
| name | String! | |
| String | ||
| orgName | String! |
| Field | Type | Description |
|---|---|---|
| id | String! | |
| String! | ||
| name | String! | |
| teamId | String! | |
| teamName | String! |
| Value | Description |
|---|---|
| CREATED_AT_ASC | |
| CREATED_AT_DESC |
| Value | Description |
|---|---|
| DIGITAL | |
| PHYSICAL |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| name | String! | |
| formattedName | String! | |
| logoUrl | String | |
| logoBackgroundColor | String | |
| logoPrimaryColor | String | |
| defaultBrandTemplateId | ID | |
| defaultBrandTemplate | OrgBrandTemplate | |
| brandTemplates | [OrgBrandTemplate!]! | |
| isInternational | Boolean | |
| budgetAlertDefaultThreshold | Int! |
| Field | Type | Description |
|---|---|---|
| logoUrl | String | |
| logoBackgroundColor | String | |
| logoPrimaryColor | String |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| name | String! | |
| logoUrl | String | |
| logoBackgroundColor | String | |
| logoPrimaryColor | String | |
| handwritingFontStyle | HandwritingFontStyle! | |
| isDefault | Boolean! |
| Field | Type | Description |
|---|---|---|
| namerequired | String! | |
| logoUrl | String | |
| logoBackgroundColor | String | |
| logoPrimaryColor | String | |
| handwritingFontStyle | HandwritingFontStyle |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| ref | String! | |
| createdAt | DateTime! | |
| name | String! | |
| gifts | [PhysicalGift!]! | |
| variants | [ID!] | |
| messageTemplate | String | |
| physicalNoteTemplate | String | |
| notePaperSize | NotePaperSize | 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. |
| team | Team | |
| private | Boolean! | |
| requireBookedMeeting | Boolean! | |
| autoExpirationDays | Int | |
| brandTemplateId | ID |
| Field | Type | Description |
|---|---|---|
| name | String | |
| messageTemplate | String | |
| physicalNoteTemplate | String | |
| notePaperSize | NotePaperSize | 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!] | |
| replaceGifts | Boolean | |
| isArchived | Boolean | |
| isOneOff | Boolean | |
| private | Boolean | |
| requireBookedMeeting | Boolean | |
| autoExpirationDays | Int | |
| team | String | |
| brandTemplateId | ID |
| Field | Type | Description |
|---|---|---|
| totalCount | Int! | |
| nodes | [PhysicalCampaign!]! |
| Value | Description |
|---|---|
| CREATED_AT_ASC | |
| CREATED_AT_DESC |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| title | String! | |
| messageMaxLength | Int | |
| messageMaxLines | Int | |
| descriptionHtml | String | |
| featuredImageSrc | String | |
| products | [Product!]! | |
| productVariants | [ProductVariant!]! | |
| isDisabled | Boolean | |
| categories | [String!]! | |
| occasions | [String!]! | |
| isAddOn | Boolean | |
| requiresPhone | Boolean | |
| isFavorite | Boolean | |
| selectedVariant | ProductVariant | |
| optionId | ID |
| Field | Type | Description |
|---|---|---|
| category | String | |
| occasion | String | |
| search | String | |
| addOns | Boolean | |
| ids | [String!] | |
| minPrice | Int | Minimum gift price in dollars, including shipping |
| maxPrice | Int | Maximum gift price in dollars, including shipping |
| Field | Type | Description |
|---|---|---|
| totalCount | Int | |
| nodes | [PhysicalGift!]! |
Input for creating a handwritten note-only order.
| Field | Type | Description |
|---|---|---|
| recipientrequired | RecipientInput! | The recipient information for this order. |
| physicalNoterequired | String! | The message that will be physically printed on the handwritten note. |
| notePaperSize | NotePaperSize | Sheet the handwritten note is plotted on. Omit to use the 5x7 card. The line limit follows this size. |
| message | String | Optional email message sent to the recipient. |
| mailingAddressrequired | MailingAddressInput! | The mailing address for the recipient. |
| sendEmail | Boolean | Whether to send the reward link immediately through email or if the user will share the link themselves. |
| headlineTemplate | String | Subject line if sending email. |
| validateAddress | Boolean | Check the mailing address before the order is placed and reject it if it cannot be delivered. |
| brandTemplateId | ID | |
| notificationEmails | String | 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. |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| ref | String! | |
| createdAt | DateTime! | |
| recipient | Recipient! | |
| isAddressConfirmed | Boolean | |
| addressConfirmedDate | DateTime | |
| recipientSubmitsAddress | Boolean | |
| creatorName | String! | |
| creatorEmail | String! | |
| orgName | String! | |
| orgBranding | OrgBranding! | |
| message | String! | |
| physicalNote | String! | |
| notePaperSize | NotePaperSize! | Sheet the handwritten note is plotted on. Defaults to the 5x7 card. |
| invoiceItems | [InvoiceItem!]! | |
| description | String | |
| trackingUrl | String | |
| gifts | [PhysicalGift!] | |
| sendAll | Boolean | |
| campaign | PhysicalCampaign | |
| fulfillmentEvents | [FulfillmentEvent!]! | |
| images | [Image!]! | |
| giftChoices | [PhysicalGift!]! | |
| selectedGifts | [PhysicalGift!] | |
| hideContents | Boolean | |
| hideExpirationWarning | Boolean | |
| requireBookedMeeting | Boolean | |
| meetingClaimGate | MeetingClaimGate | |
| cancelledAt | DateTime | |
| needsToSelectGift | Boolean | |
| includeHandwritten | Boolean | |
| fontStyle | HandwritingFontStyle! | |
| expiresAt | DateTime | |
| isExpired | Boolean | |
| recipientLinkViewedAt | DateTime | |
| claimUrl | String | Recipient claim URL. Populated on create when includeClaimUrl is true and the recipient must submit their address. |
| notificationEmails | String | Comma-separated extra emails notified on order status events, in addition to the creator. |
Input for bulk creating physical orders from CSV data
| Field | Type | Description |
|---|---|---|
| sourceS3Key | String | S3 key from bulkOrderSourceUploadUrl. Required for more than 100 rows. |
| orders | [PhysicalOrderBulkItemInput!] | Inline rows. Limited to 100. Prefer sourceS3Key for large batches. |
| campaignId | ID | 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) |
| sendAll | Boolean | Whether to send all gifts in the campaign to each recipient |
| hideContents | Boolean | Hide gift/package details during redemption and show a surprise screen instead. Only valid when recipient selection is not required. |
| sendEmail | Boolean | Whether to send email notifications to recipients |
| headlineTemplate | String | Subject line template for emails |
| validateAddress | Boolean | Whether to validate addresses before creating orders |
| includeHandWritten | Boolean | Whether to include handwritten notes |
| notePaperSize | NotePaperSize | 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. |
| brandTemplateId | ID | |
| notificationEmails | String | 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. |
Input for a single order in bulk creation
| Field | Type | Description |
|---|---|---|
| recipientNamerequired | String! | Recipient name |
| recipientOrganizationrequired | String! | Recipient organization |
| handwrittenMessagerequired | String! | Handwritten message for the recipient |
| notePaperSize | NotePaperSize | Sheet this note is plotted on. Omit to use the batch or campaign size, then the 5x7 card. |
| address1required | String! | First line of address |
| address2 | String | Second line of address (optional) |
| cityrequired | String! | City |
| staterequired | String! | State/Province |
| postalCoderequired | String! | Postal/ZIP code |
| countryrequired | String! | Country |
| Value | Description |
|---|---|
| ALL | |
| DELIVERED | |
| PROCESSING | |
| ADDRESS_REQUESTED | |
| VIEWED | |
| SHIPPED | |
| CANCELLED | |
| NOT_DELIVERED |
| Field | Type | Description |
|---|---|---|
| giftIds | [GiftQuantities!] | The IDs of the gifts for this order. Multiple gift ids can be provided if not from campaign. |
| campaignId | ID | 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. |
| sendAll | Boolean | If true, all gifts in a campaign will be sent to the recipient. |
| hideContents | Boolean | Hide gift/package details during redemption and show a surprise screen instead. Only valid when recipient selection is not required. |
| requireBookedMeeting | Boolean | 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. |
| recipient | RecipientInput | The recipient information for this order. |
| message | String | The message that the recipient will receive with the gift. |
| physicalNote | String | This message will be physically printed on a card. |
| notePaperSize | NotePaperSize | Sheet the handwritten note is plotted on. Omit to copy the campaign size, then the 5x7 card. The line limit follows this size. |
| recipientSubmitsAddress | Boolean | Indicates whether the recipient will submit their mailing address. If false, the mailing address must be provided by the creator. |
| mailingAddress | MailingAddressInput | The mailing address for the recipient. |
| sendEmail | Boolean | Whether to send the reward link immediately through email or if the user will share the link themselves |
| headlineTemplate | String | Subject line if sending email |
| validateAddress | Boolean | Check the mailing address before the order is placed and reject it if it cannot be delivered. |
| includeHandWritten | Boolean | Should this order explicitly include a handwritten note |
| brandTemplateId | ID | |
| includeClaimUrl | Boolean | When true, include the recipient claim URL on the returned order. |
| notificationEmails | String | 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. |
| Field | Type | Description |
|---|---|---|
| createdAtMin | DateTime | |
| createdAtMax | DateTime | |
| deliveryStatus | PhysicalOrderDeliveryStatus | |
| teamId | String | |
| isDelivered | Boolean |
| Field | Type | Description |
|---|---|---|
| totalCount | Int! | |
| nodes | [PhysicalOrder!]! |
| Value | Description |
|---|---|
| CREATED_AT_ASC | |
| CREATED_AT_DESC | |
| PO_NUMBER_ASC |
Input for importing a product and creating an order in a single call. Combines ProductImportInput and PhysicalOrderInput fields.
| Field | Type | Description |
|---|---|---|
| titlerequired | String! | The name/title of the product. |
| price | Float | Product price in US dollars, for example |
| priceCents | Int | Product price in cents, for example |
| imagesrequired | [String!]! | Array of image URLs for the product. The first image will be used as the featured image. |
| sourcerequired | String! | Where the product comes from, for example |
| purchaseUrlrequired | String! | Product page URL where RevSend will buy the item. |
| shortenTitle | Boolean | 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. |
| recipientrequired | RecipientInput! | The recipient information for this order. |
| message | String | The message that the recipient will receive with the gift. |
| physicalNote | String | This message will be physically printed on a card. |
| notePaperSize | NotePaperSize | Sheet the handwritten note is plotted on. Omit to use the 5x7 card. The line limit follows this size. |
| recipientSubmitsAddress | Boolean | Indicates whether the recipient will submit their mailing address. If false, the mailing address must be provided by the creator. |
| mailingAddress | MailingAddressInput | The mailing address for the recipient. |
| sendEmail | Boolean | Whether to send the reward link immediately through email or if the user will share the link themselves. |
| headlineTemplate | String | Subject line if sending email. |
| validateAddress | Boolean | Check the mailing address before the order is placed and reject it if it cannot be delivered. |
| includeHandWritten | Boolean | Should this order explicitly include a handwritten note. |
| hideContents | Boolean | Hide gift/package details during redemption and show a surprise screen instead. Only valid when recipient selection is not required. |
| brandTemplateId | ID | |
| saveToFavorites | Boolean | Whether to immediately save the gift to the current user's favorites. Default: false |
| includeClaimUrl | Boolean | When true, include the recipient claim URL on the returned order. |
| notificationEmails | String | 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. |
A product in the catalog, with its images and variants.
| Field | Type | Description |
|---|---|---|
| id | ID! | Globally unique identifier. |
| title | String | 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. |
| isAddon | Boolean | |
| images | [Image!]! | A list of images associated with this product |
| variants | [ProductVariant!] | A list of variants associated with the product. |
| totalInventory | Int | Inventory level for item in warehouse |
Input for importing a product from an external source.
| Field | Type | Description |
|---|---|---|
| titlerequired | String! | The name/title of the product. |
| price | Float | Product price in US dollars, for example |
| priceCents | Int | Product price in cents, for example |
| imagesrequired | [String!]! | Array of image URLs for the product. The first image will be used as the featured image. |
| sourcerequired | String! | Where the product comes from, for example |
| purchaseUrlrequired | String! | Product page URL where RevSend will buy the item. |
| shortenTitle | Boolean | 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. |
| saveToFavorites | Boolean | 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. |
Result returned after successfully importing a product.
| Field | Type | Description |
|---|---|---|
| giftId | ID! | The created PhysicalGift ID. Use this ID to add the gift to campaigns or create orders. |
| productId | ID! | ID of the created product. |
| variantId | ID! | The default ProductVariant ID. |
| title | String! | The final title (may be shortened if shortenTitle was true). |
| priceCents | Int! | Final gift price in cents. |
| imageUrl | String | The URL of the featured image, if available. |
| variants | [ProductImportVariantResult!]! | Created variants. Includes the default variant when none were supplied. |
| Field | Type | Description |
|---|---|---|
| titlerequired | String! | Variant title shown to the sender/recipient (e.g. "M" or "Medium / Navy"). |
| price | Float | Variant price in dollars. Defaults to the product price. |
| optionValues | JSON | Option map, for example |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| title | String! |
Represents a product variant.
| Field | Type | Description |
|---|---|---|
| id | ID! | Globally unique identifier. |
| price | Int! | Price, in cents |
| images | [Image!] | A list of images associated with this product variant |
| title | String | The title of the product variant |
| available | Boolean! | False when the variant is no longer sold. Past orders can still reference it. |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| org | Org | |
| String | ||
| name | String! | |
| orgName | String |
| Field | Type | Description |
|---|---|---|
| String | ||
| namerequired | String! | |
| orgName | String |
| Value | Description |
|---|---|
| ADMIN | |
| USER |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| name | String! | |
| isAdmin | Boolean! |
| Field | Type | Description |
|---|---|---|
| id | ID! | |
| name | String! | |
| String! | ||
| role | Role! | |
| budget | Budget | |
| teams | [UserTeams] | |
| status | UserStatus! | |
| budgetReminderEnabled | Boolean | |
| shippingUpdatesEnabled | Boolean | |
| notificationSettings | NotificationSettings | |
| bookingLink | String | |
| jobTitle | String | |
| phone | String | |
| createdAt | DateTime | |
| lastActive | DateTime |
| Value | Description |
|---|---|
| ACTIVE | |
| INACTIVE | |
| INVITED |
| Field | Type | Description |
|---|---|---|
| userId | String! | |
| teamId | String! | |
| name | String! | |
| isAdmin | Boolean! |
| Field | Type | Description |
|---|---|---|
| urlrequired | String! | |
| sourcerequired | IntegrationPartners! | Label for the tool that registered the webhook. It does not change delivery; any value works. |
| typerequired | WebhookTypes! |
| Field | Type | Description |
|---|---|---|
| id | String! |
| Field | Type | Description |
|---|---|---|
| idrequired | String! |
| Field | Type | Description |
|---|---|---|
| order | OrderSampleOrder! | |
| recipient | OrderSampleRecipient! | |
| sender | OrderSampleSender! |
| Value | Description |
|---|---|
| ORDER_STATUS_UPDATE | |
| ORDER_CREATE |
