openapi: 3.1.0
info:
title: Reachdesk API
version: '1.0'
servers:
- url: https://app.reachdesk.com/api/v2
components:
securitySchemes:
sec0:
type: apiKey
name: Authorization
in: header
x-bearer-format: bearer
security:
- sec0: []
paths:
/campaigns/{id}/trigger:
post:
summary: Trigger Campaign
description: Trigger a gift send from a campaign.
operationId: trigger-campaign
parameters:
- name: id
in: path
description: ID of the campaign being triggered
schema:
type: integer
format: int32
required: true
requestBody:
content:
application/json:
schema:
type: object
properties:
request_id:
type: string
description: Random uniquely identifier generated for each request
source:
type: string
description: Name of the source of the trigger
recipient:
type: object
description: Information about the recipient
properties:
provider:
type: string
description: Source of the contact (optional)
enum:
- salesforce
- msdynamics
- hubspotcrm
- salesloft
- influitive
- marketo
- hibob
- outreach
provider_contact_id:
type: string
description: ID of the contact in the source system (optional)
provider_contact_type:
type: string
description: Type of contact in the source system (optional)
enum:
- contact
- lead
- employee
first_name:
type: string
description: First name of the recipient
last_name:
type: string
description: Last name of the recipient
email:
type: string
description: Email of the recipient
company_name:
type: string
description: Name of the recipient's company
street_address_1:
type: string
description: First line of the recipient's address (only used in physical sends)
street_address_2:
type: string
description: Second line of the recipient's address (only used in physical sends)
city:
type: string
description: Recipient's city
state:
type: string
description: Recipient's state
zipcode:
type: string
description: Recipient's zipcode/post code
country:
type: string
description: Recipient's 2-letter country code (ISO 3166), e.g. US
phone_number:
type: string
description: Recipient's phone number
role:
type: string
description: Recipient's role
tax_id:
type: string
description: Recipient's Tax Id
sender:
type: string
description: Email of the sender (must be a user in the platform)
payment_currency:
type: string
description: What currency should be used when paying for the send (by default, it will
use the currency set in the campaign)
enum:
- AUD
- CAD
- DKK
- EUR
- GBP
- INR
- NOK
- SEK
- USD
items:
type: array
description: (Only for bundles) List of quantities for the different items in the campaign
- not mandatory, defaults to the minimum in each item
items:
properties:
sku:
type: string
description: SKU of item that the quantity will be defined (must be within the
campaign)
quantity:
type: integer
description: Desired quantity (must be within the range set in the campaign, defaults
to the minimum)
format: int32
type: object
approved:
type: string
description: If "true", the send will be automatically processed and, if invalid, an
error will be returned by the API. If "false", the send will be created in a pending
state for manual review; if "auto", it will try to approve automatically, unless invalid,
in which case it will be created as pending for manual review
enum:
- 'true'
- 'false'
- auto
payment_wallet_type:
type: string
description: This determines what type of payment wallet to use for this gift send
default: User
enum:
- User
- Team
team_name:
type: string
description: Specify which team wallet will be used as the payment wallet for this gift
send. Set to the sender’s team name assigned to the team wallet. If empty, and payment_wallet_type
is “Team”, it will be the sender’s default team by default.
confirm_address:
type: boolean
description: A confirmation email will be sent before the recipient can claim the gift
default: true
bundle_handwritten_note:
type: string
description: Text that will appear on the handwritten note if you are sending a bundle
campaign
packaging_notes:
type: string
description: Text that will appear on the handwritten note if you are sending a bundle
campaign
custom_attributes:
type: array
description: List of custom attributes that can be used on campaign gift notes, options
and gift emails. Add the name inside curly brackets when adding to campaigns (e.g.
{{custom_gift_note}})
items:
properties:
name:
type: string
description: Use underscores instead of spaces (e.g. custom_gift_note)
value:
type: string
description: Value of the property (e.g. sent with love)
type: object
send_method:
type: string
description: 'Delivery method. email (default) emails the gift to the recipient; link
returns a shareable claim_url in the response instead of emailing. Allowed values:
email, link.'
enum:
- email
- link
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 55,\n \"type\": \"gift_card\",\n \"status\": \"processed\",\n\
\t\"payment_currency\": \"USD\",\n\t\"payment_wallet_id\": 1234,\n\t\"packaging_notes\"\
: \"Handle with care\",\n\t\"custom_attributes\": [\n {\n \"name\": \"team\"\
,\n\t\t\t\"value\": \"Polaris\"\n\t\t}\n ],\n\t\"created_by_user\": {\n \"first_name\"\
: \"Jane\",\n \"last_name\": \"Doe\",\n \"email\": \"jane.doe@reachdesk.com\"\
\n },\n\t\"claim_url\": null,\n \"recipient\": {\n \"first_name\": \"John\",\n\
\ \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"company_name\"\
: \"Example Ltd.\",\n\t\t\"phone_number\": \"+1 123 123 123\",\n \"street_address_1\"\
: \"45 Rockefeller Plaza\",\n \"street_address_2\": \"5th Floor\",\n \"city\"\
: \"New York\",\n \"state\": \"NY\",\n \"zipcode\": \"10111\",\n \"country\"\
: \"US\",\n\t\t\"tax_id\": \"123456789\"\n },\n \"sender\": {\n \"first_name\"\
: \"Jane\",\n \"last_name\": \"Doe\",\n \"email\": \"jane.doe@reachdesk.com\"\
\n },\n \"gift_card\": {\n \"amount\": 15.0,\n \"currency\": \"USD\"\n }\n\
}"
schema:
type: object
properties:
id:
type: integer
example: 55
default: 0
type:
type: string
example: gift_card
status:
type: string
example: processed
payment_currency:
type: string
example: USD
payment_wallet_id:
type: integer
example: 1234
default: 0
packaging_notes:
type: string
example: Handle with care
custom_attributes:
type: array
items:
type: object
properties:
name:
type: string
example: team
value:
type: string
example: Polaris
created_by_user:
type: object
properties:
first_name:
type: string
example: Jane
last_name:
type: string
example: Doe
email:
type: string
example: jane.doe@reachdesk.com
claim_url: {}
recipient:
type: object
properties:
first_name:
type: string
example: John
last_name:
type: string
example: Doe
email:
type: string
example: john.doe@example.com
company_name:
type: string
example: Example Ltd.
phone_number:
type: string
example: +1 123 123 123
street_address_1:
type: string
example: 45 Rockefeller Plaza
street_address_2:
type: string
example: 5th Floor
city:
type: string
example: New York
state:
type: string
example: NY
zipcode:
type: string
example: '10111'
country:
type: string
example: US
tax_id:
type: string
example: '123456789'
sender:
type: object
properties:
first_name:
type: string
example: Jane
last_name:
type: string
example: Doe
email:
type: string
example: jane.doe@reachdesk.com
gift_card:
type: object
properties:
amount:
type: integer
example: 15
default: 0
currency:
type: string
example: USD
deprecated: false
/organization:
get:
summary: Get Organization
description: Retrieve the basic information about the Organization associated to the given API Token.
operationId: get-organization
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": \"570\",\n \"name\": \"Acne Inc.\"\n}"
schema:
type: object
properties:
id:
type: string
example: '570'
name:
type: string
example: Acne Inc.
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
/gdpr/requests:
post:
summary: Create GDPR Request
description: Create a GDPR Request for erasing or exporting subject data.
operationId: create-gdpr-request
requestBody:
content:
application/json:
schema:
type: object
properties:
request:
type: object
properties:
request_type:
type: string
enum:
- erase_subject
- export_subject
subject:
type: string
description: Email address of the subject
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 1,\n \"request_type\": \"erase_subject\",\n \"status\": \"pending\"\
,\n \"subject\": \"john.doe@mail.com\",\n \"created_at\": \"2023-06-09T17:53\"\n\
}"
schema:
type: object
properties:
id:
type: integer
example: 1
default: 0
request_type:
type: string
example: erase_subject
status:
type: string
example: pending
subject:
type: string
example: john.doe@mail.com
created_at:
type: string
example: 2023-06-09T17:53
deprecated: false
/gdpr/requests/{id}:
get:
summary: Get GDPR Request
description: Get the information and status about an existing GDPR Request (Coming Soon)
operationId: get-gdpr-request
parameters:
- name: id
in: path
schema:
type: integer
format: int32
required: true
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 1,\n \"request_type\": \"erase_subject\",\n \"status\": \"pending\"\
,\n \"subject\": \"john.doe@mail.com\",\n \"created_at\": \"2023-06-09T17:53\"\n\
}"
schema:
type: object
properties:
id:
type: integer
example: 1
default: 0
request_type:
type: string
example: erase_subject
status:
type: string
example: pending
subject:
type: string
example: john.doe@mail.com
created_at:
type: string
example: 2023-06-09T17:53
deprecated: false
/contacts:
get:
summary: List Contacts
description: Get a list of contacts within your organization.
operationId: list-contacts
parameters:
- name: account_name
in: query
description: Filter results by contact's company name
schema:
type: string
- name: page
in: query
schema:
type: integer
format: int32
default: 1
- name: per_page
in: query
schema:
type: integer
format: int32
default: 25
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n\t\"data\": [\n\t\t{\n\t\t\t\"id\": 86,\n\t\t\t\"name\": \"Ashley Eapen\"\
,\n\t\t\t\"first_name\": \"Ashley\",\n\t\t\t\"last_name\": \"Eapen\",\n\t\t\t\"email\"\
: \"ashley.eapen@reachdesk.com\",\n\t\t\t\"job_title\": \"Account Executive\",\n\t\
\t\t\"account_name\": \"Reachdesk\",\n\t\t\t\"country\": \"United States\"\n\t\t},\n\
\t\t{\n\t\t\t\"id\": 80,\n\t\t\t\"name\": \"Bill Costello\",\n\t\t\t\"first_name\"\
: \"Bill\",\n\t\t\t\"last_name\": \"Costello\",\n\t\t\t\"email\": \"billy.costello@reachdesk.com\"\
,\n\t\t\t\"job_title\": \"Associate Account Executive\",\n\t\t\t\"account_name\":\
\ \"Reachdesk\",\n\t\t\t\"country\": \"United Kingdom\"\n\t\t},\n\t\t{\n\t\t\t\"id\"\
: 20,\n\t\t\t\"name\": \"Jeffrey Vanzant\",\n\t\t\t\"first_name\": \"Jeffrey\",\n\t\
\t\t\"last_name\": \"Vanzant\",\n\t\t\t\"email\": \"jeffrey.vanzant@reachdesk.com\"\
,\n\t\t\t\"job_title\": \"Senior Manager, Revenue Operations\",\n\t\t\t\"account_name\"\
: \"Reachdesk\",\n\t\t\t\"country\": \"Portugal\"\n\t\t},\n\t\t{\n\t\t\t\"id\": 11,\n\
\t\t\t\"name\": \"Katherine Clementi\",\n\t\t\t\"first_name\": \"Katherine\",\n\t\t\
\t\"last_name\": \"Clementi\",\n\t\t\t\"email\": \"katherine.clementi@reachdesk.com\"\
,\n\t\t\t\"job_title\": \"Customer Success Manager\",\n\t\t\t\"account_name\": \"\
reachdesk\",\n\t\t\t\"country\": \"Brazil\"\n\t\t}\n\t],\n\t\"pagination\": {\n\t\t\
\"page\": 1,\n\t\t\"per_page\": 25,\n\t\t\"total_pages\": 1,\n\t\t\"total_records\"\
: 4\n\t}\n}"
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
example: 86
default: 0
name:
type: string
example: Ashley Eapen
first_name:
type: string
example: Ashley
last_name:
type: string
example: Eapen
email:
type: string
example: ashley.eapen@reachdesk.com
job_title:
type: string
example: Account Executive
account_name:
type: string
example: Reachdesk
country:
type: string
example: United States
pagination:
type: object
properties:
page:
type: integer
example: 1
default: 0
per_page:
type: integer
example: 25
default: 0
total_pages:
type: integer
example: 1
default: 0
total_records:
type: integer
example: 4
default: 0
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
/sends?start_date={start_date}&end_date={end_date}:
get:
summary: List Sends
description: Get a list of Sends within your Organization
operationId: list-sends
parameters:
- name: start_date
in: query
description: 'Filter sends from the given date onwards. Format: YYYY-MM-DD (optional)'
schema:
type: string
format: date
- name: end_date
in: query
description: 'Return sends created before the given date. Format: YYYY-MM-DD (optional)'
schema:
type: string
format: date
- name: page
in: query
description: Pagination value
schema:
type: integer
format: int32
default: 1
- name: per_page
in: query
description: number of results per page
schema:
type: integer
format: int32
default: 25
- name: start_updated_date
in: query
description: 'Filter sends from first update date (depends on end_updated_date). Format: YYYY-MM-DD
(optional)'
schema:
type: string
format: date
- name: end_updated_date
in: query
description: 'Filter sends from the last update date (Depends on start_updated_date). Format:
YYYY-MM-DD (optional)'
schema:
type: string
format: date
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"data\": [\n \n {\n \"id\": 4,\n \"type\": \"bundle\"\
,\n \"email\": \"uilton.jose@gmail.com\",\n \"status\": \"pending\",\n \
\ \"latest_action\": null,\n \"processed_at\": null,\n \"created_at\"\
: \"2025-08-06T16:56:11.364Z\",\n \"gift_name\": null,\n \"send_updated_date\"\
: \"2025-08-06T16:56:11.364Z\",\n \"campaign\": {\n \"id\": 12,\n \
\ \"name\": \"Badjurance\"\n },\n \"cost\": {\n \"amount\": 3.73,\n\
\ \"original_amount\": 3.0,\n \"currency\": \"USD\",\n \"original_currency\"\
: \"GBP\",\n \"display\": \"3.73 USD\",\n \"original_display\": \"3.00\
\ GBP\",\n \"state\": \"estimated\"\n },\n \"team_name\": null,\n\
\ \"order\": {\n \"id\": 123,\n \"order_number\": \"1234567890\"\
,\n \"status\": 350,\n \"shipped_at\": \"2025-12-22T11:38:20.944Z\"\
,\n \"tracking_code\": \"1234567890\",\n \"tracking_url\": \"https://www.google.com\"\
,\n \"shipment\": {\n \"id\": 123,\n \"provider_id\": 123,\n\
\ \"provider_sub_status_message\": \"Sub status message\",\n \"\
courier\": \"courier\",\n \"tracking_number\": \"1234567890\",\n \
\ \"tracking_url\": \"https://www.google.com\"\n }\n },\n \"total_items_cost\"\
: 100.0,\n \"engage_items\": [\n {\n \"name\": \"My Cuppa\",\n\
\ \"quantity\": 1\n },\n {\n \"name\": \"Chocolate\
\ box\",\n \"quantity\": 1\n }\n ]\n }\n ],\n \"pagination\"\
: {\n \"page\": 1,\n \"per_page\": 25,\n \"total_pages\": 1,\n \"total_records\"\
: 4\n }\n}"
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
example: 4
default: 0
type:
type: string
example: bundle
email:
type: string
example: uilton.jose@gmail.com
status:
type: string
example: pending
latest_action: {}
processed_at: {}
created_at:
type: string
example: '2025-08-06T16:56:11.364Z'
gift_name: {}
send_updated_date:
type: string
example: '2025-08-06T16:56:11.364Z'
campaign:
type: object
properties:
id:
type: integer
example: 12
default: 0
name:
type: string
example: Badjurance
cost:
type: object
properties:
amount:
type: number
example: 3.73
default: 0
original_amount:
type: integer
example: 3
default: 0
currency:
type: string
example: USD
original_currency:
type: string
example: GBP
display:
type: string
example: 3.73 USD
original_display:
type: string
example: 3.00 GBP
state:
type: string
example: estimated
team_name: {}
order:
type: object
properties:
id:
type: integer
example: 123
default: 0
order_number:
type: string
example: '1234567890'
status:
type: integer
example: 350
default: 0
shipped_at:
type: string
example: '2025-12-22T11:38:20.944Z'
tracking_code:
type: string
example: '1234567890'
tracking_url:
type: string
example: https://www.google.com
shipment:
type: object
properties:
id:
type: integer
example: 123
default: 0
provider_id:
type: integer
example: 123
default: 0
provider_sub_status_message:
type: string
example: Sub status message
courier:
type: string
example: courier
tracking_number:
type: string
example: '1234567890'
tracking_url:
type: string
example: https://www.google.com
total_items_cost:
type: integer
example: 100
default: 0
engage_items:
type: array
items:
type: object
properties:
name:
type: string
example: My Cuppa
quantity:
type: integer
example: 1
default: 0
pagination:
type: object
properties:
page:
type: integer
example: 1
default: 0
per_page:
type: integer
example: 25
default: 0
total_pages:
type: integer
example: 1
default: 0
total_records:
type: integer
example: 4
default: 0
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
'401':
description: '401'
content:
text/plain:
examples:
Result:
value: ''
deprecated: false
/transactions:
get:
summary: List Transactions
description: Get a list of transactions within your organization.
operationId: list-transa
# --- truncated at 32 KB (56 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/reachdesk/refs/heads/main/openapi/reachdesk-api-openapi.yml