> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.bibleit.dev/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.bibleit.dev/_mcp/server.

# List the requesting service credential’s export jobs

GET https://api.bibleit.app/v1/presentations/{presentation_id}/exports

**Required scopes:** `presentation.export`.

Paginated unexpired jobs for this presentation and requesting service credential, ordered by opaque ID. Other tokens in the same organization cannot enumerate these jobs. Secret rotation preserves credential identity and access. Current scope, organization status and processing restrictions are checked under the account lock. Downloaded/expired jobs disappear.

**Response headers:**

- `Cache-Control` (200).

Reference: https://docs.bibleit.dev/api-reference/organizations/presentation-exports/list-presentation-exports

## Authentication

- `Authorization` header (bearer token, required) — Organization-owned service token. Issue the initial token in organization credential settings. Scopes are documented per operation via x-required-scopes; they are not OAuth scopes.

## Request

### Path parameters

- `presentation_id` (string, required) — Organization-owned presentation UUID. Foreign decks return 404.

### Query parameters

- `limit` (integer, optional, default: 50) — Page size.
- `after` (string, optional) — Opaque next_cursor from a previous response. At most 128 UTF-8 bytes.

## Response

### 200

Successful operation.

- `data` (list of PresentationExport, required)
- `next_cursor` (string, required, nullable)

## Errors

### 401 Unauthorized Error

Error response. 400 malformed JSON; 401 invalid/expired/revoked token; 403 denied scope or domain policy; 404 unknown/foreign resource; 405 unsupported method; 409 quota/conflict or stopped Live; 412 stale state validator; 428 missing If-Match; 413 body too large; 415 unsupported media type; 422 invalid fields; 429 admission budget exhausted; 503 unavailable dependency.

- `type` (any, required)
- `title` (string, required)
- `status` (integer, required)
- `code` (string, required)
- `request_id` (string, required)

### 403 Forbidden Error

Error response. 400 malformed JSON; 401 invalid/expired/revoked token; 403 denied scope or domain policy; 404 unknown/foreign resource; 405 unsupported method; 409 quota/conflict or stopped Live; 412 stale state validator; 428 missing If-Match; 413 body too large; 415 unsupported media type; 422 invalid fields; 429 admission budget exhausted; 503 unavailable dependency.

- `type` (any, required)
- `title` (string, required)
- `status` (integer, required)
- `code` (string, required)
- `request_id` (string, required)

### 404 Not Found Error

Error response. 400 malformed JSON; 401 invalid/expired/revoked token; 403 denied scope or domain policy; 404 unknown/foreign resource; 405 unsupported method; 409 quota/conflict or stopped Live; 412 stale state validator; 428 missing If-Match; 413 body too large; 415 unsupported media type; 422 invalid fields; 429 admission budget exhausted; 503 unavailable dependency.

- `type` (any, required)
- `title` (string, required)
- `status` (integer, required)
- `code` (string, required)
- `request_id` (string, required)

### 429 Too Many Requests Error

Error response. 400 malformed JSON; 401 invalid/expired/revoked token; 403 denied scope or domain policy; 404 unknown/foreign resource; 405 unsupported method; 409 quota/conflict or stopped Live; 412 stale state validator; 428 missing If-Match; 413 body too large; 415 unsupported media type; 422 invalid fields; 429 admission budget exhausted; 503 unavailable dependency.

- `type` (any, required)
- `title` (string, required)
- `status` (integer, required)
- `code` (string, required)
- `request_id` (string, required)

### 503 Service Unavailable Error

Error response. 400 malformed JSON; 401 invalid/expired/revoked token; 403 denied scope or domain policy; 404 unknown/foreign resource; 405 unsupported method; 409 quota/conflict or stopped Live; 412 stale state validator; 428 missing If-Match; 413 body too large; 415 unsupported media type; 422 invalid fields; 429 admission budget exhausted; 503 unavailable dependency.

- `type` (any, required)
- `title` (string, required)
- `status` (integer, required)
- `code` (string, required)
- `request_id` (string, required)

## Types

### PresentationExport

Safe requester-private job projection. Timestamps are Unix seconds. Jobs snapshot the saved revision at creation; later saves never alter the captured document. Expiry is initially ten minutes and resets to ten minutes on completion/failure. Jobs disappear on expiry, presentation deletion or successful download consumption. Starting a new export removes this requester’s failed jobs.

- `id` (string, required)
- `presentation_id` (string, required)
- `organization_id` (string, required)
- `revision` (integer, required)
- `format` (enum, required)
  - Allowed values: `pdf`, `html`, `png`, `jpeg`, `bibleit`
- `status` (enum, required)
  - Allowed values: `queued`, `running`, `completed`, `failed`
- `error` (enum, required)
  - Allowed values: `runtime_unavailable`, `export_cancelled`, `export_too_large`, `export_interrupted`, `export_failed`
- `bytes` (integer, required, nullable)
- `created_at` (integer, required)
- `expires_at` (integer, required)
- `download_url` (string, required, nullable) — Relative POST downloads URL, available only when completed. Requires the requesting credential and current presentation.export scope. Never a public URL.

## Examples

**Response**

```json
{
  "data": [
    {
      "id": "string",
      "presentation_id": "string",
      "organization_id": "string",
      "revision": 1,
      "format": "pdf",
      "status": "queued",
      "error": null,
      "bytes": 1,
      "created_at": 1,
      "expires_at": 1,
      "download_url": "string"
    }
  ],
  "next_cursor": "string"
}
```

**SDK Code**

```python
import requests

url = "https://api.bibleit.app/v1/presentations/presentation_id/exports"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.bibleit.app/v1/presentations/presentation_id/exports"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```