---
title: "Read up to 20 presentations in one request"
method: POST
path: "/api/v1/presentations/context"
tags: ["Read"]
---

# Read up to 20 presentations in one request

`POST /api/v1/presentations/context`

## Request

- Base URL: `https://bisque.today`
- URL: `https://bisque.today/api/v1/presentations/context`
- Auth: one of:
  - none
  - HTTP bearer

Versioned address of `/api/presentations/context` — the same endpoint and contract. The batch form of the GET. Send `{"urls": [...]}`, `{"items": [{"url"} | {"handle","slug"}, ...]}`, or a bare JSON array of watch URLs; each item resolves on its own, so one bad address fails its row and not the batch. Every item costs one slot of the same per-IP window as a GET (60 per 10 minutes anonymous, 300 with a credential); items past the window come back as `CONTEXT_RATE_LIMITED` rows rather than failing the request.

## Request body

- union: Up to 20 presentations to read. Any of the three shapes.
  - object
    - `urls` string[], required
  - object
    - `items` object[], required
      - `url` string, uri
      - `handle` string
      - `slug` string
  - string[]

## Response `200`

One row per item, in request order.

- PresentationContextBatchResult
  - `requestId` string, required
  - `items` object[], required: One row per requested item, in request order.
    - `ok` boolean, required
    - `input` object, required: The item as sent, normalized to an object.
    - `presentation` PresentationContext
      - `requestId` string, required
      - `presentationId` string, required
      - `title` string, required
      - `description` string, nullable
      - `handle` string, required
      - `slug` string, required
      - `webUrl` string, uri, required
      - `visibility` string, required
      - `publishedAt` string, date-time, nullable
      - `transcript` object[], required
        - `slideIndex` integer
        - `startSec` number
        - `title` string
        - `text` string: The slide's narration.
      - `transcriptTruncatedSlides` integer
      - `contextMd` string, nullable
      - `contextTruncated` boolean
    - `error` object
      - `code` string, required
      - `message` string, required

## Other responses

- `400`: The body was not one of the three accepted shapes, was empty, or named more than 20 presentations.
- `401`: A credential was sent and is unusable.
- `429`: The window had no room for even the first item. Wait `Retry-After` seconds.

---

[API](https://skmtc.dev/bisque/apis/bisque-api.md) · [All operations](https://skmtc.dev/bisque/apis/bisque-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bisque/apis/bisque-api/revisions/5dd7a3c62937?raw)
