API reference
Connectors
/ v1/ orgs/ :orgId/ connectorsLists connectors. Credentials are never returned. Also limit, the plan's maxConnectors.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- connectors:read
Path parameters
orgIdOrganization id (
org_…).
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/connectors' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
connectors: {
toolCount: number
omittedTools: number
oauth?: {
server: null | string
registered: boolean | null
people?: number
signIn: "user" | "shared"
connected: boolean
}
transport: "http" | "sse"
hasSecret: boolean
url: string
name: string
status?: "ok" | "unknown" | "error"
createdAt?: number
updatedAt?: number
orgId: string
slug: string
createdBy: string
accessExpiresAt?: number
connectorId: string
enabled?: boolean
lastError?: string
authType: "header" | "none" | "oauth" | "bearer"
headerName?: string
signIn?: "user" | "shared"
lastCheckedAt?: number
}[]
limit: number
}/ v1/ orgs/ :orgId/ connectors/ :connectorIdA connector with its cached tools and the names they have on the MCP server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- connectors:read
Path parameters
orgIdOrganization id (
org_…).connectorIdConnector id (
con_…).
Errors
404Connector not found
curl 'https://api.cactive.com.au/v1/orgs/{orgId}/connectors/{connectorId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
connector: {
toolCount: number
omittedTools: number
oauth?: {
server: null | string
registered: boolean | null
people?: number
signIn: "user" | "shared"
connected: boolean
}
transport: "http" | "sse"
hasSecret: boolean
url: string
name: string
status?: "ok" | "unknown" | "error"
createdAt?: number
updatedAt?: number
orgId: string
slug: string
createdBy: string
accessExpiresAt?: number
connectorId: string
enabled?: boolean
lastError?: string
authType: "header" | "none" | "oauth" | "bearer"
headerName?: string
signIn?: "user" | "shared"
lastCheckedAt?: number
}
tools: {
exposedName: string
name: string
title?: string
description?: string
inputSchema: {
[key: string]: unknown
}
}[]
}/ v1/ orgs/ :orgId/ connectorsRegisters a remote MCP server.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- connectors:write
Path parameters
orgIdOrganization id (
org_…).
Request body
namestringrequired1–64 characters. Trimmed.
slugstringrequiredMatches
^[a-z](?:[a-z0-9-]{0,22}[a-z0-9])?$. Trimmed.urlstringrequired1–2,048 characters. Trimmed.
authType"none" | "bearer" | "header" | "oauth"Default
"none".transport"http" | "sse"Default
"http".headerNamestringTrimmed.
secretstring1–4,096 characters. Matches
^[\x20-\x7E]+$. Trimmed.oauthClientIdstring1–512 characters. Trimmed.
oauthClientSecretstring1–4,096 characters. Matches
^[\x20-\x7E]+$. Trimmed.signIn"shared" | "user"Default
"shared".
Also checked: Enter the credential. Enter a valid header name (for example X-API-Key).
Errors
400An organization can have up to … connectors.404Connector not found409Slug "…" is already in use.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/connectors' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"slug": "example",
"url": "https://example.com"
}'Response 201
{
connector: {
toolCount: number
omittedTools: number
oauth?: {
server: null | string
registered: boolean | null
people?: number
signIn: "user" | "shared"
connected: boolean
}
transport: "http" | "sse"
hasSecret: boolean
url: string
name: string
status?: "ok" | "unknown" | "error"
createdAt?: number
updatedAt?: number
orgId: string
slug: string
createdBy: string
accessExpiresAt?: number
connectorId: string
enabled?: boolean
lastError?: string
authType: "header" | "none" | "oauth" | "bearer"
headerName?: string
signIn?: "user" | "shared"
lastCheckedAt?: number
}
}/ v1/ orgs/ :orgId/ connectors/ :connectorId/ testConnects to the server and caches its tool list. A failed check keeps the last good list and records the error.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- connectors:write
Path parameters
orgIdOrganization id (
org_…).connectorIdConnector id (
con_…).
Errors
404Connector not found
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/connectors/{connectorId}/test' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
connector: {
toolCount: number
omittedTools: number
oauth?: {
server: null | string
registered: boolean | null
people?: number
signIn: "user" | "shared"
connected: boolean
}
transport: "http" | "sse"
hasSecret: boolean
url: string
name: string
status?: "ok" | "unknown" | "error"
createdAt?: number
updatedAt?: number
orgId: string
slug: string
createdBy: string
accessExpiresAt?: number
connectorId: string
enabled?: boolean
lastError?: string
authType: "header" | "none" | "oauth" | "bearer"
headerName?: string
signIn?: "user" | "shared"
lastCheckedAt?: number
}
}/ v1/ orgs/ :orgId/ connectors/ :connectorIdRenames, enables or disables a connector, or replaces its credential.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- connectors:write
Path parameters
orgIdOrganization id (
org_…).connectorIdConnector id (
con_…).
Request body
namestring1–64 characters. Trimmed.
enabledbooleansecretstring1–4,096 characters. Matches
^[\x20-\x7E]+$. Trimmed.signIn"shared" | "user"
Also checked: Nothing to update.
Errors
400Only OAuth connectors have a sign-in mode.400This connector doesn't use a credential.404Connector not found
curl -X PATCH 'https://api.cactive.com.au/v1/orgs/{orgId}/connectors/{connectorId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"enabled": true,
"secret": "example"
}'Response 200
{
connector: {
toolCount: number
omittedTools: number
oauth?: {
server: null | string
registered: boolean | null
people?: number
signIn: "user" | "shared"
connected: boolean
}
transport: "http" | "sse"
hasSecret: boolean
url: string
name: string
status?: "ok" | "unknown" | "error"
createdAt?: number
updatedAt?: number
orgId: string
slug: string
createdBy: string
accessExpiresAt?: number
connectorId: string
enabled?: boolean
lastError?: string
authType: "header" | "none" | "oauth" | "bearer"
headerName?: string
signIn?: "user" | "shared"
lastCheckedAt?: number
}
}/ v1/ orgs/ :orgId/ connectors/ :connectorIdDeletes a connector.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scope
- connectors:write
Path parameters
orgIdOrganization id (
org_…).connectorIdConnector id (
con_…).
Errors
404Connector not found
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/connectors/{connectorId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body
/ v1/ orgs/ :orgId/ connectors/ :connectorId/ oauth/ startOAuth connectors: finds the server's sign-in (and registers a client when the server allows it), stores a one-time state with a PKCE verifier and returns the authorization URL to send the user to.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scopes
- connectors:read (for connectors where each person signs in (
signIn: "user")), connectors:write (for a shared sign-in)
Path parameters
orgIdOrganization id (
org_…).connectorIdConnector id (
con_…).
Request body
returnTostringUp to 500 characters.
Errors
400This connector doesn't use OAuth.403Signing in to a connector needs a signed-in user.404Connector not found
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/connectors/{connectorId}/oauth/start' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"returnTo": "example"
}'Response 200
{
url: string
}/ v1/ orgs/ :orgId/ connectors/ oauth/ callbackCompletes a connector sign-in: consumes the state (one use; same user and org), exchanges the code, stores the tokens encrypted and checks the connector's tools with them.
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scopes
- connectors:read, connectors:read (for connectors where each person signs in (
signIn: "user")), connectors:write (for a shared sign-in)
Path parameters
orgIdOrganization id (
org_…).
Request body
statestringrequired10–300 characters.
codestring1–4,000 characters.
errorstringUp to 200 characters.
Errors
403Signing in to a connector needs a signed-in user.404Connector not found409Start the sign-in again.
curl -X POST 'https://api.cactive.com.au/v1/orgs/{orgId}/connectors/oauth/callback' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"state": "example"
}'Response 200
{
connected: false
returnTo: string
connectorId: string
}
| {
connected: true
returnTo: string
connectorId: string
}/ v1/ orgs/ :orgId/ connectors/ :connectorId/ oauth/ sessionSigns out: the caller's own sign-in to a per-person connector, or the shared sign-in (connectors:write).
- Auth
- A person's token or an API key, as Authorization: Bearer.
- Scopes
- connectors:read (your own sign-in to a connector where each person signs in), connectors:write (the shared sign-in)
Path parameters
orgIdOrganization id (
org_…).connectorIdConnector id (
con_…).
Errors
400This connector doesn't use OAuth.403Signing in to a connector needs a signed-in user.404Connector not found
curl -X DELETE 'https://api.cactive.com.au/v1/orgs/{orgId}/connectors/{connectorId}/oauth/session' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 204 with no body