Integration Connections
Connect an Integration
Store the workspace’s own credentials for a tax, CRM, or storage provider, sealed at rest; becomes the category’s single active connection.
POST
Connect (or replace) a tax/CRM/storage integration
Stores the workspace’s own credentials for one tax, CRM, or storage provider.
The config is sealed as a single encrypted blob; secrets are write-only and
never returned. Each call inserts a new connection row with a fresh
id and
deactivates every active connection in the same category first — not only
the same provider. A workspace therefore has at most one active provider per
category: connecting ziptax disconnects an active taxjar or avalara, and
reconnecting the same provider to rotate credentials returns a new id with
created_at equal to updated_at. Do not persist a connection id and expect
it to survive a reconnect; the deactivated rows are kept but never listed.
Owner/admin only — API-key callers are not role-gated. Check vault_ready on
List Integration Connections
first; once a HubSpot connection exists, verify it with
Sync CRM Now.
Request Body
Any
endpoint, api_url, or base_url value is validated before storage. It
must always parse as an http or https URL. On the hosted (multi-tenant)
deployment it must additionally use https and its host must resolve to a
public address — loopback, link-local, private, and other reserved ranges are
rejected. Self-hosted deployments skip the https and address checks.
Example Request
Response
Returns201 Created with the secret-free projection of the new connection.
Because a connect always inserts a new row, created_at and updated_at are
the same instant and the id differs from any previous connection for the
same provider.
Fields
Errors
Errors use the standard envelope — see Errors.
Authorizations
Tenant API key obtained from POST /auth/register or POST /v1/developer/keys.
Body
application/json
Response
Connected.
Secret-free projection of a BYO tax/CRM/storage connection.