Puma API

Chat Completions

Full reference for the POST /api/v1/chat/completions endpoint.

POST /api/v1/chat/completions

Creates a chat completion. Accepts an array of messages and returns an OpenAI-format response with the model's answer.

Request

Headers

HeaderRequiredDescription
AuthorizationYesBearer <token>. Any token is accepted.
Content-TypeYesMust be application/json.
HTTP-RefererNoSite URL (OpenRouter compat).
X-OpenRouter-TitleNoSite name (OpenRouter compat).

Body

FieldTypeDefaultDescription
modelstring"puma/cheapest"Model alias or Workers AI model name.
messagesarray(required)List of chat messages.
temperaturenumberNot forwarded yet.
max_tokensintegerNot forwarded yet.
streambooleanMust be false or omitted.

Each message in the messages array has:

FieldTypeDescription
role"system" | "user" | "assistant"Who sent the message.
contentstringThe message text.

Response

200 — Success

{
  "id": "chatcmpl-550e8400-e29b-41d4-a716-446655440000",
  "object": "chat.completion",
  "created": 1712345678,
  "model": "puma/cheapest",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "The meaning of life is a philosophical question…"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 0,
    "completion_tokens": 0,
    "total_tokens": 0
  }
}

Note: usage token counts are currently 0. Workers AI models can return usage data but it varies by model and is not yet surfaced.

400 — Bad Request

{
  "error": {
    "message": "messages array is required and must not be empty",
    "code": "bad_request"
  }
}

401 — Unauthorized

{
  "error": {
    "message": "Missing or invalid Authorization header",
    "code": "unauthorized"
  }
}

500 — Server Error

{
  "error": {
    "message": "AI binding not configured",
    "code": "server_error"
  }
}

Examples

Minimal request

curl https://api.pumaai.com/api/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-test-123" \
  -d '{
    "messages": [
      {"role": "user", "content": "What is the meaning of life?"}
    ]
  }'

With system prompt

curl https://api.pumaai.com/api/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-test-123" \
  -H "HTTP-Referer: https://myapp.com" \
  -H "X-OpenRouter-Title: My App" \
  -d '{
    "model": "puma/cheapest",
    "messages": [
      {"role": "system", "content": "You are a helpful assistant."},
      {"role": "user", "content": "What is the meaning of life?"}
    ]
  }'