---
title: "GET /api/presentations/context"
description: "Any shared presentation as a transcript. No credential needed."
canonical: https://bisque.cloud/docs/api/presentations/read-as-text
---

# Read as text

Any shared presentation as a transcript. No credential needed.

Page: https://bisque.cloud/docs/api/presentations/read-as-text

`GET /api/presentations/context` · API v1 · [versioning](/docs/api/versioning)

Metadata, the per-slide narration transcript with timestamps, and the bundle's `context.md`. Public and unlisted presentations resolve without credentials; send a bearer credential to read your own private ones. Anonymous callers get 60 requests per 10 minutes per IP, authenticated callers 300.

## Authentication

Send an API key as `Authorization: Bearer bisque_live_…` to act as yourself; without one the call is answered as an anonymous reader.

## Request

| Parameter | In | Meaning |
| --- | --- | --- |
| `url` | query | A watch URL, `https://bisque.today/p/{handle}/{slug}`. Either this or `handle` + `slug`. |
| `handle` | query | Channel handle (leading @ tolerated). |
| `slug` | query |  |

## Example

```bash
curl -X GET https://bisque.cloud/api/presentations/context \
  -H "Authorization: Bearer $BISQUE_API_KEY"
```

## Response

**200**: The presentation.

| Field | Type | Meaning |
| --- | --- | --- |
| `requestId` | string, required |  |
| `presentationId` | string, required |  |
| `title` | string, required |  |
| `handle` | string, required |  |
| `slug` | string, required |  |
| `webUrl` | string, required |  |
| `visibility` | string, required |  |
| `transcript` | array of object, required |  |
| `description` | string or null |  |
| `publishedAt` | string or null |  |
| `transcriptTruncatedSlides` | integer |  |
| `contextMd` | string or null |  |
| `contextTruncated` | boolean |  |

Errors:

- `400`: Neither `url` nor `handle` + `slug` identified a presentation.
- `401`: A credential was sent and is unusable.
- `404`: No presentation you can see at that address.
- `429`: Rate limited (`CONTEXT_RATE_LIMITED`). Wait `Retry-After` seconds.

## Other endpoints

| Page | Call | What it does |
| --- | --- | --- |
| [Create a presentation](/docs/api/presentations/create) | `POST /v1/presentations` | Put the slides up now and narrate them one at a time. |
| [Get a presentation](/docs/api/presentations/get) | `GET /v1/presentations/{presentationId}` | The open creation, to resume it from a new session. |
| [Add slides](/docs/api/presentations/add-slides) | `PATCH /v1/presentations/{presentationId}` | Append sections while the creation is open. |
| [Update a slide](/docs/api/presentations/update-slide) | `PATCH /v1/presentations/{presentationId}/slides/{slideKey}` | Give one slide its narration after the MP3 is uploaded. |
| [Wait for an answer](/docs/api/presentations/wait-for-answer) | `GET /v1/presentations/{presentationId}/surveys/{surveyId}/response` | Hold for the viewer's answer to a question on a slide. |
| [Finalize](/docs/api/presentations/finalize) | `POST /v1/presentations/{presentationId}:finalize` | Claim the version. Slides still without audio stay silent. |
