Reachdesk API

The Reachdesk REST API enables programmatic triggering of gift campaigns and sending of physical gifts, branded merchandise, and digital rewards. Authenticated via API tokens generated in the Reachdesk platform settings, the API integrates with CRM and marketing automation workflows to automate gifting as part of sales and customer success programs. The contract is published as OpenAPI 3.1 and declares 9 operations across sends, contacts, transactions, organization and GDPR data-subject requests, based at https://app.reachdesk.com/api/v2.

OpenAPI Specification

reachdesk-api-openapi.yml Raw ↑
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