Supaglue Connections API
A `Connection` represents a Customer's connection to a Provider.
A `Connection` represents a Customer's connection to a Provider.
openapi: 3.0.3
info:
version: 0.25.7
title: Unified CRM Accounts Connections 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: Connections
description: A `Connection` represents a Customer's connection to a Provider.
paths:
/customers/{customer_id}/connections:
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
get:
operationId: getConnections
tags:
- Connections
security:
- x-api-key: []
summary: List connections
description: Get a list of connections
responses:
'200':
description: Connections
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/connection'
'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'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
post:
operationId: createConnection
summary: Create a connection
description: This endpoint is for providers that use API key or access key for authentication. Please use [Embedded Links](https://docs.supaglue.com/platform/managed-auth#oauth-20) for providers that support Oauth2 for authentication.
tags:
- Connections
parameters: []
security:
- x-api-key: []
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- type: object
title: apollo
properties:
provider_name:
type: string
enum:
- apollo
example: apollo
type:
type: string
enum:
- api_key
example: api_key
api_key:
type: string
description: API key for the connected customer.
example: e0c5545d-77b8-458d-b4bf-fc701a9cecac
required:
- provider_name
- type
- api_key
- type: object
title: gong
properties:
provider_name:
type: string
enum:
- gong
example: gong
type:
type: string
enum:
- access_key_secret
example: access_key_secret
access_key:
type: string
description: Access key for the connected customer.
example: e0c5545d-77b8-458d-b4bf-fc701a9cecac
access_key_secret:
type: string
description: Access key secret for the connected customer.
example: 258a80aa-2e9b-40b0-8d7a-28f858a856f3
required:
- provider_name
- type
- access_key
- access_key_secret
- type: object
title: salesforce
properties:
provider_name:
type: string
enum:
- salesforce
example: salesforce
type:
type: string
enum:
- oauth2
example: oauth2
refresh_token:
type: string
instance_url:
type: string
login_url:
type: string
required:
- provider_name
- type
- refresh_token
- instance_url
- type: object
title: hubspot
properties:
provider_name:
type: string
enum:
- hubspot
example: hubspot
type:
type: string
enum:
- oauth2
example: oauth2
refresh_token:
type: string
required:
- provider_name
- type
- refresh_token
responses:
'200':
description: Connection created
content:
application/json:
schema:
$ref: '#/components/schemas/connection'
'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'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
/customers/{customer_id}/connections/_provider_user_id:
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
get:
operationId: getProviderUserId
summary: Get logged in User ID and details
description: 'This endpoint returns the ID of the logged in (common schema) User and details.
The common schema User ID maps to the following 3rd-party provider object IDs:
| Provider | Remote object ID |
| ---------- | ----------------- |
| Salesforce | User |
| Hubspot | V3 Owner |
| Dynamics | Azure System User |
| Intercom | Admin |
'
tags:
- Connections
security:
- x-api-key: []
parameters:
- name: x-sg-minor-version
in: header
schema:
type: string
enum:
- '1'
example: 1
- name: provider_name
in: query
required: true
schema:
type: string
enum:
- hubspot
- ms_dynamics_365_sales
- intercom
example: hubspot
responses:
'200':
description: UserId
content:
application/json:
schema:
type: object
properties:
user_id:
type: string
description: The ID of the logged in user that originates from your customer's third-party Provider. Refer to the table above for the Provider ID mapping.
raw_details:
type: object
additionalProperties: true
description: The raw data from the your customer's third-party Provider.
additional_raw_details:
type: object
additionalProperties: true
description: For some third-party Providers, there may be additional data used to lookup the common schema User ID (e.g. with Hubspot)
example:
user_id: 70115e3c-2700-4112-b28f-2706e08570e6
raw_details:
user_id: 70115e3c-2700-4112-b28f-2706e08570e6
user: test@something.com
scopes:
- contacts
- automation
- oauth
'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'
/customers/{customer_id}/connections/{provider_name}:
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: provider_name
in: path
required: true
schema:
$ref: '#/components/schemas/provider_name'
get:
operationId: getConnection
summary: Get connection
tags:
- Connections
security:
- x-api-key: []
responses:
'200':
description: Connection
content:
application/json:
schema:
$ref: '#/components/schemas/connection'
'400':
$ref: '#/components/responses/badRequest'
'401':
$ref: '#/components/responses/unauthorized'
'403':
$ref: '#/components/responses/forbidden'
'404':
$ref: '#/components/responses/notFound'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
delete:
operationId: deleteConnection
summary: Delete connection
tags:
- Connections
security:
- x-api-key: []
responses:
'204':
description: An empty body is returned on successful deletion.
'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'
'500':
$ref: '#/components/responses/internalServerError'
'501':
$ref: '#/components/responses/notImplemented'
/customers/{customer_id}/connections/{provider_name}/_rate_limit_info:
parameters:
- name: customer_id
in: path
required: true
schema:
type: string
- name: provider_name
in: path
required: true
schema:
$ref: '#/components/schemas/provider_name'
get:
operationId: getConnectionRateLimitInfo
summary: Get connection rate limit info
description: 'Get rate limit info for a connection. This endpoint is only available for
salesforce and apollo connections.
'
tags:
- Connections
security:
- x-api-key: []
responses:
'200':
description: Connection rate limit info
content:
application/json:
schema:
$ref: '#/components/schemas/rate_limit_info'
components:
schemas:
connection_entity_mapping:
type: object
deprecated: true
properties:
entity_id:
type: string
object:
$ref: '#/components/schemas/standard_or_custom_object'
field_mappings:
type: array
items:
$ref: '#/components/schemas/entity_field_mapping'
required:
- entity_id
object_field_mapping:
type: object
properties:
schema_field:
type: string
example: apolla_first_name
mapped_field:
type: string
example: FirstName
required:
- schema_field
rate_limit_info:
type: object
properties:
daily:
$ref: '#/components/schemas/single_rate_limit_info'
hourly:
$ref: '#/components/schemas/single_rate_limit_info'
other:
type: object
additionalProperties:
$ref: '#/components/schemas/single_rate_limit_info'
category:
type: string
enum:
- crm
- engagement
- enrichment
- marketing_automation
- no_category
example: crm
provider_name:
type: string
enum:
- hubspot
- salesforce
- pipedrive
- zendesk_sell
- ms_dynamics_365_sales
- zoho_crm
- capsule
- outreach
- gong
- apollo
- salesloft
- intercom
- linear
- clearbit
- 6sense
- marketo
- salesforce_marketing_cloud_account_engagement
- slack
example: hubspot
connection_sync_config:
type: object
properties:
destination_config:
description: An object to override the default Destination configuration per connection.
oneOf:
- description: Config specific to Postgres destination
type: object
title: Postgres
properties:
type:
type: string
enum:
- postgres
schema:
type: string
description: The schema you'd like to sync to. This schema must already exist. Supaglue will not create it. If not specified, the schema specified in the Postgres Destination will be used.
example: customer_1_schema
required:
- type
- schema
- description: Config specific to BigQuery destination
type: object
title: BigQuery
properties:
type:
type: string
enum:
- bigquery
dataset:
type: string
description: The dataset you'd like to sync to. This dataset must already exist. Supaglue will not create it. If not specified, the dataset specified in the BigQuery Destination will be used.
example: customer_1_dataset
required:
- type
- dataset
standard_objects:
description: A list of case-sensitive Provider standard objects to by synced. If specified, this list will take override the custom_objects list in SyncConfig.
type: array
items:
oneOf:
- type: object
title: All
properties:
object:
type: string
description: The Provider object name (case sensitive)
example: Contact
required:
- object
- type: object
title: Postgres/BigQuery (Preview)
properties:
object:
type: string
description: The Provider object name (case sensitive)
example: Contact
table:
type: string
description: The table to write the object to. If specified, this will override the default table used by Supaglue.
example: my_contacts
required:
- object
- table
custom_objects:
description: '(Preview) A list of case-sensitive Provider custom objects to be synced. If specified, this list will take override the custom_objects list in SyncConfig.
'
type: array
items:
oneOf:
- type: object
title: All
properties:
object:
type: string
description: The Provider object name (case sensitive)
example: Contact__c
required:
- object
- type: object
title: Postgres/BigQuery (Preview)
properties:
object:
type: string
description: The Provider object name (case sensitive)
example: Contact__c
table:
type: string
description: The table to write the object to. If specified, this will override the default table used by Supaglue.
example: my_contacts
required:
- object
- table
entity_field_mapping:
type: object
deprecated: true
properties:
entity_field:
type: string
description: The name of the field in your application.
example: apolla_first_name
mapped_field:
type: string
description: The name of the field in your customer's third-party Provider tool (e.g. Salesforce).
example: FirstName
required:
- entity_field
- mapped_field
connection:
type: object
properties:
id:
type: string
example: e888cedf-e9d0-42c5-9485-2d72984faef2
application_id:
type: string
example: d8ceb3ff-8b7f-4fa7-b8de-849292f6ca69
customer_id:
type: string
example: my-customer-1
provider_id:
type: string
example: 677fcfca-cf89-4387-a189-71c885be67bc
provider_name:
$ref: '#/components/schemas/provider_name'
category:
$ref: '#/components/schemas/category'
instance_url:
type: string
example: https://app.hubspot.com/contacts/123456
description: Instance URL for the connected customer.
schema_mappings_config:
description: This is for field mappings when you data model using [Objects](https://docs.supaglue.com/platform/objects/overview#schemas). The field mappings here are set by your customers using the [Field Mappings API](https://docs.supaglue.com/api/v2/mgmt/update-object-field-mappings).
type: object
deprecated: true
properties:
common_objects:
type: array
items:
type: object
properties:
object:
type: string
example: Contact__c
field_mappings:
type: array
items:
$ref: '#/components/schemas/object_field_mapping'
required:
- object
- field_mappings
standard_objects:
type: array
items:
type: object
properties:
object:
type: string
example: Contact
field_mappings:
type: array
items:
$ref: '#/components/schemas/object_field_mapping'
example: null
required:
- object
- field_mappings
entity_mappings:
type: array
description: This is for object/field mappings when you data model using [Entities](https://docs.supaglue.com/platform/entities/overview#entity-mapping). The object/field mappings here are set by your customers using the [Entity Mappings API](https://docs.supaglue.com/api/v2/mgmt/upsert-entity-mapping).
deprecated: true
items:
$ref: '#/components/schemas/connection_entity_mapping'
example: []
connection_sync_config:
$ref: '#/components/schemas/connection_sync_config'
required:
- id
- application_id
- customer_id
- provider_id
- provider_name
- category
- instance_url
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
standard_or_custom_object:
type: object
properties:
type:
type: string
enum:
- standard
- custom
name:
type: string
required:
- type
- name
single_rate_limit_info:
type: object
properties:
limit:
type: integer
example: 1000
remaining:
type: integer
example: 900
reset_time:
type: integer
description: The time (in epoch seconds) at which the rate limit will reset. If missing, the rate limit is a sliding window.
example: 1615219200
required:
- limit
- remaining
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'
securitySchemes:
x-api-key:
type: apiKey
name: x-api-key
in: header
description: API key to allow developers to access the API