> 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 reviewed translation editions

GET https://api.bibleit.app/v1/translations

**Required scopes:** `translation.list`.

Metadata discovery only. Includes install availability and reviewed rights/provenance. Does not fetch, install, enable translations, or grant scripture access. Entries use lowercase slugs in ascending order. Also accepts finite personal bearer tokens for resources owned by the caller’s personal account. Personal tokens cannot operate organization Lives, use collaborators’/children’s authority, or publish presentations. Current personal token scopes and user permissions are rechecked after waits. Registered delegated OAuth access tokens are accepted within these personal boundaries; /me and account metadata additionally require identity.read.

Reference: https://docs.bibleit.dev/api-reference/translations/list-translation-catalogue

## 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.
- `Authorization` header (bearer token, required) — Personal bearer credential issued through existing account settings or browser-approved CLI flow. Must be active, finite, unexpired, unrevoked, within any rotation overlap, and bound to an active personal membership/user/account. Explicit scopes intersect current user permissions; empty existing personal scopes inherit current user authority. Not an OAuth grant or service token. Browser cookies are ignored.
- `Authorization` header (bearer token, required) — Registered public-client OAuth for personal-account resources only. Exact registered HTTPS or fixed-port literal loopback redirect; S256 required; explicit consent. No organization/presentation authority. identity.read is required for /me and account metadata. Scope intersection with current user authority; no empty-scope inheritance.

## Request

### Query parameters

- `limit` (integer, optional, default: 50)
- `after` (string, optional) — Cursor returned by this collection; book collections use the canonical numeric ID. Translation collections use lowercase slugs.

## Response

### 200

Successful operation

- `data` (list of CatalogueTranslation, required)
- `next_cursor` (string, required, nullable) — Pass unchanged as after on the next request; null ends the collection.

## 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

### CatalogueTranslation

- `slug` (string, required)
- `name` (string, required)
- `language` (enum, required)
  - Allowed values: `en`, `pt`, `de`, `und`
- `book_ids` (list of integer, required)
- `rights` (TranslationRights, required)
- `installed` (boolean, required)
- `provenance` (TranslationProvenance, required)

### TranslationRights

- `edition` (string, required)
- `rights_status` (string, required)
- `source_url` (string, required)
- `attribution` (string, required)
- `license_id` (string, optional)
- `license_url` (string, optional)
- `copyright` (string, optional)
- `change_notice` (string, optional)

### TranslationProvenance

- `archive_sha256` (string, required, nullable)
- `reviewed_on` (string, required, nullable)
- `source_id` (string, required, nullable)

## Examples

**Response**

```json
{
  "data": [
    {
      "slug": "string",
      "name": "string",
      "language": "en",
      "book_ids": [
        1
      ],
      "rights": {
        "edition": "string",
        "rights_status": "string",
        "source_url": "string",
        "attribution": "string",
        "license_id": "string",
        "license_url": "string",
        "copyright": "string",
        "change_notice": "string"
      },
      "installed": true,
      "provenance": {
        "archive_sha256": "string",
        "reviewed_on": "string",
        "source_id": "string"
      }
    }
  ],
  "next_cursor": "string"
}
```

**SDK Code**

```python
import requests

url = "https://api.bibleit.app/v1/translations"

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/translations"

	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))

}
```