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.
transcript.completed webhook fires when the transcript is finalized. See Webhooks.
Artifacts
Artifacts are generated outputs with typesummary 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
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:
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.
Related
- Join a Meeting — create a meeting session and send the bot
- Live Transcript — follow the transcript stream in real time
- Webhooks — receive session events on your own endpoint