API reference
API: Recording
| Method | Path | What it does | Scope |
|---|---|---|---|
| POST | /v1/activities/:id/clips | Clip a moment of a recorded conversation (a time range) | transcripts:write |
| GET | /v1/clips | The clip library: by kind, theme, account, deal, conversation or words | transcripts:read |
| DELETE | /v1/clips/:id | Delete a clip (yours, or any as an owner) | transcripts:write |
| GET | /v1/clips/:id/media | A fresh, short-lived link to the clip's recording, with its start and end | transcripts:read |
| 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 | transcripts:write |
| POST | /v1/desktop/consent | Answer the desktop recording disclosure (its current version), from the desktop app | transcripts:write |
| GET | /v1/desktop/recordings | Your recordings from the desktop app: their status, and the transcript's activity once it's in | transcripts:write |
| 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 | transcripts:write |
| 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) | transcripts:write |
| GET | /v1/me/recording | Your recording mode, recorder priority and disclosure answers | — |
| PUT | /v1/me/recording | Set your recording mode (unless the organization locked it) and recorder priority | — |
| POST | /v1/me/recording/consent | Answer a first-use recording disclosure (accept, or decline and take notes by hand) | — |
| GET | /v1/meetings/:id/recording | Whether this meeting is recorded and why, its bots, and any override | transcripts:read |
| PUT | /v1/meetings/:id/recording | Record this meeting, or don't (null = follow the settings) | transcripts:write |
| POST | /v1/meetings/:id/recording/now | Send the recorder to this meeting now | transcripts:write |
| GET | /v1/recording/bots | Recorder bots, newest first | transcripts:read |
| POST | /v1/recording/bots | Send the recorder to a meeting link (owner; a meeting record is created for it) | settings:write |
| POST | /v1/recording/bots/:id/stop | Stop a recording (the bot leaves, the recording is deleted, no transcript) | transcripts:write |
| GET | /v1/settings/desktop-recorder | The 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-recorder | Turn 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/recording | The organization's recording policy (MTG-002) | transcripts:read |
| PUT | /v1/settings/recording | Set 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.