Vessel CRM API (v1, legacy)

The first-generation Vessel CRM API, published under /crm/* with the vessel-api-token header and an accessToken query/body parameter. Superseded by the v2 unified CRM API under /api/unifications/crm and marked as hidden/legacy in Vessel's own documentation navigation, but still published as a full OpenAPI 3.1 contract with search, batch and custom-field operations the v2 surface does not carry. Published by Vessel as OpenAPI 3.1.0 with 93 operations.

OpenAPI Specification

vessel-crm-v1-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: CRM API Reference
  version: "2.0"
  summary: API
servers:
  - url: "https://api.vessel.dev"
paths:
  /crm/users:
    get:
      summary: Get All Users
      tags:
        - users
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  users:
                    type: array
                    items:
                      $ref: "#/components/schemas/User"
                  nextPageCursor:
                    type: string
              examples:
                example-1:
                  value:
                    users:
                      - id: v.user.56f653659ea9524b9e0fb0ba67e6f8a0
                        nativeId: "12"
                        firstName: Micheal
                        lastName: Scott
                        email: micheal@dundermifflin.com
                        createdTime: "2019-08-24T14:15:22Z"
                        modifiedTime: "2019-08-24T14:15:22Z"
                        additional: {}
                    nextPageCursor: string
      operationId: get-all-crm-users
      parameters:
        - schema:
            type: string
          in: query
          name: accessToken
          required: true
          description: The token for the customer's CRM account. This was generated when they connected their account.
        - schema:
            type: string
          in: query
          name: cursor
        - schema:
            type: number
          in: query
          name: limit
          description: The number of records to return per page.
        - schema:
            type: boolean
          in: query
          name: allFields
          description: Returns all fields including non-unifiable and custom fields under the "additional" property in the response
        - schema:
            type: boolean
          in: query
          name: archived
          description: Set to true to include archived users in the response. Defaults to false.
      description: Retrieve all Users
    parameters: []
  /crm/users/associations:
    post:
      summary: Associations for Users
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                objectType:
                  type: string
                  enum: [account, contact, deal, note, email, event, task, call]
                ids:
                  type: array
                  items:
                    type: string
                accessToken:
                  type: string
                cursor:
                  type: string
      operationId: get-all-crm-users-associations
      description: Associations for given User Ids
  /crm/users/search:
    post:
      summary: Search Users
      tags:
        - users
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                filters:
                  type: object
                  properties:
                    id:
                      $ref: "#/components/schemas/StringFilter"
                    nativeId:
                      $ref: "#/components/schemas/StringFilter"
                    firstName:
                      $ref: "#/components/schemas/StringFilter"
                    lastName:
                      $ref: "#/components/schemas/StringFilter"
                    email:
                      $ref: "#/components/schemas/StringFilter"
                    createdTime:
                      $ref: "#/components/schemas/DateFilter"
                    modifiedTime:
                      $ref: "#/components/schemas/DateFilter"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  users:
                    type: array
                    items:
                      $ref: "#/components/schemas/User"
                  nextPageCursor:
                    type: string
                title: responseBody
              examples:
                example-1:
                  value:
                    users:
                      - id: v.user.56f653659ea9524b9e0fb0ba67e6f8a0
                        nativeId: "12"
                        firstName: Micheal
                        lastName: Scott
                        email: micheal@dundermifflin.com
                        createdTime: "2019-08-24T14:15:22Z"
                        modifiedTime: "2019-08-24T14:15:22Z"
                        additional: {}
                    nextPageCursor: string
      operationId: search-crm-users
      description: Search all Users using filters
      parameters:
        - $ref: '#/components/parameters/accessToken'
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/allFields'
  /crm/user:
    get:
      summary: Get User
      tags:
        - users
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  user:
                    $ref: "#/components/schemas/User"
              examples:
                example-1:
                  value:
                    user:
                      id: v.user.56f653659ea9524b9e0fb0ba67e6f8a0
                      nativeId: "12"
                      firstName: Micheal
                      lastName: Scott
                      email: micheal@dundermifflin.com
                      createdTime: "2019-08-24T14:15:22Z"
                      modifiedTime: "2019-08-24T14:15:22Z"
                      additional: {}
      operationId: get-one-crm-user
      parameters:
        - schema:
            type: string
          in: query
          name: accessToken
          description: The token for the customer's CRM account. This was generated when they connected their account.
          required: true
        - schema:
            type: string
          in: query
          name: id
          required: true
        - schema:
            type: boolean
          in: query
          name: allFields
          description: Returns all fields including non-unifiable and custom fields under the "additional" property in the response
      description: Retrieve a single User by Id
    parameters: []
  /crm/user/details:
    get:
      summary: Get User Details
      tags:
        - users
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  fields:
                    type: array
                    items:
                      $ref: "#/components/schemas/Field"
                  nextPageCursor:
                    type: string
              examples:
                example-1:
                  value:
                    fields:
                      - key: firstName
                        name: First name
                        type: string
                        options: null
                        isArray: false
                        custom: false
                        universal: true
                        required: false
                        creatable: true
                        updatable: true
                    nextPageCursor: string
      operationId: get-details-crm-user
      description: |-
        Get details about all users.
        Details include the type, possible values, and other meta data about the fields.
      parameters:
        - schema:
            type: string
          in: query
          name: accessToken
          description: "The token for the customer's CRM account. This was generated when they connected their account."
          required: true
        - schema:
            type: string
          in: query
          name: cursor
        - schema:
            type: boolean
          in: query
          name: allFields
          description: "Returns details about native fields."
  /crm/user/batch:
    get:
      summary: Get Batch Users
      tags:
        - users
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  users:
                    type: array
                    items:
                      $ref: "#/components/schemas/User"
                  invalidIds:
                    $ref: "#/components/schemas/InvalidIds"
              examples:
                example-1:
                  value:
                    users:
                      - id: v.user.56f653659ea9524b9e0fb0ba67e6f8a0
                        nativeId: "12"
                        firstName: Micheal
                        lastName: Scott
                        email: micheal@dundermifflin.com
                        createdTime: "2019-08-24T14:15:22Z"
                        modifiedTime: "2019-08-24T14:15:22Z"
                        additional: {}
      operationId: get-batch-crm-user
      parameters:
        - schema:
            type: string
          in: query
          name: accessToken
          required: true
          description: The token for the customer's CRM account. This was generated when they connected their account.
        - schema:
            type: string
          in: query
          name: ids
          description: Comma separated list of User Id's.
        - schema:
            type: boolean
          in: query
          name: allFields
          description: Returns all fields including non-unifiable and custom fields under the "additional" property in the response
      description: Retrieve Users by a set of Id's
    parameters: []
  /crm/contacts:
    get:
      summary: Get All Contacts
      tags:
        - contacts
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  contacts:
                    type: array
                    items:
                      $ref: "#/components/schemas/Contact"
                  nextPageCursor:
                    type: string
              examples:
                example-1:
                  value:
                    contacts:
                      - id: v.contact.e5f32d4fd2115220bd20a2ccf81210ec
                        nativeId: "23"
                        email: tom@bluecross.com
                        firstName: Tom
                        lastName: Smith
                        jobTitle: Director of Operations
                        phone: "2101128833"
                        mobilePhone: "2106541111"
                        createdTime: "2019-08-24T14:15:22Z"
                        modifiedTime: "2019-08-24T14:15:22Z"
                        associations:
                          accountIds:
                            - v.account.0dcb45e051315a6ea63b0f16e73689d9
                          dealIds:
                            - v.deal.497fb529e6805351b5dc8057c74a4a52
                          leadIds:
                            - v.lead.d08f345ace24509e911a0ea8e3d2203c
                          noteIds:
                            - v.note.006b4db16b6b50c981a174b02753c390
                          taskIds:
                            - v.task.2322707bbc41577d9806400e2daa25de
                          eventIds:
                            - v.event.0000d2e83d6c5d52a61f2fb860666477
                          eventAttendeeIds:
                            - v.attendee.f63c1bd7215f5150b332d31d9509752f
                          emailIds:
                            - v.email.3ab3a9562af957228c1019127e3c81e1
                          ownerUserId: v.user.56f653659ea9524b9e0fb0ba67e6f8a0
                        additional: {}
                    nextPageCursor: string
      operationId: get-all-crm-contacts
      parameters:
        - schema:
            type: string
          in: query
          name: accessToken
          description: The token for the customer's CRM account. This was generated when they connected their account.
          required: true
        - schema:
            type: string
          in: query
          name: cursor
        - schema:
            type: number
          in: query
          name: limit
          description: The number of records to return per page.
        - schema:
            type: boolean
          in: query
          name: allFields
          description: Returns all fields including non-unifiable and custom fields under the "additional" property in the response
      description: Retrieve all Contacts
    parameters: []
  /crm/contacts/search:
    post:
      summary: Search Contacts
      tags:
        - contacts
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                filters:
                  type: object
                  properties:
                    id:
                      $ref: "#/components/schemas/StringFilter"
                    nativeId:
                      $ref: "#/components/schemas/StringFilter"
                    firstName:
                      $ref: "#/components/schemas/StringFilter"
                    lastName:
                      $ref: "#/components/schemas/StringFilter"
                    jobTitle:
                      $ref: "#/components/schemas/StringFilter"
                    email:
                      $ref: "#/components/schemas/StringFilter"
                    phone:
                      $ref: "#/components/schemas/StringFilter"
                    mobilePhone:
                      $ref: "#/components/schemas/StringFilter"
                    createdTime:
                      $ref: "#/components/schemas/DateFilter"
                    modifiedTime:
                      $ref: "#/components/schemas/DateFilter"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  contacts:
                    type: array
                    items:
                      $ref: "#/components/schemas/Contact"
                  nextPageCursor:
                    type: string
                title: responseBody
              examples:
                example-1:
                  value:
                    contacts:
                      - id: v.contact.e5f32d4fd2115220bd20a2ccf81210ec
                        nativeId: "23"
                        email: tom@bluecross.com
                        firstName: Tom
                        lastName: Smith
                        jobTitle: Director of Operations
                        phone: "2101128833"
                        mobilePhone: "2106541111"
                        createdTime: "2019-08-24T14:15:22Z"
                        modifiedTime: "2019-08-24T14:15:22Z"
                        associations:
                          accountIds:
                            - v.account.0dcb45e051315a6ea63b0f16e73689d9
                          dealIds:
                            - v.deal.497fb529e6805351b5dc8057c74a4a52
                          leadIds:
                            - v.lead.d08f345ace24509e911a0ea8e3d2203c
                          noteIds:
                            - v.note.006b4db16b6b50c981a174b02753c390
                          taskIds:
                            - v.task.2322707bbc41577d9806400e2daa25de
                          eventIds:
                            - v.event.0000d2e83d6c5d52a61f2fb860666477
                          eventAttendeeIds:
                            - v.attendee.f63c1bd7215f5150b332d31d9509752f
                          emailIds:
                            - v.email.3ab3a9562af957228c1019127e3c81e1
                          callIds:
                            - v.call.1222707bbc415ee4806400e2daa25ffa
                          ownerUserId: v.user.56f653659ea9524b9e0fb0ba67e6f8a0
                        additional: {}
                    nextPageCursor: string
      operationId: search-crm-contacts
      description: Search all Contacts using filters
      parameters:
        - $ref: '#/components/parameters/accessToken'
        - $ref: '#/components/parameters/cursor'
        - $ref: '#/components/parameters/limit'
        - $ref: '#/components/parameters/allFields'
  /crm/contact:
    get:
      summary: Get Contact
      tags:
        - contacts
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  contact:
                    $ref: "#/components/schemas/Contact"
              examples:
                example-1:
                  value:
                    contact:
                      id: v.contact.e5f32d4fd2115220bd20a2ccf81210ec
                      nativeId: "23"
                      email: tom@bluecross.com
                      firstName: Tom
                      lastName: Smith
                      jobTitle: Director of Operations
                      phone: "2101128833"
                      mobilePhone: "2106541111"
                      createdTime: "2019-08-24T14:15:22Z"
                      modifiedTime: "2019-08-24T14:15:22Z"
                      associations:
                        accountIds:
                          - v.account.0dcb45e051315a6ea63b0f16e73689d9
                        dealIds:
                          - v.deal.497fb529e6805351b5dc8057c74a4a52
                        leadIds:
                          - v.lead.d08f345ace24509e911a0ea8e3d2203c
                        noteIds:
                          - v.note.006b4db16b6b50c981a174b02753c390
                        taskIds:
                          - v.task.2322707bbc41577d9806400e2daa25de
                        eventIds:
                          - v.event.0000d2e83d6c5d52a61f2fb860666477
                        eventAttendeeIds:
                          - v.attendee.f63c1bd7215f5150b332d31d9509752f
                        emailIds:
                            - v.email.3ab3a9562af957228c1019127e3c81e1
                        callIds:
                            - v.call.1222707bbc415ee4806400e2daa25ffa
                        ownerUserId: v.user.56f653659ea9524b9e0fb0ba67e6f8a0
                      additional: {}
      operationId: get-one-crm-contact
      parameters:
        - schema:
            type: string
          in: query
          name: accessToken
          description: The token for the customer's CRM account. This was generated when they connected their account.
          required: true
        - schema:
            type: string
          in: query
          name: id
          description: The id of the contact to get
        - schema:
            type: boolean
          in: query
          name: allFields
          description: Returns all fields including non-unifiable and custom fields under the "additional" property in the response
      description: "Retrieve a Contact by either Id or email. When both email and Id are included, Id will take priority."
    parameters: []
    post:
      summary: Create Contact
      tags:
        - contacts
      operationId: post-crm-contact
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  id:
                    type: string
              examples:
                example-1:
                  value:
                    id: "0"
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                accessToken:
                  type: string
                contact:
                  $ref: "#/components/schemas/ContactCreate"
              required:
                - accessToken
                - contact
            examples:
              example-1:
                value:
                  accessToken: string
                  contact:
                    email: tom@bluecross.com
                    firstName: Tom
                    lastName: Smith
                    jobTitle: Director of Operations
                    phone: "2101128833"
                    mobilePhone: "2106541111"
      description: Create a new contact.
    patch:
      summary: Update Contact
      tags:
        - contacts
      operationId: put-crm-contact
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                description: ""
                type: object
                x-examples:
                  example-1:
                    id: "0"
                properties:
                  id:
                    type: string
                required:
                  - id
              examples:
                example-1:
                  value:
                    id: "0"
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                accessToken:
                  type: string
                id:
                  type: string
                contact:
                  $ref: "#/components/schemas/ContactUpdate"
              required:
                - accessToken
                - id
                - contact
            examples:
              example-1:
                value:
                  accessToken: string
                  id: string
                  contact:
                    email: tom@bluecross.com
                    firstName: Tom
                    lastName: Smith
                    jobTitle: Director of Operations
                    phone: "2101128833"
                    mobilePhone: "2106541111"
          application/xml:
            schema:
              type: object
              properties: {}
        description: ""
      description: Update an existing Contact.
  /crm/contact/details:
    get:
      summary: Get Contact Details
      tags:
        - contacts
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  fields:
                    type: array
                    items:
                      $ref: "#/components/schemas/Field"
                  nextPageCursor:
                    type: string
              examples:
                example-1:
                  value:
                    fields:
                      - key: firstName
                        name: First name
                        type: string
                        options: null
                        isArray: false
                        custom: false
                        universal: true
                        required: false
                        creatable: true
                        updatable: true
                    nextPageCursor: string
      operationId: get-details-crm-contact
      description: |-
        Get details about all contacts.
        Details include the type, possible values, and other meta data about the fields.
      parameters:
        - schema:
            type: string
          in: query
          name: accessToken
          description: "The token for the customer's CRM account. This was generated when they connected their account."
          required: true
        - schema:
            type: string
          in: query
          name: cursor
        - schema:
            type: boolean
          in: query
          name: allFields
          description: "Returns details about native fields."
  /crm/contact/custom-field:
    post:
      summary: Create Contact Custom Field
      description: "Supported for Salesforce and HubSpot"
      tags:
        - contactCustomFields
      operationId: post-contact-custom-field
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                description: ""
                type: object
                x-examples:
                  example-1:
                    success: true
                properties:
                  key:
                    type: string
                    description: "The key used to access the custom field"
              examples:
                example-1:
                  value:
                    success: true
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                accessToken:
                  $ref: '#/components/parameters/accessToken'
                customField:
                  $ref: "#/components/schemas/CustomFieldCreate"
              required:
                - accessToken
                - customField
    patch:
      summary: Update Contact Custom Field
      description: "Supported for Salesforce and HubSpot"
      operationId: patch-contact-custom-field
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                description: ""
                type: object
                x-examples:
                  example-1:
                    success: true
                properties:
                  key:
                    type: string
                    description: "The key used to access the custom field"
              examples:
                example-1:
                  value:
                    success: true
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                accessToken:
                  $ref: '#/components/parameters/accessToken'
                customField:
                  $ref: "#/components/schemas/CustomFieldUpdate"
              required:
                - accessToken
                - customField
  /crm/contact/batch:
    get:
      summary: Get Batch Contacts
      tags:
        - contacts
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  contacts:
                    type: array
                    items:
                      $ref: "#/components/schemas/Contact"
                  invalidIds:
                    $ref: "#/components/schemas/InvalidIds"
              examples:
                example-1:
                  value:
                    contacts:
                      - id: v.contact.e5f32d4fd2115220bd20a2ccf81210ec
                        nativeId: "23"
                        email: tom@bluecross.com
                        firstName: Tom
                        lastName: Smith
                        jobTitle: Director of Operations
                        phone: "2101128833"
                        mobilePhone: "2106541111"
                        createdTime: "2019-08-24T14:15:22Z"
                        modifiedTime: "2019-08-24T14:15:22Z"
                        associations:
                          accountIds:
                            - v.account.0dcb45e051315a6ea63b0f16e73689d9
                          dealIds:
                            - v.deal.497fb529e6805351b5dc8057c74a4a52
                          leadIds:
                            - v.lead.d08f345ace24509e911a0ea8e3d2203c
                          noteIds:
                            - v.note.006b4db16b6b50c981a174b02753c390
                          taskIds:
                            - v.task.2322707bbc41577d9806400e2daa25de
                          eventIds:
                            - v.event.0000d2e83d6c5d52a61f2fb860666477
                          eventAttendeeIds:
                            - v.attendee.f63c1bd7215f5150b332d31d9509752f
                          emailIds:
                            - v.email.3ab3a9562af957228c1019127e3c81e1
                          callIds:
                            - v.call.1222707bbc415ee4806400e2daa25ffa
                        additional: {}
      operationId: get-batch-crm-contact
      parameters:
        - schema:
            type: string
          in: query
          name: accessToken
          required: true
          description: The token for the customer's CRM account. This was generated when they connected their account.
        - schema:
            type: string
          in: query
          name: ids
          description: Comma separated list of Contact Id's.
        - schema:
            type: boolean
          in: query
          name: allFields
          description: Returns all fields including non-unifiable and custom fields under the "additional" property in the response
      description: Retrieve Contacts by a set of Id's
    parameters: []
  /crm/deals:
    get:
      summary: Get All Deals
      tags:
        - deals
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  deals:
                    type: array
                    items:
                      $ref: "#/components/schemas/Deal"
                  nextPageCursor:
                    type: string
              examples:
                example-1:
                  value:
                    deals:
                      - id: v.deal.497fb529e6805351b5dc8057c74a4a52
                        nativeId: "84"
                        name: Blue Cross Deal
                        stage: demo
                        amount: 10000
                        closeDate: "2020-08-23T00:00:00Z"
                        probability: "0.4"
                        expectedRevenue: 4000
                        isWon: false
                        isClosed: false
                        modifiedTime: "2019-08-24T14:15:22Z"
                        createdTime: "2019-08-24T14:15:22Z"
                        associations:
                          contactIds:
                            - v.contact.e5f32d4fd2115220bd20a2ccf81210ec
                          accountIds:
                            - v.account.0dcb45e051315a6ea63b0f16e73689d9
                          noteIds:
                            - v.note.006b4db16b6b50c981a174b02753c390
                          taskIds:
                            - v.task.2322707bbc41577d9806400e2daa25de
                          eventIds:
                            - v.event.0000d2e83d6c5d52a61f2fb860666477
                          emailIds:
                            - v.email.3ab3a9562af957228c1019127e3c81e1
                          callIds:
                            - v.call.1222707bbc415ee4806400e2daa25ffa
                          ownerUserId: v.user.56f653659ea9524b9e0fb0ba67e6f8a0
                        additional: {}
                    nextPageCursor: string
      operationId: get-all-crm-deals
      parameters:
        - schema:
            type: string
          in: query
          name: accessToken
          description: The token for the customer's CRM account. This was generated when they connected their account.
          required: true
        - schema:
            type: string
          in: query
          name: cursor
        - schema:
            type: number
          in: query
          name: limit
          description: The number of records to return per page.
        - schema:
            type: boolean
          in: query
          name: allFields
          description: Returns all fields including non-unifiable and custom fields under the "additional" property in the response
      descrip

# --- truncated at 32 KB (261 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vessel/refs/heads/main/openapi/vessel-crm-v1-openapi.yml