Skip to content

API reference

API: Activity

Markdown version

MethodPathWhat it doesScope
GET/v1/activitiesList activities, newest first (filters: record_id, type, source, external_id, from, to). Private items show only to their owner; metadata-only items hide their content.activities:read
POST/v1/activitiesPost an activity (custom event) to records' timelines. Idempotent on (source, external_id); changed content becomes a new revision.activities:write
GET/v1/activities/:idGet one activity with the records it's onactivities:read
GET/v1/activities/:id/revisionsEarlier versions of an activity, newest first (kept when its source changed it)activities:read
GET/v1/activities/:id/transcriptA conversation's transcript: participants and speaker turns with times (ms from the start)transcripts:read
DELETE/v1/activities/by-external-idTell us the source deleted an event; it disappears from timelines (history keeps it). Connector sources can't be hidden this way.activities:write
GET/v1/activities/schemaJSON Schema for the activity create bodyactivities:read
POST/v1/meetings/:id/transcriptAttach a transcript to a meeting: pasted, a link to the file, or a link to the recording to transcribetranscripts:write
POST/v1/participants/resolveMatch or create contacts (and accounts by business email domain) for email, calendar, Slack or notetaker participants. Teammates are recognized, never created as contacts.activities:write
GET/v1/provenance/resolveFollow a provenance source_id (gmail:<id>, slack:<channel>:<ts>, google_calendar:<id>, an import id…) to the activity, import row or record behind itrecords:read
GET/v1/transcriptionWhether this server can transcribe recordingstranscripts:read
POST/v1/transcriptsCreate a meeting (title, time, attendees) with its transcripttranscripts:write

Examples

GET /v1/activities

List activities, newest first (filters: record_id, type, source, external_id, from, to). Private items show only to their owner; metadata-only items hide their content.

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

POST /v1/activities

Post an activity (custom event) to records' timelines. Idempotent on (source, external_id); changed content becomes a new revision.

curl -s -X POST "https://api.closefinch.com/v1/activities" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/activities`, {
  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/activities/$ID

Get one activity with the records it's on

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

GET /v1/activities/$ID/revisions

Earlier versions of an activity, newest first (kept when its source changed it)

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

GET /v1/activities/$ID/transcript

A conversation's transcript: participants and speaker turns with times (ms from the start)

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

DELETE /v1/activities/by-external-id

Tell us the source deleted an event; it disappears from timelines (history keeps it). Connector sources can't be hidden this way.

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

GET /v1/activities/schema

JSON Schema for the activity create body

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

POST /v1/meetings/$ID/transcript

Attach a transcript to a meeting: pasted, a link to the file, or a link to the recording to transcribe

curl -s -X POST "https://api.closefinch.com/v1/meetings/$ID/transcript" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/meetings/${id}/transcript`, {
  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/participants/resolve

Match or create contacts (and accounts by business email domain) for email, calendar, Slack or notetaker participants. Teammates are recognized, never created as contacts.

curl -s -X POST "https://api.closefinch.com/v1/participants/resolve" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/participants/resolve`, {
  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/provenance/resolve

Follow a provenance source_id (gmail:<id>, slack:<channel>:<ts>, google_calendar:<id>, an import id…) to the activity, import row or record behind it

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

GET /v1/transcription

Whether this server can transcribe recordings

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

POST /v1/transcripts

Create a meeting (title, time, attendees) with its transcript

curl -s -X POST "https://api.closefinch.com/v1/transcripts" \
  -H "Authorization: Bearer $RA_API_KEY" \
  -H "content-type: application/json" \
  -d '{}'
const res = await fetch(`https://api.closefinch.com/v1/transcripts`, {
  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();

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.