openapi: 3.2.0 info: title: Reference CRM API version: '2.0' summary: API servers: - url: https://api.vessel.dev security: - VesselAPIToken: [] tags: - name: Crm paths: /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 tags: - Crm /crm/contact/custom-field: 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 tags: - Crm /crm/account/custom-field: patch: summary: Update Account Custom Field description: Supported for Salesforce and HubSpot operationId: patch-account-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 tags: - Crm /crm/lead/custom-field: patch: summary: Update Lead Custom Field description: Supported for Salesforce and HubSpot operationId: patch-lead-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 tags: - Crm /crm/calls: parameters: [] get: summary: Get All Calls responses: '200': description: OK content: application/json: schema: type: object properties: calls: type: array items: $ref: '#/components/schemas/Call' nextPageCursor: type: string title: responseBody examples: example-1: value: calls: - id: v.call.3ab3a9562af957228c1019127e3c81e1 nativeId: '23' subject: BlueCross <> Dunder Mifflin disposition: ANSWERED direction: inbound description: Call from Greg date: '2019-08-24T14:15:22Z' createdTime: '2019-08-24T14:15:22Z' modifiedTime: '2019-08-24T14:15:22Z' associations: accountIds: - v.account.0dcb45e051315a6ea63b0f16e73689d9 leadIds: - v.lead.d08f345ace24509e911a0ea8e3d2203c contactIds: - v.contact.e5f32d4fd2115220bd20a2ccf81210ec dealIds: - v.deal.497fb529e6805351b5dc8057c74a4a52 ownerUserId: v.user.56f653659ea9524b9e0fb0ba67e6f8a0 additional: {} nextPageCursor: string operationId: get-all-crm-calls description: Retrieve all Calls 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 tags: - Crm /crm/calls/search: post: summary: Search Calls requestBody: content: application/json: schema: type: object properties: filters: type: object properties: id: $ref: '#/components/schemas/StringFilter' nativeId: $ref: '#/components/schemas/StringFilter' disposition: $ref: '#/components/schemas/StringFilter' direction: $ref: '#/components/schemas/StringFilter' subject: $ref: '#/components/schemas/StringFilter' description: $ref: '#/components/schemas/StringFilter' date: $ref: '#/components/schemas/DateFilter' status: $ref: '#/components/schemas/StringFilter' duration: $ref: '#/components/schemas/NumberFilter' from: $ref: '#/components/schemas/StringFilter' to: $ref: '#/components/schemas/StringFilter' recordingUrl: $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: calls: type: array items: $ref: '#/components/schemas/Call' nextPageCursor: type: string title: responseBody examples: example-1: value: calls: - id: v.call.3ab3a9562af957228c1019127e3c81e1 nativeId: '23' subject: BlueCross <> Dunder Mifflin disposition: ANSWERED direction: inbound description: Call from Greg date: '2019-08-24T14:15:22Z' createdTime: '2019-08-24T14:15:22Z' modifiedTime: '2019-08-24T14:15:22Z' associations: accountIds: - v.account.0dcb45e051315a6ea63b0f16e73689d9 contactIds: - v.contact.e5f32d4fd2115220bd20a2ccf81210ec leadIds: - v.lead.d08f345ace24509e911a0ea8e3d2203c dealIds: - v.deal.497fb529e6805351b5dc8057c74a4a52 ownerUserId: v.user.56f653659ea9524b9e0fb0ba67e6f8a0 additional: {} nextPageCursor: string operationId: search-crm-calls description: Search all Calls using filters parameters: - $ref: '#/components/parameters/accessToken' - $ref: '#/components/parameters/cursor' - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/allFields' tags: - Crm /crm/call: parameters: [] get: summary: Get Call responses: '200': description: OK content: application/json: schema: type: object properties: call: $ref: '#/components/schemas/Call' title: responseBody examples: example-1: value: call: id: v.call.3ab3a9562af957228c1019127e3c81e1 nativeId: '23' subject: BlueCross <> Dunder Mifflin disposition: ANSWERED direction: inbound description: Call from Greg date: '2019-08-24T14:15:22Z' createdTime: '2019-08-24T14:15:22Z' modifiedTime: '2019-08-24T14:15:22Z' associations: accountIds: - v.account.0dcb45e051315a6ea63b0f16e73689d9 contactIds: - v.contact.e5f32d4fd2115220bd20a2ccf81210ec leadIds: - v.lead.d08f345ace24509e911a0ea8e3d2203c dealIds: - v.deal.497fb529e6805351b5dc8057c74a4a52 ownerUserId: v.user.56f653659ea9524b9e0fb0ba67e6f8a0 additional: {} operationId: get-one-crm-call 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 Call by Id tags: - Crm post: summary: Create Call operationId: post-crm-call 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 call: $ref: '#/components/schemas/CallCreate' required: - accessToken examples: example-1: value: accessToken: string call: subject: BlueCross <> Dunder Mifflin disposition: ANSWERED direction: inbound description: Call from Greg date: '2019-08-24T14:15:22Z' accountId: v.account.0dcb45e051315a6ea63b0f16e73689d9 contactIds: - v.contact.e5f32d4fd2115220bd20a2ccf81210ec ownerUserId: v.user.56f653659ea9524b9e0fb0ba67e6f8a0 additional: {} description: '' description: Create a new Call. tags: - Crm patch: summary: Update Call operationId: put-crm-call 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 call: $ref: '#/components/schemas/CallUpdate' required: - accessToken - id - call examples: example-1: value: accessToken: string id: string call: ownerUserId: v.user.56f653659ea9524b9e0fb0ba67e6f8a0 disposition: ANSWERED additional: {} description: Update an Call by Id. tags: - Crm /crm/call/details: get: summary: Get Call Details responses: '200': description: OK content: application/json: schema: type: object properties: fields: type: array items: $ref: '#/components/schemas/Field' nextPageCursor: type: string title: responseBody examples: example-1: value: fields: - key: subject name: Subject type: string options: null isArray: false custom: false universal: true required: false creatable: true updatable: true nextPageCursor: string operationId: get-details-crm-call description: 'Get details about all Calls. 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. tags: - Crm /crm/call/batch: parameters: [] post: summary: Batch Calls responses: '200': description: OK content: application/json: schema: type: object properties: calls: type: array items: $ref: '#/components/schemas/Call' invalidIds: $ref: '#/components/schemas/InvalidIds' title: responseBody examples: example-1: value: call: id: v.call.3ab3a9562af957228c1019127e3c81e1 nativeId: '23' subject: BlueCross <> Dunder Mifflin disposition: ANSWERED direction: inbound description: Call from Greg date: '2019-08-24T14:15:22Z' createdTime: '2019-08-24T14:15:22Z' modifiedTime: '2019-08-24T14:15:22Z' associations: accountIds: - v.account.0dcb45e051315a6ea63b0f16e73689d9 contactIds: - v.contact.e5f32d4fd2115220bd20a2ccf81210ec leadIds: - v.lead.d08f345ace24509e911a0ea8e3d2203c dealIds: - v.deal.497fb529e6805351b5dc8057c74a4a52 ownerUserId: v.user.56f653659ea9524b9e0fb0ba67e6f8a0 additional: {} operationId: get-batch-crm-call requestBody: content: application/json: schema: type: object properties: accessToken: type: string description: The token for the customer's CRM account. This was generated when they connected their account. ids: type: array items: string description: List of call Ids. allFields: type: boolean description: Returns all fields including non-unifiable and custom fields under the "additional" property in the response required: - accessToken - ids examples: example-1: value: accessToken: string ids: - v.call.abc - v.call.xyz description: Retrieve Call by a set of Id's tags: - Crm components: schemas: DateFilter: type: object properties: equals: type: string gt: type: string lt: type: string lte: type: string gte: type: string not: type: string in: type: array items: type: string notIn: type: array items: type: string InvalidIds: type: array items: type: string description: Ids that didn't return anything. Will be an empty array if all Ids are valid. Call: title: Call type: object properties: id: type: string description: Unique Vessel Id. nativeId: type: string description: Id of the object in the connected CRM. subject: type: string disposition: type: string description: Possibly an enum, See /details endpoint for values. direction: type: string enum: - inbound - outbound - internal description: type: string date: type: string description: The date the call occurred status: type: string description: Possibly an enum, See /details endpoint for values. duration: type: integer description: The duration of the call. to: type: string description: 'The phone number that was called. *CRM Caveats* Only supported for HubSpot.' from: type: string description: 'The phone number called from. *CRM Caveats* Only supported for HubSpot.' recordingUrl: type: string description: 'The URL of the recording of the call. *CRM Caveats* Only supported for HubSpot.' createdTime: type: string description: The timestamp that the call object was created modifiedTime: type: string description: The timestamp the call object was last modified associations: type: object required: - accountIds - leadIds - contactIds - dealIds - ownerUserId properties: accountIds: type: array items: type: string contactIds: type: array items: type: string dealIds: type: array items: type: string leadIds: type: array items: type: string ownerUserId: type: string description: The Id of the User that owns this call additional: type: object CallCreate: title: CallCreate type: object properties: subject: type: string disposition: type: string description: See /details endpoint for possible values. direction: type: string enum: - inbound - outbound - internal description: type: string date: type: string description: ISO Formatted date for when the call occurred status: type: string description: Possibly an enum, See /details endpoint for values. duration: type: integer description: The duration of the call. to: type: string description: 'The phone number that was called. *CRM Caveats* Only supported for HubSpot.' from: type: string description: 'The phone number called from. *CRM Caveats* Only supported for HubSpot.' recordingUrl: type: string description: 'The URL of the recording of the call. *CRM Caveats* Only supported for HubSpot.' contactIds: type: array description: The participants involved in this call. If this is an inbound call, this is the contacts that called, if this is an outbound call, this is the contacts that were called. items: type: string accountId: type: string ownerUserId: type: string required: - disposition - direction - date Field: title: Field type: object description: '(Alias: property) A field is a key-value pair on a CRM Object that provides information about that object.' properties: key: type: string description: 'The key in the CRM object (ex: annualRevenue, numberOfEmployees, etc)' name: type: string description: 'The display name of this field (ex: number of employees, annual revenue, etc)' type: type: string enum: - string - number - datetime - date - boolean - reference - phone - url - id - email - percent - singleselect - multiselect - address - decimal - time - daterange - object options: type: array description: Possible options for this field items: type: object properties: key: oneOf: - type: string - type: number name: type: string isArray: type: boolean description: If this field is an array custom: type: boolean description: If this field is a custom field universal: type: boolean description: If this is a field we've unified across CRMs required: type: boolean description: If this field is required when creating the object creatable: type: boolean description: If this field can be used when creating the object updatable: type: boolean description: If this field can be updated required: - key - name - type - custom - universal - required - creatable - updatable examples: - key: numberOfEmployees name: number of employees type: number options: null isArray: false custom: false universal: true required: false creatable: true updatable: true NumberFilter: type: object properties: equals: type: number gt: type: number lt: type: number lte: type: number gte: type: number not: type: number in: type: array items: type: number notIn: type: array items: type: number CallUpdate: title: CallUpdate type: object properties: disposition: type: string description: See /details endpoint for possible values. ownerUserId: type: string required: - disposition StringFilter: type: object properties: equals: type: string contains: type: string startsWith: type: string endsWith: type: string not: type: string in: type: array items: type: string notIn: type: array items: type: string mode: type: string enum: - insensitive CustomFieldUpdate: type: object description: '' properties: key: type: string options: type: array items: type: object properties: name: type: string key: type: string required: - name - key required: - key parameters: cursor: name: cursor in: query description: The cursor to use for pagination schema: type: string accessToken: name: accessToken in: query description: The token for the customer's account. This was generated when they connected their account. required: true schema: type: string allFields: name: allFields in: query description: Returns all fields including non-unifiable and custom fields under the "additional" property in the response schema: type: boolean limit: name: limit in: query description: The number of records to return per page. schema: type: number securitySchemes: VesselAPIToken: name: vessel-api-token type: apiKey in: header