openapi: 3.0.3
info:
version: 0.25.7
title: Unified CRM Accounts Sequences API
contact:
name: Supaglue
email: docs@supaglue.com
url: https://supaglue.com
description: '#### Introduction
Welcome to the Unified API (CRM) documentation. You can use this API to write to multiple third-party providers within the CRM category.
[View common schema for CRM](https://docs.supaglue.com/platform/common-schemas/crm)
#### Base API URL
```
https://api.supaglue.io/crm/v2
```
'
servers:
- url: https://api.supaglue.io/crm/v2
description: Supaglue API
tags:
- name: Sequences
description: The `Sequence` Common Object represents a "sequence" in Engagements.
paths:
/sequences:
parameters:
- $ref: '#/components/parameters/x-customer-id'
- $ref: '#/components/parameters/x-provider-name'
post:
operationId: createSequence
summary: Create sequence
description: Note this uses an undocumented private api endpoint for Apollo and should be considered to be in alpha state
tags:
- Sequences
security:
- x-api-key: []
parameters: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
record:
$ref: '#/components/schemas/create_sequence'
required:
- record
responses:
'201':
description: Sequence created
content:
application/json:
schema:
type: object
properties:
record:
$ref: '#/components/schemas/created_record'
warnings:
$ref: '#/components/schemas/warnings'
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/notFound'
'409':
$ref: '#/components/responses/conflict'
'422':
$ref: '#/components/responses/unprocessableEntity'
'499':
$ref: '#/components/responses/remoteProviderError'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
get:
operationId: listSequences
summary: List sequences
tags:
- Sequences
security:
- x-api-key: []
parameters:
- $ref: '#/components/parameters/include_raw_data'
- $ref: '#/components/parameters/read_from_cache'
- $ref: '#/components/parameters/modified_after'
- $ref: '#/components/parameters/page_size'
- $ref: '#/components/parameters/cursor'
responses:
'200':
description: Paginated Sequences
content:
application/json:
schema:
type: object
properties:
pagination:
$ref: '#/components/schemas/pagination'
records:
type: array
items:
$ref: '#/components/schemas/sequence'
required:
- pagination
- records
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/notFound'
'499':
$ref: '#/components/responses/remoteProviderError'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
/sequences/{sequence_id}:
parameters:
- $ref: '#/components/parameters/x-customer-id'
- $ref: '#/components/parameters/x-provider-name'
- name: sequence_id
in: path
required: true
schema:
type: string
example: 0258cbc6-6020-430a-848e-aafacbadf4ae
get:
operationId: getSequence
summary: Get sequence
tags:
- Sequences
security:
- x-api-key: []
parameters:
- $ref: '#/components/parameters/include_raw_data'
responses:
'200':
description: Sequence
content:
application/json:
schema:
$ref: '#/components/schemas/sequence'
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/notFound'
'499':
$ref: '#/components/responses/remoteProviderError'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
/sequences/{sequence_id}/sequence_steps:
parameters:
- $ref: '#/components/parameters/x-customer-id'
- $ref: '#/components/parameters/x-provider-name'
- name: sequence_id
in: path
required: true
description: The ID of the sequence.
schema:
type: string
example: 0258cbc6-6020-430a-848e-aafacbadf4ae
post:
operationId: createSequenceStep
summary: Create sequence step
tags:
- Sequences
security:
- x-api-key: []
parameters: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
record:
$ref: '#/components/schemas/create_sequence_step'
required:
- record
responses:
'201':
description: Sequence step created
content:
application/json:
schema:
type: object
properties:
record:
$ref: '#/components/schemas/created_record'
warnings:
$ref: '#/components/schemas/warnings'
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/notFound'
'409':
$ref: '#/components/responses/conflict'
'422':
$ref: '#/components/responses/unprocessableEntity'
'499':
$ref: '#/components/responses/remoteProviderError'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
/sequences/{sequence_id}/sequence_steps/{sequence_step_id}:
parameters:
- $ref: '#/components/parameters/x-customer-id'
- $ref: '#/components/parameters/x-provider-name'
- name: sequence_id
in: path
required: true
description: The ID of the sequence.
schema:
type: string
example: 0258cbc6-6020-430a-848e-aafacbadf4ae
- name: sequence_step_id
in: path
required: true
description: The ID of the sequence step.
schema:
type: string
example: 0258cbc6-6020-430a-848e-aafacbadf4ae
patch:
operationId: updateSequenceStep
summary: Update Sequence Step
description: Works for `apollo` and `outreach`. Not supported in `salesloft`
tags:
- Sequences
security:
- x-api-key: []
parameters: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
record:
$ref: '#/components/schemas/update_sequence_step'
required:
- record
responses:
'200':
description: Sequence step updated
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
warnings:
$ref: '#/components/schemas/warnings'
components:
schemas:
update_sequence_step:
type: object
properties:
template:
description: The email/message template to be used for this step. Only applicable for email or message steps.
type: object
properties:
body:
type: string
description: The body of the email (HTML).
subject:
type: string
description: The subject of the email.
custom_fields:
$ref: '#/components/schemas/custom_fields'
warnings:
type: array
items:
type: object
properties:
detail:
type: string
problem_type:
type: string
title:
type: string
create_sequence:
type: object
properties:
name:
type: string
tags:
type: array
description: Raw values in Outreach, ids in Apollo, and not supported in Salesloft
items:
type: string
type:
type: string
description: The share type of the sequence. Setting to `team` will share with the whole team. `private` will only share with the owner.
enum:
- team
- private
owner_id:
type: string
steps:
type: array
items:
$ref: '#/components/schemas/create_sequence_step'
custom_fields:
$ref: '#/components/schemas/custom_fields'
required:
- name
- type
created_record:
type: object
properties:
id:
type: string
required:
- id
sequence_step:
type: object
properties:
id:
type: string
name:
type: string
description: The name given by the user for the step. Used by Salesloft only.
interval_seconds:
type: number
description: The interval (in seconds) until this step will activate after the previous step (in case of first step, relative to when prospect first enters a sequence); only applicable to interval-based sequences. This is 0 by default
date:
type: string
example: '2023-01-01'
description: The date this step will activate; only applicable to date-based sequences.
template:
description: The email/message template to be used for this step. Only applicable for email or message steps.
type: object
properties:
id:
type: string
description: The ID of the template
body:
type: string
description: The body of the email (HTML).
subject:
type: string
description: The subject of the email.
name:
type: string
description: The name of the template. In Outreach, if missing this will create an `invisible` template that doesn't show up in the templates list UI.
to:
type: array
description: A list of default person and email address pairs to receive this template in the "to" field
items:
type: string
cc:
type: array
description: A list of default person and email address pairs to receive this template in the "cc" field
items:
type: string
bcc:
type: array
description: A list of default person and email address pairs to receive this template in the "bcc" field
items:
type: string
required:
- body
- subject
is_reply:
type: boolean
description: If true, this step will be sent as a reply to the previous step.
order:
type: number
description: The step's display order within its sequence. Only applicable for Outreach when adding steps one at a time after the initial sequence creation, otherwise when creating steps together with sequence order is implicit based on the order of step within the step array. Salesloft does not use the `order` param, and order is instead determined by `interval_seconds` which translates into the `day` parameter
type:
type: string
enum:
- auto_email
- manual_email
- call
- task
- linkedin_send_message
description: "The type of the sequence state. Note: `linkedin_send_message` is undocumented in Outreach and subject to change.\n\nSee below for how these types are mapped:\n\n
\n \n \n | Provider | \n auto_email | \n manual_email | \n call | \n task | \n linkedin_send_message | \n
\n \n \n \n | Apollo | \n auto_email | \n manual_email | \n call | \n action_item | \n linkedin_send_message | \n
\n \n | Outreach | \n auto_email | \n manual_email | \n call | \n task | \n linkedin_send_message | \n
\n \n | Salesloft | \n Email | \n Email | \n Phone | \n Other | \n (Not supported) | \n
\n \n
\n"
task_note:
type: string
description: An optional note to be attached to this step.
required:
- type
sequence:
type: object
properties:
owner_id:
type: string
nullable: true
example: 95fe0d29-e8cc-48ac-9afd-e02d8037a597
id:
type: string
example: 54312
is_enabled:
type: boolean
example: true
name:
nullable: true
type: string
tags:
type: array
description: Raw values in Outreach, ids in Apollo, and not supported in Salesloft
items:
type: string
num_steps:
type: number
metrics:
type: object
additionalProperties: true
created_at:
type: string
nullable: true
format: date-time
example: '2022-02-27T00:00:00Z'
updated_at:
type: string
nullable: true
format: date-time
example: '2022-02-27T00:00:00Z'
last_modified_at:
type: string
format: date-time
example: '2022-02-27T00:00:00Z'
is_archived:
type: boolean
description: When archived, cannot add contact to sequence or send mail.
share_type:
type: string
description: The share type of the sequence. If `team` will share with the whole team. `private` will only share with the owner.
enum:
- team
- private
steps:
type: array
items:
$ref: '#/components/schemas/sequence_step'
description: Only returned when getting single sequence, not returned when listing sequences because it is too expensive to do so.
required:
- id
- is_enabled
- name
- tags
- num_steps
- metrics
- created_at
- updated_at
- last_modified_at
create_sequence_step:
type: object
properties:
name:
type: string
description: The name given by the user for the step. Used by Salesloft only.
interval_seconds:
type: number
description: The interval (in seconds) until this step will activate after the previous step (in case of first step, relative to when prospect first enters a sequence); only applicable to interval-based sequences. This is 0 by default
date:
type: string
example: '2023-01-01'
description: The date this step will activate; only applicable to date-based sequences.
template:
description: The email/message template to be used for this step. Only applicable for email or message steps.
oneOf:
- type: object
properties:
id:
type: string
description: The ID of the template to use for this step.
required:
- id
- type: object
properties:
body:
type: string
description: The body of the email (HTML).
subject:
type: string
description: The subject of the email.
name:
type: string
description: The name of the template. In Outreach, if missing this will create an `invisible` template that doesn't show up in the templates list UI.
to:
type: array
description: A list of default person and email address pairs to receive this template in the "to" field
items:
type: string
cc:
type: array
description: A list of default person and email address pairs to receive this template in the "cc" field
items:
type: string
bcc:
type: array
description: A list of default person and email address pairs to receive this template in the "bcc" field
items:
type: string
custom_fields:
$ref: '#/components/schemas/custom_fields'
required:
- body
- subject
is_reply:
type: boolean
description: If true, this step will be sent as a reply to the previous step.
order:
type: number
description: The step's display order within its sequence. Only applicable for Outreach when adding steps one at a time after the initial sequence creation, otherwise when creating steps together with sequence order is implicit based on the order of step within the step array. Salesloft does not use the `order` param, and order is instead determined by `interval_seconds` which translates into the `day` parameter
type:
type: string
enum:
- auto_email
- manual_email
- call
- task
- linkedin_send_message
description: "The type of the sequence state. Note: `linkedin_send_message` is undocumented in Outreach and subject to change.\n\nSee below for how these types are mapped:\n\n\n \n \n | Provider | \n auto_email | \n manual_email | \n call | \n task | \n linkedin_send_message | \n
\n \n \n \n | Apollo | \n auto_email | \n manual_email | \n call | \n action_item | \n linkedin_send_message | \n
\n \n | Outreach | \n auto_email | \n manual_email | \n call | \n task | \n linkedin_send_message | \n
\n \n | Salesloft | \n Email | \n Email | \n Phone | \n Other | \n (Not supported) | \n
\n \n
\n"
task_note:
type: string
description: An optional note to be attached to this step.
custom_fields:
$ref: '#/components/schemas/custom_fields'
required:
- type
errors:
type: array
items:
type: object
properties:
id:
type: string
description: A unique identifier for the instance of the error. Provide this to support when contacting Supaglue.
example: 9366efb4-8fb1-4a28-bfb0-8d6f9cc6b5c5
detail:
type: string
description: A detailed description of the error.
example: 'Property values were not valid: [{"isValid":false,"message":"Property \"__about_us\" does not exist","error":"PROPERTY_DOESNT_EXIST","name":"__about_us","localizedErrorMessage":"Property \"__about_us\" does not exist"}]'
problem_type:
type: string
description: The Supaglue error code associated with the error.
example: MISSING_REQUIRED_FIELD
deprecated: true
title:
type: string
description: A brief description of the error. The schema and type of message will vary by Provider.
example: 'Property values were not valid
'
code:
type: string
description: The Supaglue error code associated with the error.
example: MISSING_REQUIRED_FIELD
status:
type: string
description: The HTTP status code associated with the error.
example: '400'
meta:
type: object
description: Additional metadata about the error.
properties:
cause:
type: object
description: The cause of the error. Usually the underlying error from the remote Provider.
example:
code: 400
body:
status: error
message: 'Property values were not valid: [{"isValid":false,"message":"Property \"__about_us\" does not exist","error":"PROPERTY_DOESNT_EXIST","name":"__about_us","localizedErrorMessage":"Property \"__about_us\" does not exist"}]'
correlationId: ac94252c-90b5-45d2-ad1d-9a9f7651d7d2
category: VALIDATION_ERROR
headers:
access-control-allow-credentials: 'false'
cf-cache-status: DYNAMIC
cf-ray: 8053d17b9dae9664-SJC
connection: close
content-length: '361'
content-type: application/json;charset=utf-8
date: Mon, 11 Sep 2023 23:51:22 GMT
nel: '{"success_fraction":0.01,"report_to":"cf-nel","max_age":604800}'
report-to: '{"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v3?s=FgwuXObO%2Fz6ahUJKsxjDLaXTWjooJ8tB0w4%2B%2BKaulGStx0FGkn1PoJoOx2KrFMfihzNdfAqikq7CmgbdlmwKB8hkmp3eTb68qpg10LXFlRgiSqRhbWM7yYSfo8CXmPBc"}],"group":"cf-nel","max_age":604800}'
server: cloudflare
strict-transport-security: max-age=31536000; includeSubDomains; preload
vary: origin, Accept-Encoding
x-content-type-options: nosniff
x-envoy-upstream-service-time: '91'
x-evy-trace-listener: listener_https
x-evy-trace-route-configuration: listener_https/all
x-evy-trace-route-service-name: envoyset-translator
x-evy-trace-served-by-pod: iad02/hubapi-td/envoy-proxy-6c94986c56-9xsh2
x-evy-trace-virtual-host: all
x-hubspot-correlation-id: ac94252c-90b5-45d2-ad1d-9a9f7651d7d2
x-hubspot-ratelimit-interval-milliseconds: '10000'
x-hubspot-ratelimit-max: '100'
x-hubspot-ratelimit-remaining: '99'
x-hubspot-ratelimit-secondly: '10'
x-hubspot-ratelimit-secondly-remaining: '9'
x-request-id: ac94252c-90b5-45d2-ad1d-9a9f7651d7d2
x-trace: 2B1B4386362759B6A4C34802AD168B803DDC1BE770000000000000000000
origin:
type: string
enum:
- remote-provider
- supaglue
description: The origin of the error.
example: remote-provider
application_name:
type: string
description: The name of the application that generated the error.
example: MyCompany Production
required:
- origin
additionalProperties: true
required:
- id
- detail
- problem_type
- title
- code
- status
- meta
example:
- meta:
cause:
code: 400
body:
status: error
message: 'Property values were not valid: [{"isValid":false,"message":"Property \"__about_us\" does not exist","error":"PROPERTY_DOESNT_EXIST","name":"__about_us","localizedErrorMessage":"Property \"__about_us\" does not exist"}]'
correlationId: ac94252c-90b5-45d2-ad1d-9a9f7651d7d2
category: VALIDATION_ERROR
headers:
access-control-allow-credentials: 'false'
cf-cache-status: DYNAMIC
cf-ray: 8053d17b9dae9664-SJC
connection: close
content-length: '361'
content-type: application/json;charset=utf-8
date: Mon, 11 Sep 2023 23:51:22 GMT
nel: '{"success_fraction":0.01,"report_to":"cf-nel","max_age":604800}'
report-to: '{"endpoints":[{"url":"https://a.nel.cloudflare.com/report/v3?s=FgwuXObO%2Fz6ahUJKsxjDLaXTWjooJ8tB0w4%2B%2BKaulGStx0FGkn1PoJoOx2KrFMfihzNdfAqikq7CmgbdlmwKB8hkmp3eTb68qpg10LXFlRgiSqRhbWM7yYSfo8CXmPBc"}],"group":"cf-nel","max_age":604800}'
server: cloudflare
strict-transport-security: max-age=31536000; includeSubDomains; preload
vary: origin, Accept-Encoding
x-content-type-options: nosniff
x-envoy-upstream-service-time: '91'
x-evy-trace-listener: listener_https
x-evy-trace-route-configuration: listener_https/all
x-evy-trace-route-service-name: envoyset-translator
x-evy-trace-served-by-pod: iad02/hubapi-td/envoy-proxy-6c94986c56-9xsh2
x-evy-trace-virtual-host: all
x-hubspot-correlation-id: ac94252c-90b5-45d2-ad1d-9a9f7651d7d2
x-hubspot-ratelimit-interval-milliseconds: '10000'
x-hubspot-ratelimit-max: '100'
x-hubspot-ratelimit-remaining: '99'
x-hubspot-ratelimit-secondly: '10'
x-hubspot-ratelimit-secondly-remaining: '9'
x-request-id: ac94252c-90b5-45d2-ad1d-9a9f7651d7d2
x-trace: 2B1B4386362759B6A4C34802AD168B803DDC1BE770000000000000000000
detail: 'Property values were not valid: [{"isValid":false,"message":"Property \"__about_us\" does not exist","error":"PROPERTY_DOESNT_EXIST","name":"__about_us","localizedErrorMessage":"Property \"__about_us\" does not exist"}]'
problem_type: MISSING_REQUIRED_FIELD
title: 'Property values were not valid
'
code: MISSING_REQUIRED_FIELD
status: '400'
id: 9366efb4-8fb1-4a28-bfb0-8d6f9cc6b5c5
pagination:
type: object
properties:
next:
type: string
nullable: true
example: eyJpZCI6IjQyNTc5ZjczLTg1MjQtNDU3MC05YjY3LWVjYmQ3MDJjNmIxNCIsInJldmVyc2UiOmZhbHNlfQ==
previous:
type: string
nullable: true
example: eyJpZCI6IjBjZDhmYmZkLWU5NmQtNDEwZC05ZjQxLWIwMjU1YjdmNGI4NyIsInJldmVyc2UiOnRydWV9
total_count:
type: number
example: 100
required:
- next
- previous
custom_fields:
type: object
additionalProperties: true
description: Custom properties to be inserted that are not covered by the common object. Object keys must match exactly to the corresponding provider API.
responses:
conflict:
description: Conflict
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
notImplemented:
description: Not implemented
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
unprocessableEntity:
description: Unprocessable entity
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
badRequest:
description: Bad request
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
notFound:
description: Not found
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
forbidden:
description: Forbidden
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
unauthorized:
description: Unauthorized
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
internalServerError:
description: Internal server error
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
remoteProviderError:
description: Remote provider error
content:
application/json:
schema:
type: object
properties:
errors:
$ref: '#/components/schemas/errors'
parameters:
read_from_cache:
name: read_from_cache
in: query
schema:
type: boolean
example: true
description: "Whether to read from Supaglue's Managed Destination cache or to read directly from the provider. \n\n\n**NOTE**: `read_from_cache=true` requires you to have the object synced to the Supaglue Managed Destination.\n"
page_size:
name: page_size
in: query
schema:
type: string
example: 123
description: 'Number of results to return per page. (Max: 1000)'
x-customer-id:
name: x-customer-id
in: header
schema:
type: string
example: my-customer-1
description: The customer ID that uniquely identifies the customer in your application
required: true
x-provider-name:
name: x-provider-name
in: header
schema:
type: string
example: salesforce
description: The provider name
required: true
include_raw_data:
name: include_raw_data
in: query
schema:
type: boolean
description: Whether to include raw data fetched from the 3rd party provider.
example: true
modified_after:
name: modified_after
in: query
schema:
type: string
format: date-time
description: If provided, will only return objects modified after this datetime. Datetime must be in ISO 8601 format and URI encoded.
example: '2023-02-23T00:00:00Z'
cursor:
name: cursor
in: query
schema:
type: string
example: cD0yMDIxLTAxLTA2KzAzJTNBMjQlM0E1My40MzQzMjYlMkIwMCUzQTAw
description: The pagination cursor value
securitySchemes:
x-api-key:
type: apiKey
name: x-api-key
in: header
description: API key to allow developers to access the API