Skip to main content

Integrations

Every call needs Authorization: Bearer <key>. 23 calls:

List integrations​

GET /v1/integrations/catalog

Every provider bubbl3 integrates with and whether it can be connected here. coming_soon until it is built and configured.

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
dataobject[]
data[].app_urlstring (uri) or nullFor apps customers add in the provider (the bubbl3 Zapier app): its invite link, once offered.
data[].auth_kindenumOne of: oauth2, oauth2_pkce, api_key, token, webhook_only, none.
data[].authorize_accountobjectFor one-click providers whose consent page is on the customer’s own site (Shopify’s store), once offered: what to ask for before connecting. Pass it as account to /v1/integrations/{provider}/authorize.
data[].authorize_account.hintstring
data[].authorize_account.labelstring
data[].capabilitiesobject
data[].capabilities.conversation_providerboolean
data[].capabilities.conversionsboolean
data[].capabilities.import_contactsboolean
data[].capabilities.log_messagesboolean
data[].capabilities.new_lead_eventsenumOne of: webhook, poll, stream, none.
data[].capabilities.writebackboolean
data[].categorystring
data[].docs_slugstring
data[].guide_urlstring (uri) or nullFor "Via webhook" tiles, set up with a lead source, the public API or a webhook: the docs page that shows how.
data[].healthcareboolean
data[].keystringProvider key, e.g. gohighlevel.
data[].key_fieldsobject[]For providers connected with the customer’s own API key (ActiveCampaign, Copper, Freshsales, Lofty), once offered: what to ask for, in order. Post them to /v1/integrations/{provider}/connect.
data[].key_fields[].hintstring
data[].key_fields[].labelstring
data[].key_fields[].nameenumOne of: api_key, account_url, user_email, domain, account_id, api_secret, username, password.
data[].namestring
data[].statusenumcoming_soon until the provider is built and its credentials are configured. One of: available, beta, coming_soon, partner_approval.
data[].tierenumOne of: 1, 2, 3, 3b, guide.
data[].tile_labelstring

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

List integration connections​

GET /v1/integrations/connections

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
dataobject[]
data[].account_typeenumagency: an agency-level install whose locations are connected one by one. One of: agency, location.
data[].consent_attested_atstring (date-time) or nullWhen the consent attestation was confirmed. Null if made before it was asked.
data[].consent_attested_bystring or nullWho confirmed it: user:<id> for a member, api_key:<id> for an API key.
data[].consent_fieldstring or null
data[].consent_modeenumOne of: crm_field, web_form, existing_relationship, not_sure.
data[].conversation_providerobject or nullbubbl3 as the texting provider for this CRM account, if it was ever set up.
data[].conversation_provider.eligibilityenumInbox channels (HubSpot): not_eligible when the CRM refused the channel for this account; bubbl3 then logs texts on the contact instead. One of: unknown, eligible, not_eligible.
data[].conversation_provider.eligibility_reasonstring or nullWhy the CRM refused the channel.
data[].conversation_provider.enabledboolean
data[].conversation_provider.inbox_idstring or nullInbox channels (HubSpot): the CRM inbox bubbl3’s channel is connected to.
data[].conversation_provider.line_idstring or nullLine id (ln_...).
data[].conversation_provider.pool_idstring or nullPool id (pool_...).
data[].conversation_provider.updated_atstring (date-time)ISO 8601 timestamp.
data[].created_atstring (date-time)ISO 8601 timestamp.
data[].external_account_idstring
data[].external_account_namestring or null
data[].form_idsstring[] or nullFor a Meta Page: the lead forms whose leads come in; empty for every form. Null for the rest.
data[].idstringIntegration connection id (int_...).
data[].import_filterobject
data[].import_filter.liststringUp to 200 characters.
data[].import_filter.objectenumSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
data[].import_filter.ownerstringThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
data[].import_filter.pipelinestringUp to 200 characters.
data[].import_filter.sincestring (date-time)ISO 8601 timestamp.
data[].import_filter.stagestringUp to 200 characters.
data[].import_filter.tagstringUp to 200 characters.
data[].last_errorstring or null
data[].last_sync_atstring (date-time) or nullISO 8601 timestamp.
data[].lead_source_idstring or nullFor a Meta Page: the lead source its leads go through, where its workflow, consent mode and labels are set (/v1/inbound-sources/{id}). Null for the rest.
data[].parent_idstring or nullThe agency connection this location was connected through, if any.
data[].pollingobject or nullFor CRMs bubbl3 checks for changes instead of receiving webhooks (Salesforce): the last check. Null for the rest.
data[].polling.last_changesintegerNew or changed records the last check found. From 0 to 9007199254740991.
data[].polling.last_errorstring or null
data[].polling.last_polled_atstring (date-time) or nullISO 8601 timestamp.
data[].providerstringProvider key, e.g. gohighlevel.
data[].scopesstring[]
data[].statusenumOne of: connected, needs_attention, disconnected.
data[].updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Get an integration connection​

GET /v1/integrations/connections/:id

Includes how many bubbl3 opt-outs are waiting to be written back to the CRM. They are delivered once the connection works again.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
account_typeenumagency: an agency-level install whose locations are connected one by one. One of: agency, location.
consent_attested_atstring (date-time) or nullWhen the consent attestation was confirmed. Null if made before it was asked.
consent_attested_bystring or nullWho confirmed it: user:<id> for a member, api_key:<id> for an API key.
consent_fieldstring or null
consent_modeenumOne of: crm_field, web_form, existing_relationship, not_sure.
conversation_providerobject or nullbubbl3 as the texting provider for this CRM account, if it was ever set up.
conversation_provider.eligibilityenumInbox channels (HubSpot): not_eligible when the CRM refused the channel for this account; bubbl3 then logs texts on the contact instead. One of: unknown, eligible, not_eligible.
conversation_provider.eligibility_reasonstring or nullWhy the CRM refused the channel.
conversation_provider.enabledboolean
conversation_provider.inbox_idstring or nullInbox channels (HubSpot): the CRM inbox bubbl3’s channel is connected to.
conversation_provider.line_idstring or nullLine id (ln_...).
conversation_provider.pool_idstring or nullPool id (pool_...).
conversation_provider.updated_atstring (date-time)ISO 8601 timestamp.
created_atstring (date-time)ISO 8601 timestamp.
external_account_idstring
external_account_namestring or null
form_idsstring[] or nullFor a Meta Page: the lead forms whose leads come in; empty for every form. Null for the rest.
idstringIntegration connection id (int_...).
import_filterobject
import_filter.liststringUp to 200 characters.
import_filter.objectenumSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
import_filter.ownerstringThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
import_filter.pipelinestringUp to 200 characters.
import_filter.sincestring (date-time)ISO 8601 timestamp.
import_filter.stagestringUp to 200 characters.
import_filter.tagstringUp to 200 characters.
last_errorstring or null
last_sync_atstring (date-time) or nullISO 8601 timestamp.
lead_source_idstring or nullFor a Meta Page: the lead source its leads go through, where its workflow, consent mode and labels are set (/v1/inbound-sources/{id}). Null for the rest.
parent_idstring or nullThe agency connection this location was connected through, if any.
pending_opt_out_writebacksintegerbubbl3 opt-outs queued for this CRM and not delivered yet. From 0 to 9007199254740991.
pollingobject or nullFor CRMs bubbl3 checks for changes instead of receiving webhooks (Salesforce): the last check. Null for the rest.
polling.last_changesintegerNew or changed records the last check found. From 0 to 9007199254740991.
polling.last_errorstring or null
polling.last_polled_atstring (date-time) or nullISO 8601 timestamp.
providerstringProvider key, e.g. gohighlevel.
scopesstring[]
statusenumOne of: connected, needs_attention, disconnected.
updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Update an integration connection​

PATCH /v1/integrations/connections/:id

Sets how consent is read and which contacts import. A consent mode other than not_sure needs the compliance area at full access, and confirms consent for the contacts this connection imported as unknown.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
consent_fieldstring or nullNoUp to 200 characters.
consent_modeenumNoA mode other than not_sure also needs the compliance area at full access. One of: crm_field, web_form, existing_relationship, not_sure.
import_filterobjectNo
import_filter.liststringNoUp to 200 characters.
import_filter.objectenumNoSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
import_filter.ownerstringNoThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
import_filter.pipelinestringNoUp to 200 characters.
import_filter.sincestring (date-time)NoISO 8601 timestamp.
import_filter.stagestringNoUp to 200 characters.
import_filter.tagstringNoUp to 200 characters.

Response 200

FieldTypeDescription
account_typeenumagency: an agency-level install whose locations are connected one by one. One of: agency, location.
consent_attested_atstring (date-time) or nullWhen the consent attestation was confirmed. Null if made before it was asked.
consent_attested_bystring or nullWho confirmed it: user:<id> for a member, api_key:<id> for an API key.
consent_fieldstring or null
consent_modeenumOne of: crm_field, web_form, existing_relationship, not_sure.
conversation_providerobject or nullbubbl3 as the texting provider for this CRM account, if it was ever set up.
conversation_provider.eligibilityenumInbox channels (HubSpot): not_eligible when the CRM refused the channel for this account; bubbl3 then logs texts on the contact instead. One of: unknown, eligible, not_eligible.
conversation_provider.eligibility_reasonstring or nullWhy the CRM refused the channel.
conversation_provider.enabledboolean
conversation_provider.inbox_idstring or nullInbox channels (HubSpot): the CRM inbox bubbl3’s channel is connected to.
conversation_provider.line_idstring or nullLine id (ln_...).
conversation_provider.pool_idstring or nullPool id (pool_...).
conversation_provider.updated_atstring (date-time)ISO 8601 timestamp.
created_atstring (date-time)ISO 8601 timestamp.
external_account_idstring
external_account_namestring or null
form_idsstring[] or nullFor a Meta Page: the lead forms whose leads come in; empty for every form. Null for the rest.
idstringIntegration connection id (int_...).
import_filterobject
import_filter.liststringUp to 200 characters.
import_filter.objectenumSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
import_filter.ownerstringThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
import_filter.pipelinestringUp to 200 characters.
import_filter.sincestring (date-time)ISO 8601 timestamp.
import_filter.stagestringUp to 200 characters.
import_filter.tagstringUp to 200 characters.
last_errorstring or null
last_sync_atstring (date-time) or nullISO 8601 timestamp.
lead_source_idstring or nullFor a Meta Page: the lead source its leads go through, where its workflow, consent mode and labels are set (/v1/inbound-sources/{id}). Null for the rest.
parent_idstring or nullThe agency connection this location was connected through, if any.
pollingobject or nullFor CRMs bubbl3 checks for changes instead of receiving webhooks (Salesforce): the last check. Null for the rest.
polling.last_changesintegerNew or changed records the last check found. From 0 to 9007199254740991.
polling.last_errorstring or null
polling.last_polled_atstring (date-time) or nullISO 8601 timestamp.
providerstringProvider key, e.g. gohighlevel.
scopesstring[]
statusenumOne of: connected, needs_attention, disconnected.
updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Disconnect an integration​

DELETE /v1/integrations/connections/:id

Revokes the tokens at the provider (unless another connection, in any workspace, uses the same provider account), deletes them, cancels its sync runs, and with remove_imported_contacts=true deletes the contacts it imported (contacts at full access). An inbox channel's account is turned off in the CRM first, best effort.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Query parameters

NameTypeRequiredDescription
remove_imported_contactsenumNoAlso delete the contacts this connection imported (needs contacts at full access). One of: true, false.

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Response 200

FieldTypeDescription
disconnectedenumOne of: true.
idstringIntegration connection id (int_...).
removed_contactsintegerFrom 0 to 9007199254740991.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Import contacts from the provider​

POST /v1/integrations/connections/:id/backfill

Starts a resumable import of the contacts matching the filter (needs contacts at full access). Progress is in the sync runs.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
filterobjectNoDefault {}.
filter.liststringNoUp to 200 characters.
filter.objectenumNoSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
filter.ownerstringNoThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
filter.pipelinestringNoUp to 200 characters.
filter.sincestring (date-time)NoISO 8601 timestamp.
filter.stagestringNoUp to 200 characters.
filter.tagstringNoUp to 200 characters.

Response 202

FieldTypeDescription
countsobject
counts.createdintegerFrom -9007199254740991 to 9007199254740991.
counts.failedintegerFrom -9007199254740991 to 9007199254740991.
counts.mergedintegerFrom -9007199254740991 to 9007199254740991.
counts.seenintegerFrom -9007199254740991 to 9007199254740991.
counts.skippedintegerFrom -9007199254740991 to 9007199254740991.
created_atstring (date-time)ISO 8601 timestamp.
errorstring or null
filterobject
filter.liststringUp to 200 characters.
filter.objectenumSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
filter.ownerstringThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
filter.pipelinestringUp to 200 characters.
filter.sincestring (date-time)ISO 8601 timestamp.
filter.stagestringUp to 200 characters.
filter.tagstringUp to 200 characters.
finished_atstring (date-time) or nullISO 8601 timestamp.
idstring (uuid)
kindenumOne of: backfill, incremental, test.
started_atstring (date-time) or nullISO 8601 timestamp.
statusenumOne of: queued, running, succeeded, failed, cancelled.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Make bubbl3 the texting provider​

PUT /v1/integrations/connections/:id/conversation-provider

For a location connection whose provider supports it (GoHighLevel, HubSpot, and the Intercom and Zendesk channels): messages sent from the CRM's or help desk's conversations go out from this line or pool, through bubbl3's normal send checks, and replies and statuses go back to the CRM. Needs conversations at full access. Turning it off stops new sends; the CRM's SMS provider setting is changed in the CRM. HubSpot also needs inbox_id: bubbl3 connects a channel account for this line or pool to that inbox. When HubSpot refuses the channel (the account's plan, or the permissions granted at connect), the answer is still 200, saved as off with eligibility not_eligible and the reason, and texts keep being logged on the contact.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
enabledbooleanYes
inbox_idstringNoHubSpot: the inbox to connect bubbl3’s channel to (required to turn it on). Up to 200 characters.
line_idstringNoSend from this line.
pool_idstringNoOr from this pool.

Response 200

FieldTypeDescription
account_typeenumagency: an agency-level install whose locations are connected one by one. One of: agency, location.
consent_attested_atstring (date-time) or nullWhen the consent attestation was confirmed. Null if made before it was asked.
consent_attested_bystring or nullWho confirmed it: user:<id> for a member, api_key:<id> for an API key.
consent_fieldstring or null
consent_modeenumOne of: crm_field, web_form, existing_relationship, not_sure.
conversation_providerobject or nullbubbl3 as the texting provider for this CRM account, if it was ever set up.
conversation_provider.eligibilityenumInbox channels (HubSpot): not_eligible when the CRM refused the channel for this account; bubbl3 then logs texts on the contact instead. One of: unknown, eligible, not_eligible.
conversation_provider.eligibility_reasonstring or nullWhy the CRM refused the channel.
conversation_provider.enabledboolean
conversation_provider.inbox_idstring or nullInbox channels (HubSpot): the CRM inbox bubbl3’s channel is connected to.
conversation_provider.line_idstring or nullLine id (ln_...).
conversation_provider.pool_idstring or nullPool id (pool_...).
conversation_provider.updated_atstring (date-time)ISO 8601 timestamp.
created_atstring (date-time)ISO 8601 timestamp.
external_account_idstring
external_account_namestring or null
form_idsstring[] or nullFor a Meta Page: the lead forms whose leads come in; empty for every form. Null for the rest.
idstringIntegration connection id (int_...).
import_filterobject
import_filter.liststringUp to 200 characters.
import_filter.objectenumSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
import_filter.ownerstringThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
import_filter.pipelinestringUp to 200 characters.
import_filter.sincestring (date-time)ISO 8601 timestamp.
import_filter.stagestringUp to 200 characters.
import_filter.tagstringUp to 200 characters.
last_errorstring or null
last_sync_atstring (date-time) or nullISO 8601 timestamp.
lead_source_idstring or nullFor a Meta Page: the lead source its leads go through, where its workflow, consent mode and labels are set (/v1/inbound-sources/{id}). Null for the rest.
parent_idstring or nullThe agency connection this location was connected through, if any.
pollingobject or nullFor CRMs bubbl3 checks for changes instead of receiving webhooks (Salesforce): the last check. Null for the rest.
polling.last_changesintegerNew or changed records the last check found. From 0 to 9007199254740991.
polling.last_errorstring or null
polling.last_polled_atstring (date-time) or nullISO 8601 timestamp.
providerstringProvider key, e.g. gohighlevel.
scopesstring[]
statusenumOne of: connected, needs_attention, disconnected.
updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

A clinic connection's data rule and webhook​

GET /v1/integrations/connections/:id/healthcare

For NexHealth, Healthie, Mindbody, Boulevard, Vagaro, Zenoti and Housecall Pro connections: only name, phone, email, consent and appointment time come in, plus, for the healthcare ones, any extra field bubbl3 staff added under the workspace’s HIPAA add-on. For Vagaro, Zenoti and Housecall Pro, whose webhooks are set up in the provider, callers with full access get the connection’s webhook address.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
extra_fieldsstring[]Extra fields bubbl3 staff added on purpose under the add-on, kept on contacts as fields.phi_<name>; they come in only while the add-on is on.
hipaa_addonbooleanWhether the workspace has the HIPAA add-on (set by bubbl3 staff).
minimum_fieldsstring[]The fields that come in: name, phone, email, consent and appointment time.
providerstringProvider key, e.g. gohighlevel.
ruleenumminimum_fields: a healthcare provider, cut to the minimum by bubbl3 (PRD 9.8). provider_minimum: a provider outside healthcare whose connector reads only the minimum anyway (Vagaro, Housecall Pro). One of: minimum_fields, provider_minimum.
webhookobject
webhook.setupenumregistered: bubbl3 set it up in the provider. manual: paste url into the provider. partner: bubbl3’s own subscription covers it. pending: not set up yet. One of: registered, manual, partner, pending.
webhook.urlstring (uri) or nullFor manual setup, and only for callers with full access: the connection’s own webhook address.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

List a connection's inboxes​

GET /v1/integrations/connections/:id/inboxes

For a CRM whose texting runs through an inbox channel (HubSpot): the inboxes bubbl3's texts can go to. Asks the provider now. When the CRM account doesn't offer the channel (its plan, or the permissions granted at connect), eligible is false with the reason, and texts keep being logged on the contact. Needs conversations at full access.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
dataobject[]
data[].idstringThe CRM's inbox id.
data[].namestring
eligiblebooleanFalse when the CRM refused access to its inboxes for this account.
reasonstring or null

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

List a Meta Page's lead forms​

GET /v1/integrations/connections/:id/lead-forms

The Page’s lead forms, and which of them send their leads to bubbl3 (every form when none is chosen). Asks Meta now.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
all_formsbooleanTrue when no form is chosen, so every form’s leads come in.
dataobject[]
data[].idstringMeta's form id.
data[].namestring or null
data[].selectedbooleanWhether its leads come in (every form does when none is chosen).
data[].statusstring or nullMeta's form status, such as ACTIVE or ARCHIVED.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Choose a Meta Page's lead forms​

PUT /v1/integrations/connections/:id/lead-forms

Only leads from these forms come in; an empty list takes every form. Leads already received stay.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
form_idsstring[]YesThe forms whose leads come in. Empty for every form. Up to 200 items.

Response 200

FieldTypeDescription
account_typeenumagency: an agency-level install whose locations are connected one by one. One of: agency, location.
consent_attested_atstring (date-time) or nullWhen the consent attestation was confirmed. Null if made before it was asked.
consent_attested_bystring or nullWho confirmed it: user:<id> for a member, api_key:<id> for an API key.
consent_fieldstring or null
consent_modeenumOne of: crm_field, web_form, existing_relationship, not_sure.
conversation_providerobject or nullbubbl3 as the texting provider for this CRM account, if it was ever set up.
conversation_provider.eligibilityenumInbox channels (HubSpot): not_eligible when the CRM refused the channel for this account; bubbl3 then logs texts on the contact instead. One of: unknown, eligible, not_eligible.
conversation_provider.eligibility_reasonstring or nullWhy the CRM refused the channel.
conversation_provider.enabledboolean
conversation_provider.inbox_idstring or nullInbox channels (HubSpot): the CRM inbox bubbl3’s channel is connected to.
conversation_provider.line_idstring or nullLine id (ln_...).
conversation_provider.pool_idstring or nullPool id (pool_...).
conversation_provider.updated_atstring (date-time)ISO 8601 timestamp.
created_atstring (date-time)ISO 8601 timestamp.
external_account_idstring
external_account_namestring or null
form_idsstring[] or nullFor a Meta Page: the lead forms whose leads come in; empty for every form. Null for the rest.
idstringIntegration connection id (int_...).
import_filterobject
import_filter.liststringUp to 200 characters.
import_filter.objectenumSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
import_filter.ownerstringThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
import_filter.pipelinestringUp to 200 characters.
import_filter.sincestring (date-time)ISO 8601 timestamp.
import_filter.stagestringUp to 200 characters.
import_filter.tagstringUp to 200 characters.
last_errorstring or null
last_sync_atstring (date-time) or nullISO 8601 timestamp.
lead_source_idstring or nullFor a Meta Page: the lead source its leads go through, where its workflow, consent mode and labels are set (/v1/inbound-sources/{id}). Null for the rest.
parent_idstring or nullThe agency connection this location was connected through, if any.
pollingobject or nullFor CRMs bubbl3 checks for changes instead of receiving webhooks (Salesforce): the last check. Null for the rest.
polling.last_changesintegerNew or changed records the last check found. From 0 to 9007199254740991.
polling.last_errorstring or null
polling.last_polled_atstring (date-time) or nullISO 8601 timestamp.
providerstringProvider key, e.g. gohighlevel.
scopesstring[]
statusenumOne of: connected, needs_attention, disconnected.
updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Get a connection's field mappings​

GET /v1/integrations/connections/:id/mappings

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
dataobject[]
data[].directionenumOne of: import, writeback, both. Default "import".
data[].external_fieldstringUp to 200 characters.
data[].local_fieldstring
data[].transformenumOne of: none, trim, lowercase. Default "none".
defaultsobject[]
defaults[].directionenumOne of: import, writeback, both. Default "import".
defaults[].external_fieldstringUp to 200 characters.
defaults[].local_fieldstring
defaults[].transformenumOne of: none, trim, lowercase. Default "none".

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Replace a connection's field mappings​

PUT /v1/integrations/connections/:id/mappings

Overrides the defaults per provider field. Applies to the next import.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
mappingsobject[]YesUp to 200 items.
mappings[].directionenumNoOne of: import, writeback, both. Default "import".
mappings[].external_fieldstringYesUp to 200 characters.
mappings[].local_fieldstringYes
mappings[].transformenumNoOne of: none, trim, lowercase. Default "none".

Response 200

FieldTypeDescription
dataobject[]
data[].directionenumOne of: import, writeback, both. Default "import".
data[].external_fieldstringUp to 200 characters.
data[].local_fieldstring
data[].transformenumOne of: none, trim, lowercase. Default "none".
defaultsobject[]
defaults[].directionenumOne of: import, writeback, both. Default "import".
defaults[].external_fieldstringUp to 200 characters.
defaults[].local_fieldstring
defaults[].transformenumOne of: none, trim, lowercase. Default "none".

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Count the contacts a filter would import​

POST /v1/integrations/connections/:id/preview

Asks the provider now. Nothing is imported.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
filterobjectNoDefault {}.
filter.liststringNoUp to 200 characters.
filter.objectenumNoSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
filter.ownerstringNoThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
filter.pipelinestringNoUp to 200 characters.
filter.sincestring (date-time)NoISO 8601 timestamp.
filter.stagestringNoUp to 200 characters.
filter.tagstringNoUp to 200 characters.

Response 200

FieldTypeDescription
at_leastbooleanTrue when the provider has no total and counting stopped at count (Pipedrive): at least this many match.
countintegerContacts the filter matches in the provider now. From 0 to 9007199254740991.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

List an agency connection's locations​

GET /v1/integrations/connections/:id/sub-accounts

For an agency-level install (GoHighLevel): the locations the app is installed on, and which are connected in this workspace. Asks the provider now.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
dataobject[]
data[].connection_idstring or nullThe live connection for this location in this workspace, if connected.
data[].idstringThe provider's location id.
data[].namestring or null

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Connect a location of an agency connection​

POST /v1/integrations/connections/:id/sub-accounts

Uses the agency's tokens to get the location's own, and creates (or reconnects) that location's connection in this workspace. Consent starts at not_sure. The location records a copy of the agency's consent attestation; an agency connected before attestations were asked must reconnect first (400).

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
sub_account_idstringYesThe provider's location id. Up to 200 characters.

Response 201

FieldTypeDescription
account_typeenumagency: an agency-level install whose locations are connected one by one. One of: agency, location.
consent_attested_atstring (date-time) or nullWhen the consent attestation was confirmed. Null if made before it was asked.
consent_attested_bystring or nullWho confirmed it: user:<id> for a member, api_key:<id> for an API key.
consent_fieldstring or null
consent_modeenumOne of: crm_field, web_form, existing_relationship, not_sure.
conversation_providerobject or nullbubbl3 as the texting provider for this CRM account, if it was ever set up.
conversation_provider.eligibilityenumInbox channels (HubSpot): not_eligible when the CRM refused the channel for this account; bubbl3 then logs texts on the contact instead. One of: unknown, eligible, not_eligible.
conversation_provider.eligibility_reasonstring or nullWhy the CRM refused the channel.
conversation_provider.enabledboolean
conversation_provider.inbox_idstring or nullInbox channels (HubSpot): the CRM inbox bubbl3’s channel is connected to.
conversation_provider.line_idstring or nullLine id (ln_...).
conversation_provider.pool_idstring or nullPool id (pool_...).
conversation_provider.updated_atstring (date-time)ISO 8601 timestamp.
created_atstring (date-time)ISO 8601 timestamp.
external_account_idstring
external_account_namestring or null
form_idsstring[] or nullFor a Meta Page: the lead forms whose leads come in; empty for every form. Null for the rest.
idstringIntegration connection id (int_...).
import_filterobject
import_filter.liststringUp to 200 characters.
import_filter.objectenumSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
import_filter.ownerstringThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
import_filter.pipelinestringUp to 200 characters.
import_filter.sincestring (date-time)ISO 8601 timestamp.
import_filter.stagestringUp to 200 characters.
import_filter.tagstringUp to 200 characters.
last_errorstring or null
last_sync_atstring (date-time) or nullISO 8601 timestamp.
lead_source_idstring or nullFor a Meta Page: the lead source its leads go through, where its workflow, consent mode and labels are set (/v1/inbound-sources/{id}). Null for the rest.
parent_idstring or nullThe agency connection this location was connected through, if any.
pollingobject or nullFor CRMs bubbl3 checks for changes instead of receiving webhooks (Salesforce): the last check. Null for the rest.
polling.last_changesintegerNew or changed records the last check found. From 0 to 9007199254740991.
polling.last_errorstring or null
polling.last_polled_atstring (date-time) or nullISO 8601 timestamp.
providerstringProvider key, e.g. gohighlevel.
scopesstring[]
statusenumOne of: connected, needs_attention, disconnected.
updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

List a connection's sync runs​

GET /v1/integrations/connections/:id/sync-runs

The 50 most recent imports, newest first.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
dataobject[]
data[].countsobject
data[].counts.createdintegerFrom -9007199254740991 to 9007199254740991.
data[].counts.failedintegerFrom -9007199254740991 to 9007199254740991.
data[].counts.mergedintegerFrom -9007199254740991 to 9007199254740991.
data[].counts.seenintegerFrom -9007199254740991 to 9007199254740991.
data[].counts.skippedintegerFrom -9007199254740991 to 9007199254740991.
data[].created_atstring (date-time)ISO 8601 timestamp.
data[].errorstring or null
data[].filterobject
data[].filter.liststringUp to 200 characters.
data[].filter.objectenumSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
data[].filter.ownerstringThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
data[].filter.pipelinestringUp to 200 characters.
data[].filter.sincestring (date-time)ISO 8601 timestamp.
data[].filter.stagestringUp to 200 characters.
data[].filter.tagstringUp to 200 characters.
data[].finished_atstring (date-time) or nullISO 8601 timestamp.
data[].idstring (uuid)
data[].kindenumOne of: backfill, incremental, test.
data[].started_atstring (date-time) or nullISO 8601 timestamp.
data[].statusenumOne of: queued, running, succeeded, failed, cancelled.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Test an integration connection​

POST /v1/integrations/connections/:id/test

Makes one read call to the provider with the stored tokens.

Path parameters

NameTypeRequiredDescription
idstringYesIntegration connection id (int_...).

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Response 200

FieldTypeDescription
account_namestring or null
errorstring or null
okboolean

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Start connecting an integration​

GET /v1/integrations/:provider/authorize

Returns the provider's consent page. After consent the provider redirects to the callback, which hands the code to the dashboard's connect page; that page completes the connection for the signed-in user. Providers whose consent page is on the customer's own site (Shopify) need account, the store's myshopify.com address; anything that isn't one is a 400.

Path parameters

NameTypeRequiredDescription
providerstringYesProvider key, e.g. gohighlevel.

Query parameters

NameTypeRequiredDescription
accountstringNoFor providers with authorize_account in the catalog (Shopify): the store the consent page is on, like acme.myshopify.com. Ignored by other providers. Up to 200 characters.

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.

Response 200

FieldTypeDescription
urlstring (uri)The provider's consent page. Open it in the browser.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

OAuth callback​

GET /v1/integrations/:provider/callback

Providers redirect here after consent. Nothing is exchanged here: a well-formed, signed, unexpired state is passed with the code to the dashboard's connect page in the URL fragment, and the signed-in user completes the connection there. Anything else redirects to the same error page.

Path parameters

NameTypeRequiredDescription
providerstringYesProvider key, e.g. gohighlevel.

Query parameters

NameTypeRequiredDescription
statestringNoUp to 4096 characters.
codestringNoUp to 4096 characters.
auth_codestringNoUp to 4096 characters.
errorstringNoUp to 512 characters.
locationstringNoUp to 16 characters.
accounts-serverstringNoUp to 200 characters.
shopstringNoUp to 200 characters.
hmacstringNoUp to 200 characters.

Errors: 302. See errors for the shape and codes.

Provider uninstall callback​

DELETE /v1/integrations/:provider/callback

Pipedrive calls the app's callback URL with DELETE when a user uninstalls bubbl3, authenticated with the app's own client id and secret. bubbl3 disconnects that user's connection (contacts stay). Every rejection is the same 403; a verified callback already stored is answered with received: 0.

Path parameters

NameTypeRequiredDescription
providerstringYesProvider key, e.g. gohighlevel.

Response 200

FieldTypeDescription
receivedintegerFrom 0 to 9007199254740991.

Errors: 403, 429. See errors for the shape and codes.

Finish connecting an integration​

POST /v1/integrations/:provider/complete

Exchanges the provider's code for the signed-in user who started the connection, in the same workspace. The state is single use. Any state that is invalid, expired, used, for another provider, or from another user or workspace gets the same 400. consent_attested: true is required (400 without it): the connection records who confirmed that everyone the business sends has agreed to receive texts, and when, and the confirmation is audited.

Path parameters

NameTypeRequiredDescription
providerstringYesProvider key, e.g. gohighlevel.

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
account_typeenumNoFor providers with agency installs (GoHighLevel): whether the code is for the agency or one location. One of: agency, location.
codestringYesUp to 4096 characters.
consent_attestedenumYesRequired: confirms "Everyone we send to bubbl3 has agreed to receive texts from us." bubbl3 records who confirmed it and when. One of: true.
regionstringNoFor providers with data centres (Zoho) or stores (Shopify): the region or store the callback's fragment named (oauth_region).
statestringYesUp to 4096 characters.

Response 200

FieldTypeDescription
account_typeenumagency: an agency-level install whose locations are connected one by one. One of: agency, location.
consent_attested_atstring (date-time) or nullWhen the consent attestation was confirmed. Null if made before it was asked.
consent_attested_bystring or nullWho confirmed it: user:<id> for a member, api_key:<id> for an API key.
consent_fieldstring or null
consent_modeenumOne of: crm_field, web_form, existing_relationship, not_sure.
conversation_providerobject or nullbubbl3 as the texting provider for this CRM account, if it was ever set up.
conversation_provider.eligibilityenumInbox channels (HubSpot): not_eligible when the CRM refused the channel for this account; bubbl3 then logs texts on the contact instead. One of: unknown, eligible, not_eligible.
conversation_provider.eligibility_reasonstring or nullWhy the CRM refused the channel.
conversation_provider.enabledboolean
conversation_provider.inbox_idstring or nullInbox channels (HubSpot): the CRM inbox bubbl3’s channel is connected to.
conversation_provider.line_idstring or nullLine id (ln_...).
conversation_provider.pool_idstring or nullPool id (pool_...).
conversation_provider.updated_atstring (date-time)ISO 8601 timestamp.
created_atstring (date-time)ISO 8601 timestamp.
external_account_idstring
external_account_namestring or null
form_idsstring[] or nullFor a Meta Page: the lead forms whose leads come in; empty for every form. Null for the rest.
idstringIntegration connection id (int_...).
import_filterobject
import_filter.liststringUp to 200 characters.
import_filter.objectenumSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
import_filter.ownerstringThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
import_filter.pipelinestringUp to 200 characters.
import_filter.sincestring (date-time)ISO 8601 timestamp.
import_filter.stagestringUp to 200 characters.
import_filter.tagstringUp to 200 characters.
last_errorstring or null
last_sync_atstring (date-time) or nullISO 8601 timestamp.
lead_source_idstring or nullFor a Meta Page: the lead source its leads go through, where its workflow, consent mode and labels are set (/v1/inbound-sources/{id}). Null for the rest.
parent_idstring or nullThe agency connection this location was connected through, if any.
pollingobject or nullFor CRMs bubbl3 checks for changes instead of receiving webhooks (Salesforce): the last check. Null for the rest.
polling.last_changesintegerNew or changed records the last check found. From 0 to 9007199254740991.
polling.last_errorstring or null
polling.last_polled_atstring (date-time) or nullISO 8601 timestamp.
providerstringProvider key, e.g. gohighlevel.
scopesstring[]
statusenumOne of: connected, needs_attention, disconnected.
updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.

Connect an integration with an API key​

POST /v1/integrations/:provider/connect

For providers the customer connects with their own API key (ActiveCampaign, Copper, Freshsales, Lofty; the catalog's key_fields says what each needs). bubbl3 checks the credentials with one read call to the provider, then makes the connection (or reconnects the account's live one) and keeps the key sealed like an OAuth token. Credentials the provider refuses are a 400 with the reason, and nothing is stored. consent_attested: true is required (400 without it) and recorded with who and when, as for a one-click connection. The key is never returned. Limited to 10 attempts a minute per workspace (bursts of 5); past that a 429 with Retry-After, and the provider isn't called. A provider whose connect checks a staff login (Mindbody) also allows 5 failed checks an hour per account, whichever workspace tries; past that a 429 with Retry-After too.

Path parameters

NameTypeRequiredDescription
providerstringYesProvider key, e.g. gohighlevel.

Headers

NameTypeRequiredDescription
x-workspace-idstringNoWorkspace for session (JWT) callers. API keys carry their own workspace.
idempotency-keystringNoMakes the write safe to retry for 24 hours. 1 to 255 printable characters. Keys starting with outreach:, workflow: or agent: are reserved for messages bubbl3 sends itself and are refused with 400. Up to 255 characters.

Request body

FieldTypeRequiredDescription
account_idstringNoThe account bubbl3 connects to at the provider: NexHealth's location id, Mindbody's site id, Boulevard's business id, Vagaro's business id, Zenoti's center id. Up to 100 characters.
account_urlstringNoActiveCampaign: the account's API URL (https://youraccount.api-us1.com). Up to 300 characters.
api_keystringNoThe API key from the provider. Up to 512 characters.
api_secretstringNoThe secret that goes with the key (Boulevard's API secret, Vagaro's client secret). Up to 512 characters.
consent_attestedenumYesRequired: confirms "Everyone we send to bubbl3 has agreed to receive texts from us." bubbl3 records who confirmed it and when. One of: true.
domainstringNoFreshsales: the account's bundle domain (yourcompany.myfreshworks.com). Up to 300 characters.
passwordstringNoMindbody: that staff login’s password, used once for the check. Never stored. Up to 200 characters.
user_emailstring (email)NoCopper: the email of the Copper user the key belongs to. Up to 254 characters.
usernamestringNoMindbody: a staff login for the site, checked once to confirm the site is the customer's. Never stored. Up to 200 characters.

Response 200

FieldTypeDescription
account_typeenumagency: an agency-level install whose locations are connected one by one. One of: agency, location.
consent_attested_atstring (date-time) or nullWhen the consent attestation was confirmed. Null if made before it was asked.
consent_attested_bystring or nullWho confirmed it: user:<id> for a member, api_key:<id> for an API key.
consent_fieldstring or null
consent_modeenumOne of: crm_field, web_form, existing_relationship, not_sure.
conversation_providerobject or nullbubbl3 as the texting provider for this CRM account, if it was ever set up.
conversation_provider.eligibilityenumInbox channels (HubSpot): not_eligible when the CRM refused the channel for this account; bubbl3 then logs texts on the contact instead. One of: unknown, eligible, not_eligible.
conversation_provider.eligibility_reasonstring or nullWhy the CRM refused the channel.
conversation_provider.enabledboolean
conversation_provider.inbox_idstring or nullInbox channels (HubSpot): the CRM inbox bubbl3’s channel is connected to.
conversation_provider.line_idstring or nullLine id (ln_...).
conversation_provider.pool_idstring or nullPool id (pool_...).
conversation_provider.updated_atstring (date-time)ISO 8601 timestamp.
created_atstring (date-time)ISO 8601 timestamp.
external_account_idstring
external_account_namestring or null
form_idsstring[] or nullFor a Meta Page: the lead forms whose leads come in; empty for every form. Null for the rest.
idstringIntegration connection id (int_...).
import_filterobject
import_filter.liststringUp to 200 characters.
import_filter.objectenumSalesforce: import only Leads or only Contacts (both when left out). One of: lead, contact.
import_filter.ownerstringThe CRM owner's id (HubSpot's hubspot_owner_id). Up to 200 characters.
import_filter.pipelinestringUp to 200 characters.
import_filter.sincestring (date-time)ISO 8601 timestamp.
import_filter.stagestringUp to 200 characters.
import_filter.tagstringUp to 200 characters.
last_errorstring or null
last_sync_atstring (date-time) or nullISO 8601 timestamp.
lead_source_idstring or nullFor a Meta Page: the lead source its leads go through, where its workflow, consent mode and labels are set (/v1/inbound-sources/{id}). Null for the rest.
parent_idstring or nullThe agency connection this location was connected through, if any.
pollingobject or nullFor CRMs bubbl3 checks for changes instead of receiving webhooks (Salesforce): the last check. Null for the rest.
polling.last_changesintegerNew or changed records the last check found. From 0 to 9007199254740991.
polling.last_errorstring or null
polling.last_polled_atstring (date-time) or nullISO 8601 timestamp.
providerstringProvider key, e.g. gohighlevel.
scopesstring[]
statusenumOne of: connected, needs_attention, disconnected.
updated_atstring (date-time)ISO 8601 timestamp.

Errors: 400, 401, 403, 404, 409, 413, 415, 429, 500. See errors for the shape and codes.