Skip to main content
A connection lets an identity act in a third-party account the organization has authorized. There is no fixed list of supported apps — search the catalogue.
Three calls, in this order:
  1. Find the app. GET /v1/connections/apps?search=… searches the catalogue — over a thousand apps — and answers with the slug every later call takes as connector.
  2. An auth config is org-level and says how that app authenticates. Created once, shared by every identity that connects it.
  3. A connection is identity-level: the connected account itself, minted against an auth config.
A connected account is the provider’s object, not a row held here — a read reconciles state against the provider before answering.

Apps

The app object

string
Always connection_app.
string
The app’s id. This is what connector takes.
string
The app’s display name.
string
One line about what the app is.
string[]
What the app is used for — e.g. customer-support, crm.
string[]
Which setup paths work for this app. managed_oauth means one call and no credentials of your own; oauth means registering an app with the vendor first; api_key means the person authorizing types a key on the hosted page.
number
How many operations the app publishes in total.

Search apps

GET /v1/connections/apps — scope agents:read
Matches an app’s name, id or description. Omit it to list the most-used apps.
number
Page size, 1–100.
string
The next_cursor of the previous page. Opaque — it is not a row id.

Retrieve an app

GET /v1/connections/apps/{slug} — scope agents:read Everything the two setup calls need before either is made. not_found (404) for an id the catalogue does not know — this is what replaced the old connector enum.
string[]
The operations an auth config pins when tools is not given.
object[]
What the person authorizing must still supply — an account subdomain, a region, a workspace. Each has name, label, description and required. Pass them to POST /v1/connections as fields, or leave them and the hosted page asks.

Auth configs

The auth config object

string
Unique id (e.g. ac_01H...).
string
Always auth_config.
string
The app this config authenticates — an app slug.
string
managed_oauth, oauth, or api_key.
string[]
The scopes the config actually carries, read back after creation — not the ones requested.
string[]
The operations a connection made from this config may call. Everything else is refused.
object[]
What POST /v1/connections will still be asked for. Same shape as on the app.
string
Creation timestamp.

Create an auth config

POST /v1/connections/auth_configs — scope agents:write
string
required
An app slug from the catalogue.
string
managed_oauth (default), oauth, or api_key. Check the app’s auth first — not every app offers every path.
string[]
Scopes to request. Ignored where the app’s managed OAuth app is registered with a fixed set.
string[]
Pin the callable operations. Omitted, the app’s default_tools are pinned. This is a hard boundary — anything not pinned does not exist to the agent.
string
Your own OAuth client id. Required when auth is oauth.

List auth configs

GET /v1/connections/auth_configs — scope agents:read. Returns a paginated list.

Delete an auth config

DELETE /v1/connections/auth_configs/{id} — scope agents:write. Connections already minted against it stop refreshing.

Connections

The connection object

string
Unique id (e.g. ca_01H...).
string
Always connection.
string
The auth config it was minted against.
string
The persona that acts in the account.
string
The app the account is in — an app slug.
string
initiated — minted, waiting for someone to complete the Connect Link. active — authorized and usable. failed — authorization did not complete. disconnected — the stored credential was dropped.
string | null
Why a failed or disconnected account got there.
The hosted authorization URL. Present only while initiated.
This URL is not on a Vetta domain. The authorization page is served by the connection provider, on the provider’s own host, carrying the provider’s name and a “Secured by” badge. Hand it to an end user; do not treat it as part of your product’s surface. See Connections for what the provider’s own white-labelling does and does not cover.
When that link stops working.
string | null
Last successful credential refresh.
string
Creation timestamp.

Connect an account

POST /v1/connections — scope billing:write Mints the connected account and its Connect Link; the account starts initiated. This is billing:write on the wire and not agents:write because a managed account is a per-account charge at the provider.
string
required
The ac_ config to mint against.
string
required
The idn_ identity that will act in the account.
object
Values for the config’s connect_fields, e.g. { "subdomain": "acme" }. Omitted, the hosted page asks the person instead — so this is a convenience, never a gate.
Errorsvalidation_failed (400) when identity is not an idn_ id or auth_config_id is not an ac_ id; not_found (404) for an unknown auth config or identity; insufficient_scope (403) without billing:write; insufficient_credits (402).

List connections

GET /v1/connections — scope agents:read
string
Filter to one persona.
Returns a paginated list of connection objects.

Retrieve a connection

GET /v1/connections/{id} — scope agents:read Reconciles status against the provider before answering — this read is the refresh. Poll it to watch an initiated account become active, rather than assuming the Connect Link was completed. There is no connection.* webhook yet, so polling this route is the only way to learn that a person finished authorizing.

Disconnect

DELETE /v1/connections/{id} — scope agents:write Revoke. The provider drops the stored credential and every later call through the connection is refused. Returns the standard deleted envelope.

Identities

The persona a connection is bound to.