# Z.ai (GLM) โ€” Zapi reference > GLM (Zhipu z.ai) chat โ€” model GLM-4.7. Endpoint kompatibel OpenAI Chat Completions (stream & non-stream). **Base URL:** `https://api.zpi.web.id` **Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a free key at https://zpi.web.id/dashboard/keys. **Response envelope:** `{ status, message, content }` **Rate limit:** 60 req/min on free tier. **Related:** - Detail page: https://zpi.web.id/api/ai/z-ai - Endpoint catalog: https://zpi.web.id/category/ai - Concise index: https://zpi.web.id/llms.txt - Full reference: https://zpi.web.id/llms-full.txt --- ## Z.ai (GLM) **Category:** ai ยท **Slug:** `z-ai` **Detail page:** https://zpi.web.id/api/ai/z-ai GLM (Zhipu z.ai) chat โ€” model GLM-4.7. Endpoint kompatibel OpenAI Chat Completions (stream & non-stream). **Tags:** ai, chat, llm, glm, zhipu, z.ai ### Chat Completions Kirim percakapan (OpenAI-format messages) ke GLM-4.7. Dukung stream (SSE) & non-stream. - **Method:** `POST` - **Endpoint:** `https://api.zpi.web.id/v1/ai:z-ai/chat` **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `messages` | array | body | yes | OpenAI-format message history. Multi-turn penuh: system + riwayat user/assistant + pertanyaan terbaru semua dikirim sebagai konteks. System message dihormati untuk gaya/peran. Tier anonim = GLM-4.7, text-only. | | `stream` | boolean | query | no | Stream balasan via SSE (OpenAI delta). Default false | | `model` | string | body | no | Diabaikan (anonymous tier = GLM-4.7). Diterima untuk kompat SDK OpenAI. | **cURL:** ```bash curl -X POST "https://api.zpi.web.id/v1/ai:z-ai/chat" \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "messages": [ { "role": "system", "content": "Kamu adalah Zapi AI, asisten yang ramah, ringkas, dan menjawab dalam Bahasa Indonesia." }, { "role": "user", "content": "Halo, aku lagi belajar HTTP." }, { "role": "assistant", "content": "Tentu! HTTP itu protokol request-response. Mau mulai dari mana?" }, { "role": "user", "content": "Jelaskan beda 401 dan 403 dalam satu kalimat masing-masing." } ], "model": "VALUE" }' ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/ai:z-ai/chat", { method: "POST", headers: { "x-api-key": process.env.ZAPI_KEY, "Content-Type": "application/json" }, body: JSON.stringify({ "messages": [ { "role": "system", "content": "Kamu adalah Zapi AI, asisten yang ramah, ringkas, dan menjawab dalam Bahasa Indonesia." }, { "role": "user", "content": "Halo, aku lagi belajar HTTP." }, { "role": "assistant", "content": "Tentu! HTTP itu protokol request-response. Mau mulai dari mana?" }, { "role": "user", "content": "Jelaskan beda 401 dan 403 dalam satu kalimat masing-masing." } ], "model": "VALUE" }) }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.post("https://api.zpi.web.id/v1/ai:z-ai/chat", headers={"x-api-key": "YOUR_API_KEY"}, json={ "messages": [ { "role": "system", "content": "Kamu adalah Zapi AI, asisten yang ramah, ringkas, dan menjawab dalam Bahasa Indonesia." }, { "role": "user", "content": "Halo, aku lagi belajar HTTP." }, { "role": "assistant", "content": "Tentu! HTTP itu protokol request-response. Mau mulai dari mana?" }, { "role": "user", "content": "Jelaskan beda 401 dan 403 dalam satu kalimat masing-masing." } ], "model": "VALUE" }) data = r.json() ``` **Example response:** ```json { "id": "chatcmpl-Czhs3X3eEjRU26q4qjQQs", "model": "glm-4.7", "usage": { "total_tokens": 108, "prompt_tokens": 60, "completion_tokens": 48 }, "object": "chat.completion", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "401 berarti kamu belum terautentikasi atau identitasmu tidak dikenali oleh server. 403 berarti server sudah tahu siapa kamu, tapi kamu tidak punya izin untuk mengakses sumber daya tersebut." }, "finish_reason": "stop" } ], "created": 1782118631 } ``` --- _Generated: 2026-08-02T14:27:45.090Z_