Skip to main content

Platform

Local-first capture, from your own product.

Create capture requests and recording sessions over a REST API, get told when a recording lands, and download the original file — with a record of exactly what was captured.

The thing to understand first

Capture is local, so it is asynchronous. When a session ends, the media is still on someone's laptop — and it may never arrive. That is not an edge case to code around; it is the shape of the API.

  • Tracks arrive independently

    A recording with two of four tracks present is a correct response, not a partial failure. They land over minutes to hours.

  • Orphaned is a real state

    A take can strand when a client vanishes mid-upload. It is recoverable: ending a session again re-attempts promotion, and the response says whether the tracks are still waiting.

  • Webhooks are not optional

    A client polling for “is my recording ready” has no bounded answer. Subscribe to the events below instead.

Events

Signed with your endpoint secret, retried with backoff for about a day, and logged so you can answer “did that fire?”.

capture.bufferedA live recording finished and is durable, but the user has not saved it yet.
capture.completedA recording finished uploading and is in the library.
capture.failedA recording could not be delivered.
capture_request.submission_receivedSomeone submitted a take to a capture request.
capture_request.closedA capture request hit its deadline or was closed.

Scopes

A key grants exactly what you check, and nothing implies anything else — reading a recording is not permission to download it.

recordings:readList recordings and read their capture manifests.
recordings:downloadMint short-lived download URLs for recording files.
usage:readRead this organization’s capture usage.
capture_requests:readList capture requests, their rosters, and submitted takes.
capture_requests:writeCreate, edit, and close capture requests, and add contacts.
sessions:readList recording sessions and see who joined.
sessions:writeCreate recording sessions, mint invites, and end them.

Test-mode keys read everything and change nothing that reaches the outside world — no download URLs, no emails to real people, no sessions drawing on your allowance.

Record inside your own product

@capturly/capture-sdk puts the recorder in your app. Your backend creates a capture request and mints a per-person link; the SDK records against it in the browser, holds the take locally so someone can watch it back, then uploads it. Your secret key never leaves your server.

npm install @capturly/capture-sdk

const client = new CaptureClient({ access: { mode: 'contact', contactId, key } });
videoEl.srcObject = await client.preview();
await client.start();
const take = await client.stop();   // still in the browser
await client.submit({ releaseAccepted: true });

One person at a time. Rooms where several people record at once are the sessions API and the hosted recorder.

Start with a test key

The API is included with Team and Platform. Keys are created from your account and shown once.

Create an API key