Skip to content

API reference

API: Integrations

Markdown version

MethodPathWhat it doesScope
GET/v1/accounts/:id/slack-channelsSlack channels filed to this account, with sync health and their external members (and which are contacts). connections lists the Slack workspaces to link or create channels in.accounts:read
DELETE/v1/connections/:idDisconnect: stops syncing and deletes the saved credentials. Already-synced activity stays, unless an owner passes delete_data=true: then everything that came only from this source (its activities and documents, and what was made from them, embeddings included) is deleted in the background (web app only)connections:write
PATCH/v1/connections/:idChange sharing, contact creation, calendars, backfill, or pause syncing (web app only)connections:write
GET/v1/connections/:id/calendarsCalendars this account can see, and which ones sync (settings.calendars; none chosen means the primary calendar) (web app only)connections:read
POST/v1/connections/:id/exportExport CRM records of one object type to the warehouse connection's export_table (owner, web only; passes the outbound policy) (web app only)integrations:write
GET/v1/connections/:id/grantLGL-006 #11: the person's other connections that share this connection's grant at the provider (Google: Gmail, Calendar, Drive and Meet on the same account), so a disconnect can say what removing all access would also stop. The connection's own person only (web app only)connections:read
GET/v1/connections/:id/runsRecent sync runs with stats and errorsconnections:read
PUT/v1/connections/:id/secretsAdd or replace a connection's declared secrets (e.g. the webhook signing secret shown after setup; on OAuth connections only declared extras such as a webhook secret, never the sign-in tokens). Values are stored encrypted and never returned; empty values keep the current one. (web app only)connections:write
GET/v1/connections/:id/slack/channelsSlack channels the app can see, with the account/deal each maps to and its sync healthconnections:read
POST/v1/connections/:id/slack/channelsCreate a Slack Connect channel for an account (prefix + account name), invite its external contacts, and map it to the accountmessages:send
POST/v1/connections/:id/slack/channels/:channel/linkLink an existing Slack channel to an account and/or deal; its external members become contacts and its history is backfilled (queued by default)integrations:write
POST/v1/connections/:id/slack/members/:userId/promoteMake an external Slack member a contact on an account (filling name and job title from their Slack profile). Teammates and bots are refused.connections:write
GET/v1/connections/:id/snippetThe website/app snippet for the first-party intent client (intent_js connections)connections:read
POST/v1/connections/:id/syncSync now (web app only)connections:write
GET/v1/integrationsAvailable integrations (and whether this server is set up for them) plus your organization's connectionsconnections:read
POST/v1/integrations/:provider/connectStart connecting an account. OAuth providers return a URL to send the browser to; API-key providers connect immediately. (web app only)connections:write
POST/v1/me/google-features/:feature/connectGrant your Google mailbox the extra access a feature your organization turned on needs (Gmail drafts and labels, or Postmaster Tools): returns the consent URL (web app only)connections:write

Examples

GET /v1/accounts/$ID/slack-channels

Slack channels filed to this account, with sync health and their external members (and which are contacts). connections lists the Slack workspaces to link or create channels in.

curl -s "https://api.closefinch.com/v1/accounts/$ID/slack-channels" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/accounts/${id}/slack-channels`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

GET /v1/connections/$ID/runs

Recent sync runs with stats and errors

curl -s "https://api.closefinch.com/v1/connections/$ID/runs" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/connections/${id}/runs`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

GET /v1/connections/$ID/slack/channels

Slack channels the app can see, with the account/deal each maps to and its sync health

curl -s "https://api.closefinch.com/v1/connections/$ID/slack/channels" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/connections/${id}/slack/channels`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

POST /v1/connections/$ID/slack/channels

Create a Slack Connect channel for an account (prefix + account name), invite its external contacts, and map it to the account

curl -s -X POST "https://api.closefinch.com/v1/connections/$ID/slack/channels" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/connections/${id}/slack/channels`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

POST /v1/connections/$ID/slack/channels/$CHANNEL/link

Link an existing Slack channel to an account and/or deal; its external members become contacts and its history is backfilled (queued by default)

curl -s -X POST "https://api.closefinch.com/v1/connections/$ID/slack/channels/$CHANNEL/link" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/connections/${id}/slack/channels/${channel}/link`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

POST /v1/connections/$ID/slack/members/$USER_ID/promote

Make an external Slack member a contact on an account (filling name and job title from their Slack profile). Teammates and bots are refused.

curl -s -X POST "https://api.closefinch.com/v1/connections/$ID/slack/members/$USER_ID/promote" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/connections/${id}/slack/members/${userId}/promote`, {
  method: "POST",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}`, "content-type": "application/json" },
  body: JSON.stringify({}), // fields: see the OpenAPI schema
});
const data = await res.json();

GET /v1/connections/$ID/snippet

The website/app snippet for the first-party intent client (intent_js connections)

curl -s "https://api.closefinch.com/v1/connections/$ID/snippet" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/connections/${id}/snippet`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

GET /v1/integrations

Available integrations (and whether this server is set up for them) plus your organization's connections

curl -s "https://api.closefinch.com/v1/integrations" \
  -H "Authorization: Bearer $RA_API_KEY"
const res = await fetch(`https://api.closefinch.com/v1/integrations`, {
  method: "GET",
  headers: { authorization: `Bearer ${process.env.RA_API_KEY}` },
});
const data = await res.json();

Request and response schemas: https://www.closefinch.com/openapi.json. All resources: API reference.

Send feedback

Tell us what's broken, confusing or missing on this page, or an idea. It goes to the team that builds the product.

Please don't include passwords or card numbers.
Only to reply about this. Never added to any mailing list.