API

Models & catalogue

Pendra exposes two model surfaces: a live models endpoint that lists what's actually serving right now across connected workers, and a catalogue endpoint that lists everything Pendra can install for you via the curated-install flow.

Live models

GET /api/v1/models returns the OpenAI-shaped models list:

curl
curl https://api.pendra.ai/api/v1/models \
  -H "Authorization: Bearer pdr_sk_..."

Response

Standard OpenAI list envelope. Each entry is what's actually serving on a connected worker right now — restart a worker and the list updates within seconds.

{
  "object": "list",
  "data": [
    {
      "id": "llama3.3:70b",
      "object": "model",
      "created": 1715000000,
      "owned_by": "pendra"
    },
    {
      "id": "qwen3.6:27b",
      "object": "model",
      "created": 1715000000,
      "owned_by": "pendra"
    },
    {
      "id": "nomic-embed-text:latest",
      "object": "model",
      "created": 1715000000,
      "owned_by": "pendra"
    }
  ]
}

Filter by type

Pass ?type= to narrow the list to a single capability: chat, image, embedding, ocr, or transcription.

curl
curl "https://api.pendra.ai/api/v1/models?type=embedding" \
  -H "Authorization: Bearer pdr_sk_..."

Codex compatibility

OpenAI Codex sends a client_version query parameter and expects a different envelope ({"models": [...]} instead of the standard OpenAI list). Pendra detects Codex and returns the right shape automatically — no configuration needed.

The model catalogue

GET /api/v1/catalogue is a public endpoint (no auth required) listing every model Pendra can install on your worker via one click in the console. Every entry is vetted by Pendra before it appears in the catalogue.

curl
curl https://api.pendra.ai/api/v1/catalogue

Catalogue response

Returns a flat list of catalogue entries. Each entry describes a canonical Pendra model plus its variants (sizes, quantisations, and backend-specific IDs).

{
  "data": [
    {
      "id": "qwen3.6:27b",
      "name": "Qwen 3.6 27B",
      "backend": "both",
      "capability": "chat",
      "parameter_size": "27B",
      "context_length": 32768,
      "licence": "apache-2.0",
      "variants": [
        {
          "id": "qwen3.6:27b",
          "quantization": "Q4_K_M",
          "size_bytes": 17000000000,
          "lmstudio_id": "lmstudio-community/Qwen3.6-27B-GGUF"
        }
      ]
    },
    {
      "id": "whisper-large-v3-turbo",
      "name": "Whisper Large v3 Turbo",
      "backend": "speaches",
      "capability": "transcription",
      "variants": [{ "id": "whisper-large-v3-turbo" }]
    }
  ]
}

What's in a catalogue entry

  • id — canonical Pendra ID (e.g. qwen3.6:27b).
  • backend — which backend can install it (ollama, lmstudio, vllm, both, etc.).
  • variants — quantizations and sizes, with backend-specific IDs (e.g. lmstudio_id).
  • capability flags, parameter count, context length, licence.

Curated installs

For models whose backend is ollama, lmstudio, or both, you can install with one click from the console. See the backend capability matrix for which backends support curated install and uninstall.

Naming conventions

Pendra uses the Ollama-style name:tag convention for chat models (e.g. qwen3.6:27b, llama3.3:70b). Whisper and image models use shorter slugs (whisper-large-v3-turbo, x/z-image-turbo). The full set of names lives in the catalogue endpoint above.