Referensi API

Contoh Response

Kenapa halaman ini ada

Semua contoh di bawah adalah response mentah PixzRouter apa adanya (disalin dari request nyata), bukan ilustrasi. Jika Anda (atau AI yang Anda pakai) menulis client/library untuk PixzRouter, cukup ikuti bentuk di sini — tidak ada field tersembunyi lain.

GET /v1/models

bash curl https://api-inference.pixz.dev/v1/models -H "Authorization: Bearer pxr_live_..." json { "object": "list", "data": [ { "id": "claude-fable-5", "object": "model", "created": 0, "owned_by": "pixzrouter", "name": "Claude Fable 5", "capabilities": { "vision": true, "tools": true, "reasoning": true, "contextWindow": 1000000, "maxOutput": 128000 }, "context_window": 1000000, "max_output_tokens": 128000 } ] } data memuat semua model aktif (±50). Field capabilities adalah sumber kebenaran kapabilitas: vision, tools, reasoning, contextWindow, maxOutput`.

GET /v1/models/{id}

json { "id": "glm-5.3-flash", "object": "model", "created": 1760000000, "owned_by": "pixzrouter", "name": "GLM 5.3 Flash", "aliases": ["glm5.3-flash"], "capabilities": { "vision": false, "tools": true, "reasoning": true, "streaming": true, "json": true, "contextWindow": 200000, "maxOutput": 65536 }, "context_window": 200000, "max_output_tokens": 65536 } ID salah → 404 dengan body error (lihat bagian Errors). aliases` bisa dipakai sebagai ID alternatif.

POST /v1/chat/completions (non-stream)

Request: ``json { "model": "deepseek-v4-flash", "messages": [{ "role": "user", "content": "Balas hanya: OK" }], "max_tokens": 5 } Response (200): json { "id": "cmb-e55e6730c31b11f1b26e76b4575383a2", "object": "chat.completion", "created": 1791466000, "model": "deepseek-v4-flash", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "OK" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 9, "completion_tokens": 1, "total_tokens": 10, "prompt_tokens_details": { "cached_tokens": 0 }, "completion_tokens_details": { "reasoning_tokens": 0, "cached_tokens": 0 }, "prompt_cache_hit_tokens": 0, "prompt_cache_miss_tokens": 9, "cache_read_input_tokens": 0, "cache_creation_input_tokens": 0, "prompt_cache_write_tokens": 0, "completion_thinking_tokens": 0, "credit": 0, "cached_tokens": 0 } } `` Header response yang penting:

  • X-Pixz-Request-Id — ID unik request Anda (sertakan saat lapor).
  • X-Pixz-Billed-Via — CREDITS (kredit reguler) atau PACKAGE (kuota paket).

Field usage yang wajib dibaca client

| Field | Arti | |---|---| | prompt_tokens | token input yang dilaporkan model | | completion_tokens | token output | | total_tokens | input + output | | prompt_cache_hit_tokens | bagian input yang kena cache upstream | | completion_tokens_details.reasoning_tokens | token berpikir (model reasoning) |

Peringatan untuk implementer AI: field usage.credit pada response adalah artefak upstream — nilainya TIDAK konsisten dengan penagihan dan tidak boleh dipakai untuk menghitung biaya. Dasar tagihan PixzRouter adalah (total_tokens − offset_model) × tarif model dengan floor minimum PER MODEL per request (lihat [Penagihan](/docs/pricing)).

Model reasoning

Model dengan reasoning aktif dapat mengembalikan proses berpikir di field terpisah: ``json { "choices": [ { "message": { "role": "assistant", "content": "Jawaban singkat.", "reasoning_content": "Proses berpikir panjang model…" }, "finish_reason": "stop" } ] }

Tool calling

json { "choices": [ { "message": { "role": "assistant", "content": null, "tool_calls": [ { "id": "call_abc123", "type": "function", "function": { "name": "get_weather", "arguments": "{\"kota\":\"Jakarta\"}" } } ] }, "finish_reason": "tool_calls" } ] }

POST /v1/chat/completions (stream)

Set "stream": true. Response bertipe text/event-stream. Urutan lengkap: ``` data: {"id":"cmb-...","object":"chat.completion.chunk","created":1791466000,"model":"deepseek-v4-flash","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}

data: {"id":"cmb-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"OK"},"finish_reason":null}]}

data: {"id":"cmb-...","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":9,"completion_tokens":1,"total_tokens":10}}

data: [DONE] ```

  • Chunk usage hanya muncul jika Anda mengirim stream_options: {"include_usage": true} (atau model mengirimkannya).
  • Setiap baris diawali data: ; stream ditutup data: [DONE].
  • Baris kosong adalah pemisah event — parser SSE standar akan menanganinya.

POST /v1/messages (non-stream)

json { "id": "msg_01abc...", "type": "message", "role": "assistant", "model": "claude-haiku-4.5", "content": [ { "type": "text", "text": "Halo! Ada yang bisa saya bantu?" } ], "stop_reason": "end_turn", "usage": { "input_tokens": 18, "output_tokens": 12 } } Catatan: endpoint ini di upstream selalu berupa stream SSE — PixzRouter **meng-agregasi** menjadi response utuh saat Anda tidak meminta stream`. Model di response ditulis ulang ke slug PixzRouter.

POST /v1/messages (stream)

Event SSE Anthropic asli, diteruskan tanpa buffer: ``` event: message_start data: {"type":"message_start","message":{"id":"msg_...","model":"claude-haiku-4.5","usage":{"input_tokens":18,"output_tokens":0}}}

event: content_block_start data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}

event: content_block_delta data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Halo"}}

event: content_block_stop data: {"type":"content_block_stop","index":0}

event: message_delta data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":12}}

event: message_stop data: {"type":"message_stop"} `` Model berpikir mengirim thinking_delta di content_block_delta`.

Errors — bentuk badan lengkap

Semua error satu bentuk: ``json { "error": { "message": "Model 'gpt-99' tidak ditemukan. Gunakan ID model persis dari GET /v1/models.", "type": "invalid_request_error", "code": "model_not_found", "request_id": "pxr_req_xxxxxxxxxxxxxxxxxxxxxx" } } `` | HTTP | type | code | Kapan | |---|---|---|---| | 400 | invalid_request_error | — | parameter salah | | 400 | invalid_request_error | invalid_reasoning_value | nilai X-Pixz-Reasoning tidak valid | | 401 | authentication_error | invalid_api_key / api_key_revoked | key salah/dicabut | | 402 | insufficient_credits | insufficient_credits | saldo habis | | 403 | permission_error | policy_not_accepted / account_suspended / model_disabled / key_restricted_model | akses ditolak | | 404 | invalid_request_error | model_not_found | ID model salah | | 413 | invalid_request_error | — | body > 10MB | | 429 | rate_limit_error | rate_limit_exceeded | terlalu sering | | 502 | api_error | upstream_error | kesalahan upstream | | 504 | timeout_error | — | upstream timeout (tidak ditagih) |

Client yang benar: baca error.type untuk switch-case, error.request_id untuk logging, dan retry dengan exponential backoff untuk 429/5xx.