Vessel CRM Unified API

The Vessel CRM Unified API (v2) normalizes CRM objects across Salesforce, HubSpot, Zoho, Pipedrive, Close, Freshsales, Microsoft Dynamics, Affinity and monday.com behind a single schema under /api/unifications/crm. It exposes list, find, batch-read, create, update and details operations for users, contacts, deals, accounts, leads, notes, tasks, events, emails, calls and lists. Published by Vessel as OpenAPI 3.1.0 with 69 operations.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/crm-unified-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

vessel-crm-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: CRM API Reference
  version: '2.0'
  summary: API
servers:
  - url: 'https://api.vessel.dev'
security:
  - VesselAPIToken: []
paths:
  /api/unifications/crm/info/find:
    post:
      summary: Get Connection Info
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  url:
                    type: string
                  orgId:
                    type: string
                  userId:
                    type: string
                  currency:
                    type: string
                    description: The default currency for the organization in ISO format
              examples:
                example-1:
                  value:
                    url: 'https://xyz.my.salesforce.com'
                    orgId: 'org_1234'
                    userId: 'user_1234'
                    currency: 'USD'
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      operationId: get-info
      description: Get Connection Info
    parameters: []
  /api/unifications/crm/users/list:
    post:
      summary: List 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: '12'
                        firstName: Micheal
                        lastName: Scott
                        email: micheal@dundermifflin.com
                        createdTime: '2019-08-24T14:15:22Z'
                        modifiedTime: '2019-08-24T14:15:22Z'
                    nextPageCursor: string
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                filters:
                  type: object
                  description: Requires enabling Synced-cache
                  properties:
                    id:
                      $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"
                include:
                  $ref: '#/components/schemas/IncludeFields'
                synced:
                  $ref: '#/components/schemas/SyncedCache'
                cursor:
                  type: string
            examples:
              example-1:
                value:
                  include:
                    $native: false
                  cursor: '123123'
      operationId: list-users
      description: List Users
    parameters: []
  /api/unifications/crm/users/batch-read:
    post:
      summary: Batch Read Users
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  users:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
              examples:
                example-1:
                  value:
                    users:
                      - id: '12'
                        firstName: Micheal
                        lastName: Scott
                        email: micheal@dundermifflin.com
                        createdTime: '2019-08-24T14:15:22Z'
                        modifiedTime: '2019-08-24T14:15:22Z'
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                include:
                  $ref: '#/components/schemas/IncludeFields'
                synced:
                  $ref: '#/components/schemas/SyncedCache'
                ids:
                  type: array
                  items:
                    type: string
            examples:
              example-1:
                value:
                  include:
                    $native: false
                  ids:
                    - '123123'
                    - '456456'
                    - '567567'
      operationId: batch-read-users
      description: |-
        Batch Read Users
        *CRM Caveats*:
          Not supported for HubSpot.
    parameters: []
  /api/unifications/crm/users/find:
    post:
      summary: Get User
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  user:
                    $ref: '#/components/schemas/User'
              examples:
                example-1:
                  value:
                    user:
                      id: '12'
                      firstName: Micheal
                      lastName: Scott
                      email: micheal@dundermifflin.com
                      createdTime: '2019-08-24T14:15:22Z'
                      modifiedTime: '2019-08-24T14:15:22Z'
      operationId: get-user
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                include:
                  $ref: '#/components/schemas/IncludeFields'
                synced:
                  $ref: '#/components/schemas/SyncedCache'
                id:
                  type: string
              required:
                - id
            examples:
              example-1:
                value:
                  id: '123123'
                  include:
                    $native: false
      description: Retrieve a single User by Id
    parameters: []
  /api/unifications/crm/users/details:
    post:
      summary: Get User Details
      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
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                include:
                  $ref: '#/components/schemas/IncludeFields'
                cursor:
                  type: string
            examples:
              example-1:
                value:
                  include:
                    $include: false
                  cursor: '123123'
      description: |-
        Get details about all users.
        Details include the type, possible values, and other meta data about the fields.
  /api/unifications/crm/contacts/list:
    post:
      summary: List 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: '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:
                            - 0dcb45e051315a6ea63b0f16e73689d9
                          dealIds:
                            - 497fb529e6805351b5dc8057c74a4a52
                          leadIds:
                            - d08f345ace24509e911a0ea8e3d2203c
                          ownerUserId: .56f653659ea9524b9e0fb0ba67e6f8a0
                    nextPageCursor: string
      operationId: list-contacts
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                include:
                  $ref: '#/components/schemas/IncludeFields'
                cursor:
                  type: string
                synced:
                  $ref: '#/components/schemas/SyncedCache'
                filters:
                  type: object
                  properties:
                    id:
                      $ref: "#/components/schemas/StringFilter"
                      description: Requires enabling Synced-cache
                    email:
                      type: object
                      properties:
                        equals:
                          type: string
                        in:
                          type: array
                          items:
                            type: string
                    firstName:
                      $ref: "#/components/schemas/StringFilter"
                      description: Requires enabling Synced-cache
                    lastName:
                      $ref: "#/components/schemas/StringFilter"
                      description: Requires enabling Synced-cache
                    jobTitle:
                      $ref: "#/components/schemas/StringFilter"
                      description: Requires enabling Synced-cache
                    phone:
                      $ref: "#/components/schemas/StringFilter"
                      description: Requires enabling Synced-cache
                    mobilePhone:
                      $ref: "#/components/schemas/StringFilter"
                      description: Requires enabling Synced-cache
                    createdTime:
                      $ref: "#/components/schemas/DateFilter"
                      description: Requires enabling Synced-cache
                    modifiedTime:
                      $ref: "#/components/schemas/DateFilter"
                      description: Requires enabling Synced-cache
                  description: If you are using filters for HubSpot, associations cannot be provided unless sync-cache is enabled.
                  required: email
                associations:
                  type: array
                  items:
                    type: string
                  description: |
                    Array of associations to include in the response.
                    Allowed values: accounts, deals, leads.
                    ownerUserId is always included in the response in the response.
            examples:
              example-1:
                value:
                  cursor: '123123'
                  filters:
                    email:
                      equals: 'michael@dunder.mifflin'
                  include:
                    $native: false
                  associations:
                    - accounts
                    - deals
      description: Retrieve all Contacts
    parameters: []
  /api/unifications/crm/contacts/batch-read:
    post:
      summary: Batch Read Contacts
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  contacts:
                    type: array
                    items:
                      $ref: '#/components/schemas/Contact'
              examples:
                example-1:
                  value:
                    contacts:
                      - id: '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:
                            - 0dcb45e051315a6ea63b0f16e73689d9
                          dealIds:
                            - 497fb529e6805351b5dc8057c74a4a52
                          leadIds:
                            - d08f345ace24509e911a0ea8e3d2203c
                          ownerUserId: .56f653659ea9524b9e0fb0ba67e6f8a0
      operationId: batch-read-contacts
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                include:
                  $ref: '#/components/schemas/IncludeFields'
                synced:
                  $ref: '#/components/schemas/SyncedCache'
                ids:
                  type: array
                  items:
                    type: string
            examples:
              example-1:
                value:
                  ids:
                    - '123123'
                    - '456456'
                    - '567567'
                  include:
                    $native: false
                  associations:
                    - accounts
                    - deals
      description: Fetch Contacts by Ids
    parameters: []
  /api/unifications/crm/contacts/find:
    post:
      summary: Get Contact
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  contact:
                    $ref: '#/components/schemas/Contact'
              examples:
                example-1:
                  value:
                    contact:
                      id: '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:
                          - 0dcb45e051315a6ea63b0f16e73689d9
                        dealIds:
                          - 497fb529e6805351b5dc8057c74a4a52
                        leadIds:
                          - d08f345ace24509e911a0ea8e3d2203c
                        ownerUserId: 56f653659ea9524b9e0fb0ba67e6f8a0
      operationId: get-contact
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                include:
                  $ref: '#/components/schemas/IncludeFields'
                synced:
                  $ref: '#/components/schemas/SyncedCache'
                id:
                  type: string
                associations:
                  type: array
                  items:
                    type: string
                  description: |
                    Array of associations to include in the response.
                    Allowed values: accounts, deals, leads.
                    ownerUserId is always included in the response.
              required:
                - id
            examples:
              example-1:
                value:
                  id: '123123'
                  include:
                    $native: false
                  associations:
                    - accounts
                    - deals
      description: 'Retrieve a Contact by either Id'
  /api/unifications/crm/contacts/create:
    post:
      summary: Create Contact
      operationId: create-contact
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  id:
                    type: string
              examples:
                example-1:
                  value:
                    id: '0'
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                contact:
                  $ref: '#/components/schemas/ContactCreate'
                synced:
                  $ref: '#/components/schemas/SyncedCache'
              required:
                - contact
            examples:
              example-1:
                value:
                  contact:
                    email: tom@bluecross.com
                    firstName: Tom
                    lastName: Smith
                    jobTitle: Director of Operations
                    phone: '2101128833'
                    mobilePhone: '2106541111'
                    $native: {}
      description: Create a new contact.
  /api/unifications/crm/contacts/update:
    post:
      summary: Update Contact
      operationId: update-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'
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                id:
                  type: string
                synced:
                  $ref: '#/components/schemas/SyncedCache'
                contact:
                  $ref: '#/components/schemas/ContactUpdate'
              required:
                - id
                - contact
            examples:
              example-1:
                value:
                  id: string
                  contact:
                    email: tom@bluecross.com
                    firstName: Tom
                    lastName: Smith
                    jobTitle: Director of Operations
                    phone: '2101128833'
                    mobilePhone: '2106541111'
                    $native: {}
          application/xml:
            schema:
              type: object
              properties: {}
        description: ''
      description: Update an existing Contact.
  /api/unifications/crm/contacts/details:
    post:
      summary: Get Contact Details
      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
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                include:
                  $ref: '#/components/schemas/IncludeFields'
                cursor:
                  type: string
            examples:
              example-1:
                value:
                  include:
                    $include: false
                  cursor: '123123'
      description: |-
        Get details about all contacts.
        Details include the type, possible values, and other meta data about the fields.
  /api/unifications/crm/deals/list:
    post:
      summary: List 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: '84'
                        name: Blue Cross Deal
                        stage: demo
                        amount: 10000
                        closeDate: '2020-08-23T00:00:00Z'
                        probability: '0.4'
                        expectedRevenue: 4000
                        isWon: false
                        isClosed: false
                        currency: USD
                        modifiedTime: '2019-08-24T14:15:22Z'
                        createdTime: '2019-08-24T14:15:22Z'
                        associations:
                          contactIds:
                            - e5f32d4fd2115220bd20a2ccf81210ec
                          accountIds:
                            - 0dcb45e051315a6ea63b0f16e73689d9
                          ownerUserId: 56f653659ea9524b9e0fb0ba67e6f8a0
                    nextPageCursor: string
      operationId: list-deals
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                include:
                  $ref: '#/components/schemas/IncludeFields'
                cursor:
                  type: string
                synced:
                  $ref: '#/components/schemas/SyncedCache'
                filters:
                  type: object
                  description: Requires enabling Synced-cache
                  properties:
                    id:
                      $ref: "#/components/schemas/StringFilter"
                    closeDate:
                      $ref: "#/components/schemas/DateFilter"
                    name:
                      $ref: "#/components/schemas/StringFilter"
                    amount:
                      $ref: "#/components/schemas/NumberFilter"
                    probability:
                      $ref: "#/components/schemas/NumberFilter"
                    stage:
                      $ref: "#/components/schemas/StringFilter"
                    isWon:
                      $ref: "#/components/schemas/BooleanFilter"
                    isClosed:
                      $ref: "#/components/schemas/BooleanFilter"
                    expectedRevenue:
                      $ref: "#/components/schemas/NumberFilter"
                    createdTime:
                      $ref: "#/components/schemas/DateFilter"
                    modifiedTime:
                      $ref: "#/components/schemas/DateFilter"
                associations:
                  type: array
                  items:
                    type: string
                  description: |
                    Array of associations to include in the response.
                    Allowed values: accounts, contacts.
                    ownerUserId is always included in the response.
      description: Retrieve all Deals
    parameters: []
  /api/unifications/crm/deals/batch-read:
    post:
      summary: Batch Read Deals
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  deals:
                    type: array
                    items:
                      $ref: '#/components/schemas/Deal'
              examples:
                example-1:
                  value:
                    deals:
                      - id: '84'
                        name: Blue Cross Deal
                        stage: demo
                        amount: 10000
                        closeDate: '2020-08-23T00:00:00Z'
                        probability: '0.4'
                        expectedRevenue: 4000
                        isWon: false
                        isClosed: false
                        currency: USD
                        modifiedTime: '2019-08-24T14:15:22Z'
                        createdTime: '2019-08-24T14:15:22Z'
                        associations:
                          contactIds:
                            - e5f32d4fd2115220bd20a2ccf81210ec
                          accountIds:
                            - 0dcb45e051315a6ea63b0f16e73689d9
                          ownerUserId: 56f653659ea9524b9e0fb0ba67e6f8a0
      operationId: batch-read-deals
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                include:
                  $ref: '#/components/schemas/IncludeFields'
                synced:
                  $ref: '#/components/schemas/SyncedCache'
                ids:
                  type: array
                  items:
                    type: string
                associations:
                  type: array
                  items:
                    type: string
                  description: |
                    Array of associations to include in the response.
                    Allowed values: accounts, contacts.
                    ownerUserId is always included in the response.
            examples:
              example-1:
                value:
                  ids:
                    - '123123'
                    - '456456'
                    - '567567'
                  include:
                    $native: false
                  associations:
                    - accounts
                    - contacts
      description: Fetch Deals by Ids
    parameters: []
  /api/unifications/crm/deals/find:
    post:
      summary: Get Deal
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                title: responseBody
                type: object
                properties:
                  deal:
                    $ref: '#/components/schemas/Deal'
              examples:
                example-1:
                  value:
                    deal:
                      id: '84'
                      name: Blue Cross Deal
                      stage: demo
                      amount: 10000
                      closeDate: '2020-08-23T00:00:00Z'
                      probability: '0.4'
                      expectedRevenue: 4000
                      isWon: false
                      isClosed: false
                      currency: USD
                      modifiedTime: '2019-08-24T14:15:22Z'
                      createdTime: '2019-08-24T14:15:22Z'
                      associations:
                        contactIds:
                          - e5f32d4fd2115220bd20a2ccf81210ec
                        accountIds:
                          - 0dcb45e051315a6ea63b0f16e73689d9
                        ownerUserId: 56f653659ea9524b9e0fb0ba67e6f8a0
      operationId: get-deal
      parameters:
        - name: x-vessel-access-token
          in: header
          description: Access Token
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                include:
                  $ref: '#/components/schemas/IncludeFields'
                synced:
                  $ref: '#/components/schemas/SyncedCache'
                id:
                  type: string
                associations:
                  type: array
                  items:
                    type: string
                  description: |
                    Array of associations to include in the response.
                    Allowed values: accounts, contacts.
                    ownerUserId is always included in the response.
              required:
                - id
            examples:
              example-1:
                value:
                  id: '123123'
                  include:
                    $native: f

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