Skip to content

Retrieving meeting transcripts

List and retrieve meetings, read the transcript relationship, and download the transcript file via the Lightfield API.

Meetings are first-class objects in the Lightfield API. You can list and retrieve them like any other CRM record, and a retrieved meeting exposes its related data — including the transcript — through the $transcript relationship.

This guide covers reading meetings and downloading their transcripts. To attach or replace a transcript, see Uploading meeting transcripts.

You will need:

  • A valid API key
  • The meetings:read scope to list and retrieve meetings
  • The files:read scope to download the transcript file

All requests use these headers:

Authorization: Bearer YOUR_API_KEY
Lightfield-Version: 2026-03-01

Use GET /v1/meetings to fetch a paginated list of meetings. See List methods for shared pagination and filtering parameters.

Terminal window
curl https://api.lightfield.app/v1/meetings \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Lightfield-Version: 2026-03-01"

List responses are privacy-filtered per caller. To read the full content of a meeting — including the $transcript relationship — retrieve it by ID.

Use GET /v1/meetings/{id} to fetch a single meeting with its fields and relationships. When the caller has FULL access, the response includes the $transcript relationship pointing at the transcript file.

Terminal window
curl https://api.lightfield.app/v1/meetings/$MEETING_ID \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Lightfield-Version: 2026-03-01"

A successful response for a caller with FULL access looks like:

{
"id": "mtg_abc123",
"objectType": "meeting",
"createdAt": "2026-04-07T21:00:00.000Z",
"updatedAt": "2026-04-07T21:50:00.000Z",
"fields": {
"$title": { "valueType": "TEXT", "value": "Customer Call" },
"$startDate": { "valueType": "DATETIME", "value": "2026-04-07T21:00:00.000Z" },
"$endDate": { "valueType": "DATETIME", "value": "2026-04-07T21:45:00.000Z" },
"$organizerEmail": { "valueType": "EMAIL", "value": "alex@acme.com" },
"$attendeeEmails": { "valueType": "EMAIL", "value": ["alex@acme.com", "jamie@example.com"] },
"$privacySetting": { "valueType": "TEXT", "value": "FULL" }
},
"relationships": {
"$transcript": {
"cardinality": "HAS_ONE",
"objectType": "file",
"values": ["fil_abc123"]
}
},
"accessLevel": "FULL"
}

The transcript is a completed File API upload (fil_...) exposed through relationships.$transcript. Read the file ID from relationships.$transcript.values, then download it.

Read the file ID from relationships.$transcript.values, then request a temporary signed download URL with GET /v1/files/{id}/url:

Terminal window
curl https://api.lightfield.app/v1/files/$FILE_ID/url \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Lightfield-Version: 2026-03-01"

A successful response returns a signed URL and its expiry:

{
"url": "https://...",
"expiresAt": "2026-04-07T22:00:00.000Z"
}

Fetch the transcript bytes from url before expiresAt. Request a fresh URL if it expires.

Meeting retrieval is privacy-filtered, so whether you see the $transcript relationship depends on the caller’s resolved access level:

Access levelWhat the caller can see
FULLFull meeting content, including the real title, description, organizer and attendee emails, and the $transcript relationship.
METADATAA metadata-safe view; sensitive fields are redacted and relationships.$transcript is omitted.

Admins and meeting participants always get FULL access. Other callers receive the meeting’s resolved privacy setting. A transcript can be attached to a meeting even if a particular caller’s GET /v1/meetings/{id} response does not show the $transcript relationship.

For the full access model — including who counts as a participant and how $privacySetting differs from accessLevel — see Meeting privacy and transcript visibility.

  1. GET /v1/meetings to find the meeting, or skip ahead if you already have its ID.
  2. GET /v1/meetings/{id} and read relationships.$transcript.values for the transcript file ID.
  3. GET /v1/files/{id}/url to get a signed download URL.
  4. Fetch the transcript bytes from the returned url before it expires.