Skip to content

API reference

API: Recording

Markdown version

MethodPathWhat it doesScope
POST/v1/activities/:id/clipsClip a moment of a recorded conversation (a time range)transcripts:write
GET/v1/clipsThe clip library: by kind, theme, account, deal, conversation or wordstranscripts:read
DELETE/v1/clips/:idDelete a clip (yours, or any as an owner)transcripts:write
GET/v1/clips/:id/mediaA fresh, short-lived link to the clip's recording, with its start and endtranscripts:read
GET/v1/desktop/configFor the desktop app: whether it may record for you, Recall's API URL for the region, your disclosure answer and its current text, and the reminder to show before each recordingtranscripts:write
POST/v1/desktop/consentAnswer the desktop recording disclosure (its current version), from the desktop apptranscripts:write
GET/v1/desktop/recordingsYour recordings from the desktop app: their status, and the transcript's activity once it's intranscripts:write
POST/v1/desktop/recordingsStart recording a meeting from the desktop app: after your disclosure answer, the reminder and the outbound policy, an upload token for the Recall Desktop SDKtranscripts:write
POST/v1/desktop/recordings/:id/endedThe desktop app's recording ended (the transcript follows through the usual pipeline; the media is then deleted at Recall)transcripts:write
GET/v1/me/recordingYour recording mode, recorder priority and disclosure answers—
PUT/v1/me/recordingSet your recording mode (unless the organization locked it) and recorder priority—
POST/v1/me/recording/consentAnswer a first-use recording disclosure (accept, or decline and take notes by hand)—
GET/v1/meetings/:id/recordingWhether this meeting is recorded and why, its bots, and any overridetranscripts:read
PUT/v1/meetings/:id/recordingRecord this meeting, or don't (null = follow the settings)transcripts:write
POST/v1/meetings/:id/recording/nowSend the recorder to this meeting nowtranscripts:write
GET/v1/recording/botsRecorder bots, newest firsttranscripts:read
POST/v1/recording/botsSend the recorder to a meeting link (owner; a meeting record is created for it)settings:write
POST/v1/recording/bots/:id/stopStop a recording (the bot leaves, the recording is deleted, no transcript)transcripts:write
GET/v1/settings/desktop-recorderThe desktop recorder: whether it's on, the Recall region, and whether the organization's Recall key is set (never the key) (web app only)—
PUT/v1/settings/desktop-recorderTurn the desktop recorder on or off, set the Recall region, or set (or remove, with null) the organization's own Recall API key (owners) (web app only)—
GET/v1/settings/recordingThe organization's recording policy (MTG-002)transcripts:read
PUT/v1/settings/recordingSet the organization's recording policy (owner)settings:write

Examples

POST /v1/activities/$ID/clips

Clip a moment of a recorded conversation (a time range)

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

The clip library: by kind, theme, account, deal, conversation or words

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

DELETE /v1/clips/$ID

Delete a clip (yours, or any as an owner)

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

GET /v1/clips/$ID/media

A fresh, short-lived link to the clip's recording, with its start and end

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

GET /v1/desktop/config

For the desktop app: whether it may record for you, Recall's API URL for the region, your disclosure answer and its current text, and the reminder to show before each recording

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

POST /v1/desktop/consent

Answer the desktop recording disclosure (its current version), from the desktop app

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

Your recordings from the desktop app: their status, and the transcript's activity once it's in

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

POST /v1/desktop/recordings

Start recording a meeting from the desktop app: after your disclosure answer, the reminder and the outbound policy, an upload token for the Recall Desktop SDK

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

The desktop app's recording ended (the transcript follows through the usual pipeline; the media is then deleted at Recall)

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

Your recording mode, recorder priority and disclosure answers

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

PUT /v1/me/recording

Set your recording mode (unless the organization locked it) and recorder priority

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

Answer a first-use recording disclosure (accept, or decline and take notes by hand)

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

Whether this meeting is recorded and why, its bots, and any override

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

PUT /v1/meetings/$ID/recording

Record this meeting, or don't (null = follow the settings)

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

Send the recorder to this meeting now

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

Recorder bots, newest first

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

POST /v1/recording/bots

Send the recorder to a meeting link (owner; a meeting record is created for it)

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

Stop a recording (the bot leaves, the recording is deleted, no transcript)

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

The organization's recording policy (MTG-002)

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

PUT /v1/settings/recording

Set the organization's recording policy (owner)

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