RevSend MCP Server
Research recipients, pick gifts and send them from Claude, ChatGPT or any MCP client. 33 tools at https://mcp.revsend.com/mcp
Overview
The RevSend MCP server lets Claude, ChatGPT and other MCP clients research recipients, pick gifts and send physical gifts, handwritten notes and digital gift cards on your behalf. Every action runs as you, uses your budget and follows your role in your RevSend organization.
Quick start
Add the server to any MCP client that supports remote servers over streamable HTTP:
https://mcp.revsend.com/mcp
{
"mcpServers": {
"revsend": {
"url": "https://mcp.revsend.com/mcp",
"transport": "http"
}
}
}
The first time you connect, you sign in with your work email through Google, Microsoft or Okta. Step-by-step setup for Claude and Codex is in the RevSend app under Integrations.
Things to ask
- "Research Jordan Lee, VP Sales at Acme, and suggest three gifts under $100."
- "Send Jordan the second one with a handwritten note: Congrats on the launch!"
- "Send a gift link to sarah@example.com for the Q4 Thank You campaign so she can pick her own gift."
- "Send $25 coffee gift cards to john@acme.com, maria@acme.com and tom@acme.com with the message: Coffee's on us!"
- "What's the status of the gift I sent to michael@example.com last week?"
- "How much budget do I have left?"
Authentication
The server uses OAuth 2.1 with dynamic client registration. Your MCP client handles the flow:
- The client connects to
https://mcp.revsend.com/mcpand reads the OAuth metadata. - You pick Google, Microsoft or Okta and sign in with your work email.
- The client exchanges the authorization code for access and refresh tokens and uses them on every request.
| Endpoint | Purpose |
|---|---|
/.well-known/oauth-protected-resource | Protected resource metadata |
/.well-known/oauth-authorization-server | Authorization server metadata |
/register | Dynamic client registration |
/authorize | Authorization |
/token | Token and refresh |
/revoke | Token revocation |
Scopes and roles
| Scope | Allows |
|---|---|
mcp:read | Research, recommendations, catalog, campaigns, orders and budget. |
mcp:write | Send gifts, import products and manage campaigns. |
Some tools also need a role in your organization. Bulk sends and campaign changes need team admin or org admin; each tool below shows what it needs.
Errors
When a tool cannot run, it returns a result with isError: true and a JSON body with an error code and a message your assistant can show you.
| Code | Meaning |
|---|---|
INSUFFICIENT_SCOPE | The connection was not granted the scope this tool needs. Reconnect and approve both scopes. |
ADMIN_REQUIRED | The tool needs a team admin or org admin role. |
FORBIDDEN | You do not have access to this resource. |
{
"error": "INSUFFICIENT_SCOPE",
"message": "Tool 'create_digital_order' requires one of these scopes: mcp:write"
}
Other problems, such as a missing campaign or not enough budget, come back as a plain message explaining what to change.
Recipient addresses are used only to ship gifts. Tools never return them.
Find the right gift
Research a recipient, get recommendations and search the catalog or the web.
Look up a person from public information and return gifting signals such as hobbies, schools, teams and food preferences. Needs a full name plus company, an email address or a LinkedIn URL; with less, it asks for more detail instead of searching. Signals are inferred, so confirm anything important.
| Parameter | Type | Description |
|---|---|---|
| query | string | Free-text recipient lookup, e.g. "Sarah Johnson VP of Marketing at Acme" or a LinkedIn URL. A first name alone is not enough, include company, email, or LinkedIn. Thin identity will not run recipient research. |
| name | string | Full name of the recipient. Do not pass a first name alone. |
| firstName | string | Recipient first name. Also pass lastName plus company, email, or LinkedIn. |
| lastName | string | Recipient last name |
| string | Work email, used for recipient research identity match | |
| company | string | Current company name. Required with a full name unless email or LinkedIn is provided. |
| companyDomain | string | Company website domain, e.g. acme.com |
| title | string | Job title |
| location | string | City or region |
| linkedinUrl | string | LinkedIn profile URL |
| additionalContext | string | Extra context that is not identity (team, occasion, known hobbies) |
Recommend gifts from the RevSend catalog for a recipient profile: occasion, relationship, personas, interests, things to avoid and an all-in budget. Use list_occasions and list_personas for valid slugs.
| Parameter | Type | Description |
|---|---|---|
| occasionSlug | string | The gifting occasion slug. Use list_occasions to see valid slugs with names/tones. Omit if no specific occasion applies. |
| personaSlugs | string[] | Up to 3 recipient persona slugs that best describe the recipient (role and lifestyle). Use list_personas to see valid slugs with names. |
| interests | string[] | Recipient interests and hobbies gathered from the user, e.g. ["coffee", "hiking", "baking"] |
| vibeHints | string[] | Desired gift vibes/styles, e.g. ["cozy", "luxurious", "practical"] |
| avoidContexts | string[] | Contexts to avoid for this recipient, e.g. ["alcohol", "religious"] |
| relationshipContext | "professional" | "personal" default: "professional" | Relationship between sender and recipient |
| budgetMinCentsrequired | integer | Minimum budget in cents (e.g., 2500 for $25) |
| budgetMaxCentsrequired | integer | Maximum all-in budget in cents including estimated shipping (e.g., 10000 for $100). Catalog search reserves shipping so recommendations stay within this total. |
| limit | integer default: 10 | Maximum number of recommendations to return |
Find gifts for a person in one step. Searches the RevSend catalog first, then the web when the catalog misses their interests, and runs recipient research when you give enough to identify them. Budgets include estimated shipping.
| Parameter | Type | Description |
|---|---|---|
| recipientName | string | Full name of the recipient. A first name alone will not trigger research, also pass company, email, or LinkedIn, or ask the user first. |
| firstName | string | Recipient first name. Not enough on its own for public research. |
| lastName | string | Recipient last name |
| string | Work email for identity lookup | |
| company | string | Current company name. Required with a full name unless email or LinkedIn is provided. |
| companyDomain | string | Company website domain |
| title | string | Job title |
| location | string | City or region |
| linkedinUrl | string | LinkedIn profile URL |
| recipientInfo | string | Free-text description of the recipient, occasion, budget, and known interests. Used when structured fields are incomplete. |
| interests | string[] | Known interests and hobbies, e.g. ["golf", "coffee"]. When omitted and identity is strong, public research may fill these in. |
| occasionSlug | string | The gifting occasion slug. Use list_occasions to see valid slugs. Omit if no specific occasion applies. |
| personaSlugs | string[] | Up to 3 recipient persona slugs. Use list_personas to see valid slugs. |
| vibeHints | string[] | Desired gift vibes/styles, e.g. ["cozy", "luxurious", "practical"] |
| avoidContexts | string[] | Contexts to avoid, e.g. ["alcohol", "religious"] |
| relationshipContext | "professional" | "personal" default: "professional" | Relationship between sender and recipient |
| budgetMinCents | integer | Minimum budget in cents (e.g., 2500 for $25). Parsed from recipientInfo when omitted. |
| budgetMaxCents | integer | Maximum all-in budget in cents including estimated shipping (e.g., 10000 for $100). Defaults to $150 when omitted. Recommendations and later imports stay within this total. |
| limit | integer default: 5 | Maximum number of recommendations to return |
| skipResearch | boolean default: false | When true, skip recipient research / public-web recipient research even if identity is present. Research is already skipped when identity is too thin (first name only, or name without company/email/LinkedIn). |
Search for gift ideas by keyword and return ranked products with links and estimated prices. Budgets include estimated shipping.
| Parameter | Type | Description |
|---|---|---|
| queryrequired | string | Gift search query including audience or occasion context |
| budgetMaxCents | integer | Optional maximum all-in budget in cents including estimated shipping. |
| budgetMinCents | integer | Optional minimum target price in cents (USD). |
| limit | integer default: 5 | Maximum number of product candidates to return |
List physical gifts your organization can already send, with the gift IDs that order tools need.
| Parameter | Type | Description |
|---|---|---|
| search | string | Search term for gift title |
| limit | integer default: 20 | Maximum number of results |
List gift occasions (slug, name, tone) to use with recommend_gifts.
No parameters.
List recipient personas (slug, name, kind) to use with recommend_gifts.
No parameters.
Add a product from any online store to your catalog so it can be sent. Estimated shipping is added to the gift price.
| Parameter | Type | Description |
|---|---|---|
| titlerequired | string | Product name/title |
| price | number | Product price in dollars (e.g., 29.99). One of price or priceCents is required. |
| priceCents | integer | Product price in cents (e.g., 2999). One of price or priceCents is required. |
| imagesrequired | string[] | Array of product image URLs |
| sourcerequired | string | Source vendor (e.g., "amazon", "target") |
| purchaseUrlrequired | string | URL where the product can be purchased |
| shortenTitle | boolean | Clean up long retail titles (default: true) |
| shippingCostCents | integer | Custom shipping cost in cents. When omitted, RevSend charges estimated shipping. If budgetMaxCents is set, shipping is reduced so gift + shipping stays within that all-in budget. |
| budgetMaxCents | integer | Optional all-in budget in cents including estimated shipping (e.g. 7500 for $75). When set, shipping is adjusted so the charged total does not exceed this amount. The gift price itself must still be at or under this budget. |
| saveToFavorites | boolean | Save to user favorites after import |
| meta | object | Selected product options for this specific order (e.g., {"size": "Large", "color": "Navy Blue", "engraving": "John Smith"}). Provide the actual chosen values, not lists of available options. |
| variants | object[] | Product variants such as sizes or colors. When two or more are provided they are created in so the sender or recipient can choose one. |
| variantTitle | string | When sending immediately after import, the variant title to select (e.g. "M"). |
| letRecipientChooseVariant | boolean | When true, import all variants and let the recipient choose size/color on the claim page. |
Send physical gifts
Ship gifts from the RevSend warehouse in branded packaging, with an optional handwritten note.
Send a physical gift, or a gift box of several gifts. With an address, the order ships right away. Without one, the recipient gets a link to enter their address and, if you offered several gifts, pick one (or set sendAll to ship them all). Supports handwritten notes, brand templates, custom email sender name and reply-to, and extra people to notify about status.
| Parameter | Type | Description |
|---|---|---|
| giftId | string | The ID of the physical gift to send. Required unless giftIds is provided. |
| giftIds | string[] | Multiple gift IDs for a gift box. Use with sendAll=true to send every gift in one delivery, or sendAll=false so the recipient chooses one. |
| sendAll | boolean | When sending multiple gifts, true sends all in one delivery. False lets the recipient choose one gift. Defaults to true for a single gift and false for a gift box. |
| brandTemplateId | string | Optional brand template ID to apply to the order. Must belong to your organization. Defaults to org default/first template. |
| variantId | string | The product variant ID (if gift has multiple options). Applied to giftId, or the first gift in giftIds. |
| variantTitle | string | Variant title/label to match on the gift (e.g. "M"). Applied to giftId, or the first gift in giftIds. |
| letRecipientChooseVariant | boolean | When true, do not pre-select a variant so the recipient can choose size/color on the claim page. Applied to giftId, or the first gift in giftIds. |
| giftVariantChoices | object[] | Per-gift variant choices for multi-item gift boxes. |
| recipientNamerequired | string | Full name of the recipient |
| recipientOrgName | string | Organization name of the recipient |
| recipientEmail | string | Email address of the recipient |
| message | string | Personal message printed on the handwritten note. The line limit follows notePaperSize and defaults to the 5×7 card (10 lines, about 45–55 characters per full line). Notes over the limit are rejected. Supports variables like {{recipient_first_name}} and {{sender_first_name}}. |
| notePaperSize | "CARD_5X7" | "A6" | "A5" | "A4" | "A3" | "B5" | "B4" | "US_LETTER" | "ENVELOPE_10" | Sheet the handwritten note is plotted on. The line limit follows this size and defaults to the 5×7 card (10 lines, about 45–55 characters per full line). |
| description | string | Short order description shown on the orders list (e.g. "Bundle for Vince"). Defaults to a bundle summary for multi-gift orders. |
| address | object | Shipping address (if known upfront) |
| includeHandwritten | boolean default: false | Include a handwritten note (+$3.95). When true, every note is checked against the line limit for notePaperSize (10 lines on the default 5×7 card) before the order is sent. |
| sendEmail | boolean default: false | Send a branded gift email (sender company logo and colors) with a claim link. Requires recipientEmail. |
| headlineTemplate | string | Email subject line (used when sendEmail is true) |
| messageTemplate | string | Custom email body message template (used when sendEmail is true). Unless redemptionPageMessage is provided, also shown on the gift redemption page. Supports variables: {{recipient_first_name}}, {{sender_first_name}}, etc. |
| redemptionPageMessage | string | Custom message shown on the gift redemption page, when it should differ from the email message (messageTemplate). Supports variables like {{recipient_first_name}} and {{sender_first_name}}. |
| emailButtonText | string | Custom text for the call-to-action button in the email (default: "View Reward") |
| includeClaimUrl | boolean default: false | When true, include the recipient claim URL in the response (only when the recipient must submit their address) |
| hideContents | boolean default: false | Hide the package contents from the recipient on the redemption page, showing a "Surprise!" message instead of the gift details |
| hideExpirationWarning | boolean default: false | When true, hide the expiration warning on the recipient redemption page |
| giftClaimText | string | Custom text for the step 1 button on the recipient claim screen (default: "Open Your Gift") |
| notificationEmails | string[] | Additional email addresses that will receive order status notifications (shipped, delivered, viewed, etc.) for this order |
| emailFromName | string | Custom display name for the From header of the recipient email (e.g., "Acme Rewards Team"). The From address is always your connected email account; only the name shown in the recipient's inbox changes. |
| emailReplyTo | string | Custom Reply-To email address for the recipient email. Replies go to your connected email account when omitted. |
Buy a product from any online store and send it as a gift in one step. Pass budgetMaxCents when you have a budget so the gift and shipping stay within it.
| Parameter | Type | Description |
|---|---|---|
| titlerequired | string | Product name/title |
| price | number | Product price in dollars (e.g., 29.99). One of price or priceCents is required. |
| priceCents | integer | Product price in cents (e.g., 2999). One of price or priceCents is required. |
| imagesrequired | string[] | Array of product image URLs |
| sourcerequired | string | Source vendor (e.g., "amazon", "target") |
| purchaseUrlrequired | string | URL where the product can be purchased |
| shippingCostCents | integer | Custom shipping cost in cents. When omitted, RevSend charges estimated shipping. If budgetMaxCents is set, shipping is reduced so gift + shipping (+ handwritten note if included) stays within that all-in budget. |
| budgetMaxCents | integer | Optional all-in budget in cents including estimated shipping and a handwritten note when includeHandwritten is true (e.g. 7500 for $75). When set, shipping is adjusted so the charged total does not exceed this amount. |
| meta | object | Selected product options for this specific order (e.g., {"size": "Large", "color": "Navy Blue", "engraving": "John Smith"}). Provide the actual chosen values, not lists of available options. |
| variants | object[] | Product variants such as sizes or colors. When two or more are provided they are created in so the sender or recipient can choose one. |
| variantTitle | string | Variant title/label to select after import (e.g. "M"). Ignored when letRecipientChooseVariant is true. |
| letRecipientChooseVariant | boolean | When true, do not pre-select a variant so the recipient can choose size/color on the claim page. |
| brandTemplateId | string | Optional brand template ID to apply to the order. Must belong to your organization. Defaults to org default/first template. |
| recipientNamerequired | string | Full name of the recipient |
| recipientOrgName | string | Organization name of the recipient |
| recipientEmail | string | Email address of the recipient |
| message | string | Personal message printed on the handwritten note. The line limit follows notePaperSize and defaults to the 5×7 card (10 lines, about 45–55 characters per full line). Notes over the limit are rejected. Supports variables like {{recipient_first_name}} and {{sender_first_name}}. |
| notePaperSize | "CARD_5X7" | "A6" | "A5" | "A4" | "A3" | "B5" | "B4" | "US_LETTER" | "ENVELOPE_10" | Sheet the handwritten note is plotted on. The line limit follows this size and defaults to the 5×7 card (10 lines, about 45–55 characters per full line). |
| description | string | Short order description shown on the orders list (e.g. "Bundle for Vince"). Defaults to a bundle summary for multi-gift orders. |
| address | object | Shipping address (if known upfront) |
| includeHandwritten | boolean default: false | Include a handwritten note (+$3.95). When true, every note is checked against the line limit for notePaperSize (10 lines on the default 5×7 card) before the order is sent. |
| sendEmail | boolean default: false | Send a branded gift email (sender company logo and colors) with a claim link. Requires recipientEmail. |
| headlineTemplate | string | Email subject line (used when sendEmail is true) |
| messageTemplate | string | Custom email body message template (used when sendEmail is true). Unless redemptionPageMessage is provided, also shown on the gift redemption page. Supports variables: {{recipient_first_name}}, {{sender_first_name}}, etc. |
| redemptionPageMessage | string | Custom message shown on the gift redemption page, when it should differ from the email message (messageTemplate). Supports variables like {{recipient_first_name}} and {{sender_first_name}}. |
| emailButtonText | string | Custom text for the call-to-action button in the email (default: "View Reward") |
| includeClaimUrl | boolean default: false | When true, include the recipient claim URL in the response (only when the recipient must submit their address) |
| hideContents | boolean default: false | Hide the package contents from the recipient on the redemption page, showing a "Surprise!" message instead of the gift details |
| hideExpirationWarning | boolean default: false | When true, hide the expiration warning on the recipient redemption page |
| giftClaimText | string | Custom text for the step 1 button on the recipient claim screen (default: "Open Your Gift") |
| notificationEmails | string[] | Additional email addresses that will receive order status notifications (shipped, delivered, viewed, etc.) for this order |
| emailFromName | string | Custom display name for the From header of the recipient email (e.g., "Acme Rewards Team"). The From address is always your connected email account; only the name shown in the recipient's inbox changes. |
| emailReplyTo | string | Custom Reply-To email address for the recipient email. Replies go to your connected email account when omitted. |
Queue a physical gift to many recipients at once. Up to 100 rows inline; for up to 25,000, upload the rows with create_bulk_order_upload_url first. Track progress with get_physical_order_batch.
| Parameter | Type | Description |
|---|---|---|
| campaignId | string | Campaign ID to use for gifts |
| bulkCampaignId | string | Existing bulk campaign to attach this physical order batch to. The batch is added to that campaign. |
| bulkCampaignName | string | Creates a bulk campaign with this name and attaches the batch. When bulkCampaignId is also set, renames that campaign instead. |
| orderDescription | string | Description stored on every physical order. Defaults to the bulk campaign name, then the physical campaign name. |
| brandTemplateId | string | Optional brand template ID to apply to all orders in this batch. Must belong to your organization. Defaults to campaign template when campaignId is provided, then org default/first template. |
| giftQuantities | object[] | Direct gift selection (alternative to campaignId) |
| sourceS3Key | string | Upload key from create_bulk_order_upload_url. Use this instead of inline orders for more than 100 recipients (up to 25000). |
| orders | object[] | Inline recipients, max 100. For larger batches upload JSON to sourceS3Key. |
| createHotlinks | boolean default: false | Create a QR hotlink for every order. Each order must include redirectUri, including rows in an uploaded source file. |
| messageTemplate | string | Digital message shown to the recipient on the claim page (before submitting their address) and used as the address collection email body. Supports variables like {{recipient_first_name}} and {{sender_first_name}}. |
| redemptionPageMessage | string | Custom message shown on the claim page, when it should differ from the address collection email body (messageTemplate). Applied to every order in this batch. Supports variables like {{recipient_first_name}} and {{sender_first_name}}. |
| headlineTemplate | string | Subject line for address collection emails |
| emailButtonText | string | Custom text for the call-to-action button in address collection emails (default: "View Reward") |
| sendEmail | boolean default: true | Send branded RevSend email address-collection emails to orders without a mailing address. Claim links are always returned as a fallback. |
| includeHandWritten | boolean default: false | Include handwritten notes. When true, every recipient note is checked against the line limit for notePaperSize (10 lines on the default 5×7 card) before the batch is charged or queued. |
| notePaperSize | "CARD_5X7" | "A6" | "A5" | "A4" | "A3" | "B5" | "B4" | "US_LETTER" | "ENVELOPE_10" | Sheet for every note in the batch unless a row sets its own size. Omit to copy the campaign size, then the 5×7 card. |
| sendAsCrmOwner | boolean | Show the gift as coming from the CRM contact owner. Defaults to the campaign setting when omitted. |
| sendAll | boolean default: false | Send all gifts immediately |
| chargeNow | boolean default: true | Charge and deduct budget immediately. Set to false to create orders now and defer billing for later. |
| updateCrm | boolean default: false | Create a CRM task (HubSpot/Salesforce, whichever the org has connected) for each order in the batch |
| hideContents | boolean default: false | Hide the package contents from recipients on the redemption page, showing a "Surprise!" message instead of the gift details. Applied to every order in this batch. |
| hideExpirationWarning | boolean default: false | When true, hide the expiration warning on the recipient redemption page |
| giftClaimText | string | Custom text for the step 1 button on the recipient claim screen, applied to every order in this batch (default: "Open Your Gift") |
| notificationEmails | string[] | Additional email addresses that will receive order status notifications (shipped, delivered, viewed, etc.) for every order in this batch |
| emailFromName | string | Custom display name for the From header of the recipient email (e.g., "Acme Rewards Team"). The From address is always your connected email account; only the name shown in the recipient's inbox changes. |
| emailReplyTo | string | Custom Reply-To email address for the recipient email. Replies go to your connected email account when omitted. |
Get a short-lived URL to upload a large bulk order (up to 25,000 rows). PUT { "orders": [...] } to it, then pass the returned key to create_physical_order_bulk.
No parameters.
Read the status and a page of orders for a bulk physical batch. Status moves from queued to ingesting, placing and complete.
| Parameter | Type | Description |
|---|---|---|
| batchIdrequired | string | Physical order batch id returned by create_physical_order_bulk |
| skip | integer default: 0 | |
| take | integer default: 25 |
Send digital gift cards
Send gift cards by email or by a link you share yourself.
Send one digital gift card from a campaign by email or as a link you share. Supports a separate claim-page message, custom email sender name and reply-to, and extra people to notify. Logs a CRM task when HubSpot or Salesforce is connected.
| Parameter | Type | Description |
|---|---|---|
| campaignIdrequired | string | The ID of the digital campaign to use |
| brandTemplateId | string | Optional brand template ID to apply to the order. Must belong to your organization. Defaults to campaign template, then org default/first template. |
| recipientEmail | string | Email address of the recipient. Required when deliveryMethod is EMAIL. Omit for LINK delivery. |
| recipientNamerequired | string | Full name of the recipient |
| recipientOrgName | string | Organization name of the recipient |
| salesForceAccountId | string | Salesforce Account Id (001…) for this recipient. When set, the CRM task is logged on this account and no contact search is run. |
| salesForceContactId | string | Salesforce Contact Id (003…) for this recipient. When set, the CRM task is logged on this contact. |
| salesForceLeadId | string | Salesforce Lead Id (00Q…) for this recipient. When set, the CRM task is logged on this lead. |
| hubSpotContactId | string | HubSpot Contact Id for this recipient. When set, the CRM task is logged on this contact and no contact search is run. |
| hubSpotCompanyId | string | HubSpot Company Id for this recipient. When set, the CRM task is logged on this company and no contact search is run. |
| messageTemplate | string | Custom message to include with the gift. Used as the email body and, unless redemptionPageMessage is provided, also shown on the gift redemption page. |
| redemptionPageMessage | string | Custom message shown on the gift redemption page, when it should differ from the email message (messageTemplate). Supports variables like {{recipient_first_name}} and {{sender_first_name}}. |
| headlineTemplate | string | Email subject line (required for EMAIL delivery) |
| emailButtonText | string | Custom text for the call-to-action button in the email (default: "View Reward") |
| deliveryMethod | "EMAIL" | "LINK" default: "LINK" | How to deliver the gift - EMAIL sends a branded gift email, LINK returns a shareable URL |
| includeClaimUrl | boolean default: false | When true, include the recipient claim URL in the response |
| hideExpirationWarning | boolean default: false | When true, hide the expiration warning on the recipient redemption page |
| giftClaimText | string | Custom text for the step 1 button on the recipient claim screen (default: "Open Your Gift") |
| notificationEmails | string[] | Additional email addresses that will receive order status notifications (delivered, viewed, redeemed, etc.) for this order |
| emailFromName | string | Custom display name for the From header of the recipient email (e.g., "Acme Rewards Team"). The From address is always your connected email account; only the name shown in the recipient's inbox changes. |
| emailReplyTo | string | Custom Reply-To email address for the recipient email. Replies go to your connected email account when omitted. |
Send a digital campaign to up to 2,000 recipients in one call, by email or as links. Can log a CRM task per recipient when HubSpot or Salesforce is connected.
| Parameter | Type | Description |
|---|---|---|
| campaignIdrequired | string | The ID of the digital campaign to use |
| brandTemplateId | string | Optional brand template ID to apply to all orders in this batch. Must belong to your organization. Defaults to campaign template, then org default/first template. |
| recipientsrequired | object[] | List of recipients (max 2000). LINK delivery can omit email when a Salesforce Account, Contact, or Lead Id, or a HubSpot Contact or Company Id, is set. |
| messageTemplate | string | Custom message template to include with the gift. Used as the email body and, unless redemptionPageMessage is provided, also shown on the gift redemption page. |
| redemptionPageMessage | string | Custom message shown on the gift redemption page, when it should differ from the email message (messageTemplate). Applied to every order in this batch. Supports variables like {{recipient_first_name}} and {{sender_first_name}}. |
| headlineTemplate | string | Email subject line (required for EMAIL delivery) |
| emailButtonText | string | Custom text for the call-to-action button in the email (default: "View Reward") |
| deliveryMethod | "EMAIL" | "LINK" default: "LINK" | How to deliver the gift - EMAIL sends a branded gift email, LINK returns a shareable URL |
| updateCrm | boolean default: false | Create a CRM task (HubSpot/Salesforce, whichever the org has connected) for each order in the batch |
| hideExpirationWarning | boolean default: false | When true, hide the expiration warning on the recipient redemption page |
| giftClaimText | string | Custom text for the step 1 button on the recipient claim screen, applied to every order in this batch (default: "Open Your Gift") |
| notificationEmails | string[] | Additional email addresses that will receive order status notifications (shipped, delivered, viewed, etc.) for every order in this batch |
| emailFromName | string | Custom display name for the From header of the recipient email (e.g., "Acme Rewards Team"). The From address is always your connected email account; only the name shown in the recipient's inbox changes. |
| emailReplyTo | string | Custom Reply-To email address for the recipient email. Replies go to your connected email account when omitted. |
Campaigns
Plan, create and update reusable campaigns. Creating and updating campaigns needs team admin or org admin access.
Get a checklist and suggested settings before you create or update a campaign. Makes no changes.
| Parameter | Type | Description |
|---|---|---|
| intent | "create" | "update" default: "create" | Whether you plan to create or update a campaign |
| campaignTyperequired | "digital" | "physical" | Campaign type |
| campaignId | string | Required when intent is update |
| name | string | Campaign name |
| rewardValue | number | Digital reward value in dollars |
| currencyId | string | Digital campaign currency code |
| giftOptions | object[] | Physical campaign gift options |
| messageTemplate | string | Default digital message template |
| headlineTemplate | string | Default headline template for digital campaign emails |
| physicalNoteTemplate | string | Default physical note template. The line limit follows notePaperSize and defaults to the 5×7 card (10 lines). |
| notePaperSize | "CARD_5X7" | "A6" | "A5" | "A4" | "A3" | "B5" | "B4" | "US_LETTER" | "ENVELOPE_10" | Sheet the handwritten note is plotted on. The line limit follows this size and defaults to the 5×7 card (10 lines, about 45–55 characters per full line). |
| allowCharity | boolean | Digital campaign allowCharity setting |
| requireEmail | boolean | Digital campaign requireEmail setting |
| private | boolean | Campaign visibility setting |
| isOneOff | boolean | Campaign one-off setting |
| isArchived | boolean | Archive state for update planning |
| brandTemplateId | string | Optional org brand template ID |
| notes | string | Additional planning notes or business context |
List physical or digital campaigns you can send from.
| Parameter | Type | Description |
|---|---|---|
| typerequired | "digital" | "physical" | Type of campaigns to list |
| limit | integer default: 20 | Maximum number of results |
Create a physical gift campaign with its gift options, message templates and settings.
| Parameter | Type | Description |
|---|---|---|
| namerequired | string | Campaign name |
| giftOptionsrequired | object[] | Gift options available in this campaign |
| messageTemplate | string | Default digital message template |
| physicalNoteTemplate | string | Default physical note template. The line limit follows notePaperSize and defaults to the 5×7 card (10 lines). |
| notePaperSize | "CARD_5X7" | "A6" | "A5" | "A4" | "A3" | "B5" | "B4" | "US_LETTER" | "ENVELOPE_10" | Sheet the handwritten note is plotted on. The line limit follows this size and defaults to the 5×7 card (10 lines, about 45–55 characters per full line). |
| isOneOff | boolean default: false | Whether this campaign is intended as a one-off |
| private | boolean default: false | Whether this campaign is private to the creator |
| brandTemplateId | string | Optional org brand template ID |
Update a physical campaign, including its gift options.
| Parameter | Type | Description |
|---|---|---|
| campaignIdrequired | string | Physical campaign ID to update |
| name | string | Updated campaign name |
| giftOptions | object[] | Updated gift options |
| replaceGiftOptions | boolean default: true | Replace existing gift options when giftOptions is provided |
| messageTemplate | string | Updated digital message template |
| physicalNoteTemplate | string | Updated physical note template. The line limit follows notePaperSize and defaults to the 5×7 card (10 lines). |
| notePaperSize | "CARD_5X7" | "A6" | "A5" | "A4" | "A3" | "B5" | "B4" | "US_LETTER" | "ENVELOPE_10" | Sheet the handwritten note is plotted on. The line limit follows this size and defaults to the 5×7 card (10 lines, about 45–55 characters per full line). |
| isOneOff | boolean | Updated isOneOff setting |
| isArchived | boolean | Archive/unarchive this campaign |
| private | boolean | Updated private setting |
| brandTemplateId | string | Updated org brand template ID (null clears it) |
Create a digital gift card campaign.
| Parameter | Type | Description |
|---|---|---|
| namerequired | string | Campaign name |
| rewardValuerequired | number | Reward value in dollars (e.g., 25.00) |
| currencyId | string default: "USD" | Currency code |
| messageTemplate | string | Default message template for campaign orders |
| headlineTemplate | string | Default headline template for campaign orders |
| allowCharity | boolean default: true | Whether recipients may direct rewards to charity |
| requireEmail | boolean default: true | Whether recipient email is required |
| isOneOff | boolean default: false | Whether this campaign is intended as a one-off |
| private | boolean default: false | Whether this campaign is private to the creator |
| brandTemplateId | string | Optional org brand template ID |
Update a digital gift card campaign.
| Parameter | Type | Description |
|---|---|---|
| campaignIdrequired | string | Digital campaign ID to update |
| name | string | Updated campaign name |
| rewardValue | number | Updated reward value in dollars |
| currencyId | string | Updated currency code |
| messageTemplate | string | Updated default message template |
| headlineTemplate | string | Updated default headline template |
| allowCharity | boolean | Updated allowCharity setting |
| requireEmail | boolean | Updated requireEmail setting |
| isOneOff | boolean | Updated isOneOff setting |
| isArchived | boolean | Archive/unarchive this campaign |
| private | boolean | Updated private setting |
| brandTemplateId | string | Updated org brand template ID (null clears it) |
Orders and account
Check order status, history and budget.
List your physical gift orders. Filter by all, pending, shipped, delivered or cancelled.
| Parameter | Type | Description |
|---|---|---|
| limit | integer default: 20 | Maximum number of results |
| status | "all" | "pending" | "shipped" | "delivered" | "cancelled" default: "all" | Filter by order status |
Get one physical order by ID or reference number, including tracking when available.
| Parameter | Type | Description |
|---|---|---|
| identifierrequired | string | Order ID or reference number |
List your digital gift card orders. Filter by all, pending, redeemed or cancelled.
| Parameter | Type | Description |
|---|---|---|
| limit | integer default: 20 | Maximum number of results |
| status | "all" | "pending" | "redeemed" | "cancelled" default: "all" | Filter by order status |
Get one digital order by ID or reference number.
| Parameter | Type | Description |
|---|---|---|
| identifierrequired | string | Order ID or reference number |
Show your available budget.
No parameters.
Show your RevSend profile, organization, teams and role.
No parameters.
Organization reporting
Organization admins can report on the whole organization. Team leads can report on the teams they lead. Billing is for organization admins.
List people you can report on, with role, team, budget, remaining balance, spend, and gift activity. Organization admins see everyone. Team leads see the teams they lead.
| Parameter | Type | Description |
|---|---|---|
| teamId | string | Limit to this team. Team leads can only pass a team they lead. |
| teamName | string | Limit to a team with this name. Team leads can only pass a team they lead. |
| spentAfter | string | Include invoiced spend and funnel counts on or after this date (YYYY-MM-DD or ISO datetime). Spend uses the invoice date. Funnel counts use the send date. |
| spentBefore | string | Include invoiced spend and funnel counts on or before this date, inclusive. |
| limit | integer default: 100 | Page size. Maximum 500. |
| cursor | string | nextCursor from the previous page. |
List every gift in your reporting scope, with sender, recipient, company, cost, send date, status, and shipped, delivered, claimed, and scanned times.
| Parameter | Type | Description |
|---|---|---|
| teamId | string | Limit to this team. Team leads can only pass a team they lead. |
| teamName | string | Limit to a team with this name. Team leads can only pass a team they lead. |
| sentAfter | string | Include gifts sent on or after this date (YYYY-MM-DD or ISO datetime). |
| sentBefore | string | Include gifts sent on or before this date, inclusive. |
| userId | string | Limit to gifts sent by this user id. |
| userEmail | string | Limit to gifts sent by this email address. |
| status | "CANCELLED" | "DELIVERED" | "NOT_DELIVERED" | "SHIPPED" | "PROCESSING" | "ADDRESS_REQUESTED" | "REDEEMED" | Limit to this gift status. |
| type | "DIGITAL" | "PHYSICAL" | Limit to digital gift cards or physical gifts. |
| search | string | Match sender name or email, recipient name or email, company, gift label, or campaign. |
| limit | integer default: 100 | Page size. Maximum 500. |
| cursor | string | nextCursor from the previous page. |
Summarize members, spend, and gift activity for each team you can see.
| Parameter | Type | Description |
|---|---|---|
| teamId | string | Limit to this team. Team leads can only pass a team they lead. |
| teamName | string | Limit to a team with this name. Team leads can only pass a team they lead. |
| spentAfter | string | Include invoiced spend and funnel counts on or after this date (YYYY-MM-DD or ISO datetime). Spend uses the invoice date. Funnel counts use the send date. |
| spentBefore | string | Include invoiced spend and funnel counts on or before this date, inclusive. |
Summarize gifts sent, cost, and activity for each campaign in your reporting scope.
| Parameter | Type | Description |
|---|---|---|
| teamId | string | Limit to this team. Team leads can only pass a team they lead. |
| teamName | string | Limit to a team with this name. Team leads can only pass a team they lead. |
| sentAfter | string | Include gifts sent on or after this date (YYYY-MM-DD or ISO datetime). |
| sentBefore | string | Include gifts sent on or before this date, inclusive. |
Download users, gifts, teams, and campaigns as a spreadsheet or as rows. Gift results continue on the next page until there is no further page.
| Parameter | Type | Description |
|---|---|---|
| format | "csv" | "json" default: "csv" | csv for Excel, or json for rows. |
| teamId | string | Limit to this team. Team leads can only pass a team they lead. |
| teamName | string | Limit to a team with this name. Team leads can only pass a team they lead. |
| sentAfter | string | Include gifts sent on or after this date (YYYY-MM-DD or ISO datetime). |
| sentBefore | string | Include gifts sent on or before this date, inclusive. |
| userId | string | Limit to gifts sent by this user id. |
| userEmail | string | Limit to gifts sent by this email address. |
| status | "CANCELLED" | "DELIVERED" | "NOT_DELIVERED" | "SHIPPED" | "PROCESSING" | "ADDRESS_REQUESTED" | "REDEEMED" | Limit to this gift status. |
| type | "DIGITAL" | "PHYSICAL" | Limit to digital gift cards or physical gifts. |
| search | string | Match sender name or email, recipient name or email, company, gift label, or campaign. |
| spentAfter | string | Include invoiced spend and funnel counts on or after this date (YYYY-MM-DD or ISO datetime). Spend uses the invoice date. Funnel counts use the send date. |
| spentBefore | string | Include invoiced spend and funnel counts on or before this date, inclusive. |
| limit | integer default: 500 | Gift rows per page. Maximum 2000. Follow nextCursor until it is null. |
| cursor | string | nextCursor from the previous page. User, team, and campaign tables are on the first page only. |
Show account credit, recent fund and subscription charges, and billable seats. Organization admins only.
No parameters.
