Skip to main content
When the meeting ends, the transcript is finalized and stored. If summarize_on_end was set to true on session creation, a summary artifact is generated via Telnyx Inference (action items are a separate artifact type you request yourself). Read results directly, or have them pushed to a webhook. A terminal ended status alone does not prove the bot attended — check that joined_at is non-null when attendance matters.

Get the Transcript

GET /v2/meeting_sessions/{id}/transcript returns the finalized transcript, cursor-paged: with no query parameters it returns at most the first 100 segments, not the entire transcript. Page with after and limit (1-1,000) until a request comes back with empty data: Cursor and long-poll query parameters (after, limit, wait_seconds) are documented on List meeting session transcript.
The transcript.completed webhook fires when the transcript is finalized. See Webhooks.

Artifacts

Artifacts are generated outputs with type summary or action_items; each type requires its own request (summarize_on_end attempts only a summary). Trigger one, then poll until it is completed and read the generated text from content.text. An artifact can be requested any time the transcript has content — including while the meeting is still running; a session with an empty transcript returns 409 invalid_state.

Create an Artifact

POST /v2/meeting_sessions/{id}/artifacts returns 202 Accepted. The request is not idempotent — each call generates a new artifact.
type is summary (decisions, recap) or action_items (owned tasks); the full request schema is on Create a meeting session artifact.

List Artifacts

Get an Artifact

Poll the artifact until status is completed or failed. A failed artifact includes a failure_reason. The artifact.completed and artifact.failed webhooks also fire. Generation currently reads at most the first 10,000 transcript segments, so an exceptionally long meeting can produce an incomplete artifact, and model context limits can still cause a failure. An automatic summarize_on_end attempt that is skipped (for example, on an empty transcript) creates no artifact row at all.

Recordings

If the session records, GET /v2/meeting_sessions/{id}/recordings returns the available recordings with short-lived download URLs:
The full response schema is on List meeting session recordings. url is a short-lived signed link on the recording provider’s storage; re-fetch this endpoint whenever you need a current URL rather than treating it as durable storage. The current adapter returns expires_at: null — the API does not expose the URL’s actual expiry, and the link still expires. The recording.available webhook fires when a recording is ready; it carries only recording_types and never URLs, so always fetch them from this endpoint.

Delete Recording Media

This endpoint is not yet available in production; calling it currently returns a generic 404. It is documented ahead of rollout.
DELETE /v2/meeting_sessions/{id}/recording_media permanently deletes the provider-hosted recording media for the session (recordings, audio, video, and debug media). This is irreversible and returns 202 Accepted:
provider identifies the media host (for example recall). deletion_status is requested or already_in_progress. Deletion removes the provider-hosted media only — the session, its transcript, events, and artifacts remain intact.