Skip to the content
Menu: Connections

Connections

Your own systems (a calendar, a CRM, a shop, an MCP server) that the avatar uses through actions.

GET/v1/connections

List your connected systems

listConnectionsconnections:writeread: 600/min per key

Every connection of the organisation with its status and health (the share of calls answered, the median time, the last problem in plain words). Never a key: only a masked hint.

Returns

200 The connections, and whether the switch is on. data is ConnectionList.

Fields of data
  • onbooleanrequired

    The organisation's actions.connectors switch: off, nothing connected is used and nothing new can be connected.

  • connectionsConnection[]required

Errors

invalid_requestunauthorizedforbiddenupgrade_requiredrate_limitedserver_error

Request

curl "https://app.zentiqai.com/v1/connections" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"
Example answer
Response
{
  "data": {
    "on": true,
    "connections": [
      {
        "id": "conn_123",
        "kind": "mcp",
        "name": "Zoe",
        "label": "…",
        "status": "pending",
        "statusWords": "…"
      }
    ]
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}
POST/v1/connections

Connect one of your systems

createConnectionconnections:writewrite: 120/min per key

Connects a system the avatar will use through actions: a remote MCP server (no sign-in, a bearer token, or OAuth), Cal.com (an API key), HubSpot (a private app's token), Shopify (the shop and an Admin API token), a calendar (google_calendar, microsoft_calendar: a sign-in, once Zentiq's app is set up for them). A key is checked with a read-only call before it is saved, then sealed and never returned: only a masked hint. An MCP server's tools are read first. A sign-in answers with authorizeUrl, where an owner approves it while signed in to the console; until then the connection is pending. The address of an MCP server must be public https on the standard port. Off (403) while the organisation's actions.connectors switch is off. Connecting your own systems is on Plus and up: on a plan without it, 403 upgrade_required with details.reason plan_required and details.plan.

Body

  • kind"mcp" | "calcom" | "hubspot" | "shopify" | "google_calendar" | "microsoft_calendar" | "slack" | "zapier"required

    Which system.

  • labelstring | null

    A plain name (never a key).

    at most 60 characters

  • urlstring | null

    mcp: the server's public https MCP address (standard port; private and local addresses are refused).

  • auth"none" | "bearer" | "oauth" | null

    mcp: how it signs in. oauth: the answer's authorizeUrl is where an owner approves it, signed in to the console.

  • tokenstring | null

    mcp (bearer), hubspot (a private app's access token) or shopify (an older app's Admin API access token, made in the Shopify admin before 2026). Write-only: checked, sealed in the vault and never returned (only a masked hint).

  • apiKeystring | null

    calcom: a Cal.com API key. Write-only: checked, sealed in the vault and never returned (only a masked hint).

  • eventTypeIdstring | number | null

    calcom: the event type's number.

  • timeZonestring | null

    calcom, google_calendar, microsoft_calendar: an IANA time zone, like America/New_York.

  • shopstring | null

    shopify: the shop's address, like your-shop.myshopify.com.

  • clientIdstring | null

    shopify: a Dev Dashboard app's Client ID (the app's Settings), with clientSecret instead of token. Zentiq asks Shopify for the app's 24-hour tokens itself (the client credentials grant: the store must be in the app's own Shopify organisation).

    at most 100 characters

  • clientSecretstring | null

    shopify: a Dev Dashboard app's Client secret, with clientId. It also verifies the order notifications Shopify sends for order emails. Write-only: checked, sealed in the vault and never returned (only a masked hint).

  • apiSecretstring | null

    shopify with token: the older app's API secret key, which only order emails need (Shopify signs its order notifications with it). Write-only: checked, sealed in the vault and never returned (only a masked hint).

  • propertiesstring | string[] | null

    hubspot: the contact properties the avatar may read (HubSpot's own names).

  • calendarIdstring | null

    google_calendar: which calendar ("primary" unless named).

  • hoursmap of string | null

    google_calendar, microsoft_calendar: opening hours per day, like { "mon": "09:00-17:00" } (a day left out is closed).

  • slotMinutesnumber | null
  • lengthMinutesnumber | null
  • titlestring | null

    google_calendar, microsoft_calendar: a booking's title.

    at most 60 characters

Returns

201 Connected (or waiting for its sign-in). data is ConnectionCreated.

Fields of data
  • connectionConnectionrequired

    One of the organisation's connected systems. Never a key or a token.

  • authorizeUrlstring | nullrequired

    For a sign-in: where an owner approves it, signed in to the console. null when it is connected already.

Errors

invalid_requestunauthorizedforbiddenupgrade_requiredconflictrate_limitedserver_error

Request

curl -X POST "https://app.zentiqai.com/v1/connections" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "mcp"
}'
Example answer
Response
{
  "data": {
    "connection": {
      "id": "conn_123",
      "kind": "mcp",
      "name": "Zoe",
      "label": "…",
      "status": "pending",
      "statusWords": "…"
    },
    "authorizeUrl": "https://www.example.com"
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}
DELETE/v1/connections/{id}

Disconnect a system

deleteConnectionconnections:writewrite: 120/min per key

Deletes the connection and its key. Every action that used it is switched off (actionsOff says how many). Works while the switch is off, on any plan.

Path parameters

  • idstringrequired

    Connection id (conn_…).

Returns

200 Disconnected. data is ConnectionDeleted.

Fields of data
  • idstringrequired
  • actionsOffintegerrequired

    Actions that used it, now switched off.

Errors

invalid_requestunauthorizedforbiddenupgrade_requirednot_foundrate_limitedserver_error

Request

curl -X DELETE "https://app.zentiqai.com/v1/connections/conn_123" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"
Example answer
Response
{
  "data": {
    "id": "…",
    "actionsOff": 1
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}
POST/v1/connections/{id}/test

Test a connection

testConnectionconnections:writewrite: 120/min per key

A read-only call that proves the connection still works (an MCP server's tools are read again), counted on its health. It never changes anything. On a plan without connecting your own systems (Plus and up): 403 upgrade_required with details.reason plan_required.

Path parameters

  • idstringrequired

    Connection id (conn_…).

Returns

200 How it went. data is ConnectionTest.

Fields of data
  • okbooleanrequired
  • wordsstringrequired
  • connectionConnectionrequired

    One of the organisation's connected systems. Never a key or a token.

Errors

invalid_requestunauthorizedforbiddenupgrade_requirednot_foundconflictrate_limitedserver_error

Request

curl -X POST "https://app.zentiqai.com/v1/connections/conn_123/test" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"
Example answer
Response
{
  "data": {
    "ok": true,
    "words": "…",
    "connection": {
      "id": "conn_123",
      "kind": "mcp",
      "name": "Zoe",
      "label": "…",
      "status": "pending",
      "statusWords": "…"
    }
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}