Dokumentasi
Kiosapi bisa dipakai langsung di browser (Chat & Studio) atau via API — 100% OpenAI-compatible, cukup ganti base URL & API key. Pilih cara yang paling cocok untukmu.
Daftar isi
Antarmuka Web
Tidak perlu setup apapun — langsung pakai setelah login.
Chat
Buka /chat untuk ngobrol langsung dengan model AI pilihan. Tidak perlu API key atau konfigurasi — sesi web menggunakan sesi login kamu otomatis.
| Fitur | Keterangan |
|---|---|
| Pilih model | Dropdown di header — ganti model kapan saja dalam sesi |
| Model gratis | 50 request/hari tanpa top-up; badge Gratis di picker model |
| Streaming | Respons muncul token per token, langsung |
| Riwayat sesi | Percakapan tersimpan selama tab browser terbuka |
| Lampiran teks | Lampirkan file teks/kode (.txt, .md, .py, dst.) sebagai konteks tambahan |
Untuk penggunaan di luar browser (Cursor, VS Code, kode sendiri) lihat bagian API Reference di bawah.
Studio Kreator
Buka /dashboard/studio untuk membuat gambar & video AI langsung dari browser — tanpa kode, tanpa setup.
Gambar (text-to-image)
- 1. Pilih tab Gambar.
- 2. Tulis prompt — deskripsikan gambar yang ingin dibuat.
- 3. Pilih model (mis.
google/imagen-3) dan opsi kualitas. - 4. Klik Buat Gambar — hasil muncul dalam beberapa detik.
- 5. Download atau simpan ke galeri.
Video (text-to-video / image-to-video)
- 1. Pilih tab Video.
- 2. Tulis prompt. Opsional: upload gambar sebagai frame awal (image-to-video).
- 3. Pilih model, resolusi, dan durasi (detik).
- 4. Klik Buat Video — proses berjalan di background (~1–3 menit).
- 5. Progress muncul di Render Queue. Setelah selesai, video bisa diputar & diunduh.
API Reference
Untuk developer — pakai SDK OpenAI apa pun, cukup ganti base URL & API key.
1. Dapatkan API key
Masuk ke dashboard → Kunci API, beri nama (mis. "Cursor"), klik Buat key, lalu salin kios_live_… (ditampilkan sekali). Simpan di tempat aman.
2. Setel base URL
Di Cursor/Windsurf: Settings → Models → OpenAI API → Override base URL.
Base URL : https://api.kiosapi.id/v1
API Key : kios_live_xxxxxxxxxxxx3. Contoh request
curl
curl https://api.kiosapi.id/v1/chat/completions \
-H "Authorization: Bearer kios_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-4-6",
"messages": [{ "role": "user", "content": "Halo!" }]
}'Python (SDK OpenAI)
from openai import OpenAI
client = OpenAI(
base_url="https://api.kiosapi.id/v1",
api_key="kios_live_xxxx",
)
resp = client.chat.completions.create(
model="openai/gpt-4o",
messages=[{"role": "user", "content": "Halo!"}],
)
print(resp.choices[0].message.content)Panduan lengkap Python (streaming, tool-calling, vision, embeddings, gambar, video, rerank, vector DB, dsb.): /docs/python →
JavaScript / TypeScript
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.kiosapi.id/v1",
apiKey: "kios_live_xxxx",
});
const resp = await client.chat.completions.create({
model: "meta/llama-3.1-8b",
messages: [{ role: "user", content: "Halo!" }],
});
console.log(resp.choices[0].message.content);Panduan lengkap JS/TS (streaming, tool-calling, vision, embeddings, gambar, video, rerank, vector DB, dsb.): /docs/javascript →
4. Streaming
Tambahkan "stream": true untuk respons token-by-token (SSE), seperti OpenAI.
stream = client.chat.completions.create(
model="deepseek/deepseek-v4-flash",
messages=[{"role": "user", "content": "Tulis puisi singkat"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")5. Model & harga
Lihat harga lengkap di tabel harga. Endpoint GET /v1/models mengembalikan daftar model. Klik ID untuk menyalin — tempel persis seperti itu sebagai nama model di Cursor/Windsurf.
6. Studio API — gambar & video
Selain teks, Kiosapi punya API generasi gambar (sinkron), video (asinkron), musik (klip instrumental sinkron atau lagu bervokal asinkron), dan text-to-speech (sinkron). Ditagih per gambar / per detik atau per klip / per lagu / per 1.000 karakter — lihat harga media. Filter keamanan provider selalu aktif; biaya hanya ditagih saat berhasil.
Gambar — POST /v1/images/generations
Sinkron: respons langsung berisi gambar base64. option = tier ukuran/kualitas; n = jumlah gambar (1–4); aspect_ratio opsional.
curl https://api.kiosapi.id/v1/images/generations \
-H "Authorization: Bearer kios_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "google/imagen-3",
"prompt": "kucing oranye memakai topi koki, fotorealistik",
"option": "standard",
"n": 1
}'
# Respons 200:
# { "created": ..., "model": "google/imagen-3",
# "data": [{ "b64_json": "<base64>", "mime": "image/png" }],
# "kiosapi": { "option": "standard", "count": 1, "cost_rupiah": 2000 } }Video — POST /v1/videos/generations
Asinkron: mengembalikan 202 + job_id. option = tier resolusi; duration_seconds panjang klip. Untuk image-to-video, sertakan image (base64) + image_mime.
curl https://api.kiosapi.id/v1/videos/generations \
-H "Authorization: Bearer kios_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "alibaba/wan2.7-t2v",
"prompt": "ombak pantai saat matahari terbenam, sinematik",
"option": "standard",
"duration_seconds": 5
}'
# Respons 202:
# { "job_id": "uuid", "status": "running",
# "poll_url": "https://api.kiosapi.id/v1/jobs/uuid", "estimate_rupiah": 22500 }Pantau job — GET /v1/jobs/:id
curl https://api.kiosapi.id/v1/jobs/uuid \
-H "Authorization: Bearer kios_live_xxxx"
# running: { "status": "running" }
# selesai: { "status": "succeeded", "video_url": "...", "expires_at": "...", "cost_rupiah": 22500 }
# gagal: { "status": "failed", "error": "..." }
# (job musik mengembalikan "audio_url", bukan "video_url")Musik — POST /v1/music/generations
Dua perilaku: google/lyria-2 (klip instrumental 30 dtk, sinkron — respons 200 berisi audio base64) dan minimax/music-2.6 (lagu utuh bervokal hingga ±5 menit, asinkron — respons 202 + job_id, render 1–3 menit). Untuk lagu bervokal, sertakan lyrics (penanda [Verse]/[Chorus]) atau is_instrumental: true. Lagu yang selesai otomatis tersimpan di galeri dan bisa diunduh dari audio_url.
curl https://api.kiosapi.id/v1/music/generations \
-H "Authorization: Bearer kios_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax/music-2.6",
"prompt": "pop akustik Indonesia yang hangat, vokal wanita",
"lyrics": "[Verse]\nPagi cerah di kota\n[Chorus]\nBersama kita bisa"
}'
# Respons 202 → poll GET /v1/jobs/:id sampai:
# { "status": "succeeded", "audio_url": "...", "cost_rupiah": 6500 }Suara (TTS) — POST /v1/audio/speech
Kompatibel OpenAI: kirim input + voice, respons berupa bytes audio mentah (mp3). Model MiniMax punya 9 suara asli bahasa Indonesia (mis. Indonesian_CalmWoman, Indonesian_CaringMan); model OpenAI memakai alloy…shimmer. Biaya per 1.000 karakter, dilaporkan di header X-Kiosapi-Cost-IDR.
curl https://api.kiosapi.id/v1/audio/speech \
-H "Authorization: Bearer kios_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax/speech-2.8-turbo",
"input": "Selamat datang di Kiosapi!",
"voice": "Indonesian_CalmWoman"
}' --output suara.mp3Contoh kode — gambar (Python)
import base64, requests
res = requests.post(
"https://api.kiosapi.id/v1/images/generations",
headers={"Authorization": "Bearer kios_live_xxxx"},
json={"model": "google/imagen-3", "prompt": "kucing oranye memakai topi koki",
"option": "standard", "n": 1},
)
img = res.json()["data"][0]["b64_json"]
with open("out.png", "wb") as f:
f.write(base64.b64decode(img))Contoh kode — video + polling (JavaScript)
const base = "https://api.kiosapi.id";
const headers = { Authorization: "Bearer kios_live_xxxx", "Content-Type": "application/json" };
// 1) submit job
const submit = await fetch(`${base}/v1/videos/generations`, {
method: "POST", headers,
body: JSON.stringify({ model: "alibaba/wan2.7-t2v", prompt: "ombak pantai saat senja",
option: "standard", duration_seconds: 5 }),
});
const { job_id } = await submit.json();
// 2) poll until done (~5s interval)
let job;
do {
await new Promise((r) => setTimeout(r, 5000));
job = await (await fetch(`${base}/v1/jobs/${job_id}`, { headers })).json();
} while (job.status === "running");
if (job.status === "succeeded") console.log(job.video_url);Model media & opsi
| Model ID | Tipe | Opsi (option) |
|---|---|---|
openai/gpt-image-1 | gambar | 1024x1024:low, 1024x1024:medium, 1024x1024:high, 1536x1024:medium, 1024x1536:medium |
openai/gpt-image-2.5-sunburst | gambar | 1024x1024:low, 1024x1024:medium, 1024x1024:high, 1024x1024:xhigh, 1024x1024:max, 1536x1024:medium, 1024x1536:medium |
openai/gpt-image-2.5-flare | gambar | 1024x1024:low, 1024x1024:medium, 1024x1024:high, 1024x1024:xhigh, 1024x1024:max, 1536x1024:medium, 1024x1536:medium |
google/imagen-3 | gambar | standard |
google/imagen-3-fast | gambar | standard |
google/nano-banana-2 | gambar | standard |
alibaba/wan-2.7-image-pro | gambar | standard |
minimax/image-01 | gambar | standard |
zai/glm-image | gambar | standard |
xai/grok-imagine-image | gambar | standard |
xai/grok-imagine-image-quality | gambar | standard |
xai/grok-imagine-image-2.0 | gambar | 1k:low, 1k:medium, 2k:low, 2k:medium |
google/veo-3 | video | 720p, 1080p |
alibaba/wan2.7-t2v | video | standard |
alibaba/happyhorse-1.0-t2v | video | standard |
alibaba/wan2.7-i2v | video (i2v) | standard |
minimax/hailuo-2.3 | video | 768p-6s, 768p-10s, 1080p-6s |
minimax/hailuo-2.3-fast-i2v | video (i2v) | 768p-6s, 768p-10s, 1080p-6s |
minimax/h3 | video | 768p, 2k |
minimax/h3-i2v | video (i2v) | 768p, 2k |
zai/cogvideox-3 | video | standard |
xai/grok-imagine-video | video | standard |
xai/grok-imagine-video-1.5 | video | standard |
apishop/seedance-2.0 | video | 720p-5s, 720p-10s, 1080p-5s, 1080p-10s |
apishop/seedance-2.0-i2v | video (i2v) | 720p-5s, 720p-10s, 1080p-5s, 1080p-10s |
google/lyria-2 | gambar | standard |
minimax/music-2.6 | gambar | song |
minimax/music-3.0 | gambar | song |
openai/tts-1 | gambar | standard |
openai/tts-1-hd | gambar | standard |
minimax/speech-2.8-turbo | gambar | standard |
minimax/speech-2.8-hd | gambar | standard |
mistral/voxtral-tts | gambar | standard |
xai/grok-tts | gambar | standard |
xai/grok-stt | gambar | standard |
openai/whisper-1 | gambar | standard |
mistral/voxtral-transcribe | gambar | standard |
zai/glm-asr | gambar | standard |
alibaba/qwen3-asr-flash | gambar | standard |
Kode error media
| HTTP | code | Arti |
|---|---|---|
| 401 | authentication_error | API key / sesi tidak valid |
| 400 | model_not_found | Model tak dikenal atau disembunyikan |
| 400 | invalid_request_error | Opsi (`option`) tidak valid |
| 402 | insufficient_balance | Saldo kurang — top up |
| 402 | spend_cap_reached | Batas pengeluaran bulanan tercapai |
| 422 | prompt_blocked | Prompt ditolak moderasi |
| 422 | output_blocked | Hasil ditolak moderasi |
| 422 | generation_refused | Provider menolak (filter keamanan) |
| 429 | rate_limit_exceeded | Terlalu banyak permintaan |
| 429 | abuse_throttled | Akun dibatasi sementara (pelanggaran berulang) |
| 504 | generation_timeout | Pembuatan terlalu lama |
| 502 | upstream_unavailable | Layanan provider tak dapat dihubungi |
Spesifikasi OpenAPI 3.1 (model & opsi media digenerate dari katalog live) ada di api.kiosapi.id/openapi.json. Panduan untuk agen AI: /llms.txt.
7. Reranking
Urutkan ulang daftar dokumen berdasar relevansi ke sebuah query — self-hosted (bukan reseller pihak ketiga), bentuk request/response ikut standar Cohere supaya tooling RAG (LangChain, LlamaIndex, dst) bisa langsung pakai Kiosapi sebagai drop-in replacement. Ditagih per 1.000.000 token input — lihat harga.
Rerank — POST /v1/rerank
top_n opsional (default: semua dokumen diberi skor & diurutkan); return_documents opsional (default false) — kalau true, tiap hasil menyertakan teks dokumen aslinya.
curl https://api.kiosapi.id/v1/rerank \
-H "Authorization: Bearer kios_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "baai/bge-reranker-base",
"query": "apa itu kucing?",
"documents": [
"Kucing adalah hewan mamalia berkaki empat.",
"Mobil listrik semakin populer di Indonesia."
],
"return_documents": true
}'
# Respons 200:
# { "model": "baai/bge-reranker-base",
# "results": [
# { "index": 0, "relevance_score": 0.9998, "document": { "text": "Kucing adalah..." } },
# { "index": 1, "relevance_score": 0.0000373, "document": { "text": "Mobil listrik..." } }
# ] }8. Embeddings
Ubah teks jadi vektor untuk pencarian semantik / RAG — kompatibel OpenAI, cukup ganti base URL & API key. Ditagih per 1.000.000 token input — lihat harga.
Embedding — POST /v1/embeddings
curl https://api.kiosapi.id/v1/embeddings \
-H "Authorization: Bearer kios_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/text-embedding-3-small",
"input": "Selamat datang di Kiosapi!"
}'
# Respons 200:
# { "object": "list", "model": "openai/text-embedding-3-small",
# "data": [{ "object": "embedding", "index": 0, "embedding": [0.0123, -0.0456, ...] }],
# "usage": { "prompt_tokens": 6, "total_tokens": 6 } }9. Vector DB
Database vektor untuk RAG — self-hosted (bukan reseller pihak ketiga), bentuk request/response ikut standar Pinecone. Bikin index gratis (tanpa saldo); insert, pencarian, dan penyimpanan yang dibayar — lihat harga.
Bikin index — POST /v1/vector-indexes
curl -X POST https://api.kiosapi.id/v1/vector-indexes \
-H "Authorization: Bearer kios_live_xxxx" \
-H "Content-Type: application/json" \
-d '{"name": "artikel-saya"}'
# Respons 201:
# { "name": "artikel-saya", "dimension": 1536, "metric": "cosine",
# "vector_count": 0, "created_at": "..." }Insert vektor — POST /v1/vector-indexes/:name/vectors/upsert
values wajib tepat 1536 angka (cocok dengan openai/text-embedding-3-small) — gunakan endpoint Embeddings di atas untuk menghasilkannya.
curl -X POST https://api.kiosapi.id/v1/vector-indexes/artikel-saya/vectors/upsert \
-H "Authorization: Bearer kios_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"vectors": [
{ "id": "artikel-1", "values": [0.0123, -0.0456, ...], "metadata": { "kategori": "berita" } }
]
}'
# Respons 200: { "upserted_count": 1 }Cari vektor terdekat — POST /v1/vector-indexes/:name/query
top_k opsional (default 10, maks 100); filter opsional — exact-match per key metadata (mis. {"kategori": "berita"}).
curl -X POST https://api.kiosapi.id/v1/vector-indexes/artikel-saya/query \
-H "Authorization: Bearer kios_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"vector": [0.0123, -0.0456, ...],
"top_k": 5,
"include_metadata": true
}'
# Respons 200:
# { "matches": [{ "id": "artikel-1", "score": 0.87, "metadata": { "kategori": "berita" } }] }Hapus vektor / index — POST .../vectors/delete & DELETE /v1/vector-indexes/:name
curl -X POST https://api.kiosapi.id/v1/vector-indexes/artikel-saya/vectors/delete \
-H "Authorization: Bearer kios_live_xxxx" -H "Content-Type: application/json" \
-d '{"delete_all": true}'
curl -X DELETE https://api.kiosapi.id/v1/vector-indexes/artikel-saya \
-H "Authorization: Bearer kios_live_xxxx"Unggah dokumen — POST /v1/documents
Satu panggilan mengekstrak teks file, memotongnya, meng-embed, lalu mengindeksnya ke index dokumen bersama Anda. Di dashboard, teks PDF & Excel (.xlsx) diekstrak di browser (tanpa parsing berat di server) lalu dikirim sebagai text/plain. Lewat API: PDF mentah selalu di-OCR (Mistral), gambar di-OCR, dan .xlsx mentah ditolak 415 unsupported_extraction — parse barisnya sendiri dan kirim sebagai text/plain dengan field extracted_from=xlsx. Untuk PDF yang sudah punya lapisan teks, ekstrak sendiri di klien lalu kirim text/plain + extracted_from=pdf — hasil lebih bersih & murah, tanpa OCR.
// Ekstrak teks PDF di browser dengan pdfjs-dist, lalu POST sebagai text/plain
import * as pdfjs from 'pdfjs-dist';
pdfjs.GlobalWorkerOptions.workerSrc = new URL('pdfjs-dist/build/pdf.worker.min.mjs', import.meta.url).toString();
const pdf = await pdfjs.getDocument({ data: await file.arrayBuffer() }).promise;
let text = '';
for (let p = 1; p <= pdf.numPages; p++) {
const content = await (await pdf.getPage(p)).getTextContent();
text += content.items.map((i) => i.str).join(' ') + '\n';
}
const body = new FormData();
body.append('file', new Blob([text], { type: 'text/plain' }), 'dokumen.txt');
body.append('extracted_from', 'pdf'); // ditagih native/pdf-text, bukan OCR
await fetch('https://api.kiosapi.id/v1/documents', {
method: 'POST',
headers: { Authorization: 'Bearer kios_live_xxxx' },
body,
});10. Saldo & top-up
Model gratis tidak memotong saldo — kuota 50 request/hari per akun (reset 07:00 WIB), wajib email terverifikasi. Model berbayar memotong saldo rupiah per token, tanpa batas harian. Isi saldo (QRIS, e-wallet, virtual account, kartu) mulai Rp10.000 — saldo masuk otomatis setelah bayar.
Sifat saldo
- Tidak ada masa berlaku. Saldo yang sudah masuk tidak pernah hangus — bisa dipakai kapan saja, berbulan-bulan kemudian sekali pun. Tidak ada biaya administrasi atau pemotongan berkala.
- Prabayar, bukan uang tunai. Saldo hanya bisa dipakai untuk membayar pemakaian layanan Kiosapi. Tidak dapat ditarik/diuangkan dan tidak dapat dipindahtangankan ke akun lain (lihat Ketentuan Layanan §8). Pemakaian dipotong per token (teks) atau per unit (media) sesuai tarif yang berlaku saat itu.
- Satu saldo untuk semua. API, Chat & Studio web, CLI, Konek, dan Hosted Agents menarik dari saldo Rupiah yang sama.
Diskon Tier (otomatis, berdasar pemakaian)
Semakin banyak pemakaian berbayar Anda dalam sebulan, semakin besar diskon otomatis untuk semua pemakaian berbayar (token maupun media) — tidak perlu diaktifkan, tidak perlu beli apa pun.
| Tier | Pemakaian / bulan | Diskon |
|---|---|---|
| Perunggu | Rp200.000 | 5% |
| Perak | Rp400.000 | 10% |
| Emas | Rp600.000 | 15% |
| Platinum | Rp800.000 | 20% |
Perhitungannya berbasis pemakaian (spend), bukan jumlah top-up. Hitungan dimulai ulang dari nol setiap tanggal 1, tetapi tier yang sudah Anda capai tetap berlaku penuh sepanjang bulan berikutnya — sistem memakai tier tertinggi antara bulan ini dan bulan lalu. Jadi tier tidak "reset" mendadak saat ganti bulan; ia baru turun kalau pemakaian bulan berjalan dan bulan sebelumnya sama-sama di bawah ambang. Ini bukan tier seumur hidup — kalau pemakaian berhenti, tier akhirnya kembali ke Reguler. Status tier Anda ada di dashboard.
Paket Hemat (diskon berbatas waktu)
Paket Hemat adalah top-up harga tetap yang Anda beli secara sengaja lewat kartu paket di halaman top-up (bukan otomatis dari nominal top-up biasa). Empat pilihan: Perunggu Rp200rb (5%, 30 hari), Perak Rp400rb (10%, 60 hari), Emas Rp600rb (15%, 90 hari), Platinum Rp800rb (20%, 120 hari).
Ringkasan perbedaan
| Saldo Rupiah | Diskon Tier | Paket Hemat | |
|---|---|---|---|
| Cara didapat | Top-up biasa | Otomatis dari pemakaian | Dibeli manual |
| Masa berlaku | Tidak ada (permanen) | Bulanan, ikut pemakaian | Diskon: 30–120 hari |
| Yang berakhir | — (tidak hangus) | Persentase diskon | Persentase diskon saja — saldo tetap |
| Bisa diuangkan? | Tidak | — | Tidak |
11. Batas & error
- • Rate limit free: 5 req/menit · paid: 60 req/menit (HTTP 429).
- • Free tier: 50 request/hari per akun (reset 07:00 WIB), wajib email terverifikasi.
- • Free tier: maksimal output ~2048 token & input ~24k karakter per request.
- • 401 = API key salah · 400 = model tak dikenal · 402 = saldo kurang.
Integrasi
12. Editor & CLI tools
Karena OpenAI-compatible (plus endpoint Anthropic untuk Claude Code), Kiosapi bisa dipakai di hampir semua tool. Base URL & model:
Base URL (OpenAI) : https://api.kiosapi.id/v1
Base URL (Anthropic) : https://api.kiosapi.id (Claude Code)
Model : mis. anthropic/claude-sonnet-4-6, deepseek/deepseek-v4-flashCline / Roo Code / Continue (VS Code)
Pilih provider OpenAI Compatible → Base URL https://api.kiosapi.id/v1, API key kios_live_…, model ID Kiosapi.
Claude Code (format Anthropic)
export ANTHROPIC_BASE_URL=https://api.kiosapi.id
export ANTHROPIC_API_KEY=kios_live_xxxx
export ANTHROPIC_MODEL=anthropic/claude-sonnet-4-6
export ANTHROPIC_SMALL_FAST_MODEL=anthropic/claude-haiku-4-5
claudeWajib set model ke ID anthropic/* Kiosapi. Mode agent (tools) & streaming jalan penuh.
Codex CLI (~/.codex/config.toml)
model = "anthropic/claude-sonnet-4-6"
model_provider = "kiosapi"
[model_providers.kiosapi]
name = "Kiosapi"
base_url = "https://api.kiosapi.id/v1"
env_key = "KIOSAPI_API_KEY"
wire_api = "chat"Aider
aider --openai-api-base https://api.kiosapi.id/v1 \
--openai-api-key kios_live_xxxx \
--model deepseek/deepseek-v4-flash- • Zed / Chat UI (Open WebUI, LibreChat, Chatbox, TypingMind): isi base URL OpenAI
https://api.kiosapi.id/v1+ API key + ID model. - • Cursor / Windsurf: chat dengan model custom jalan, tetapi sebagian fitur Agent/Tab dirutekan ke server mereka sendiri — untuk agent penuh pakai Cline/Roo Code.
- • GitHub Copilot: tidak didukung (terkunci ke backend GitHub).
13. Bahasa lain
Endpoint OpenAI-compatible — pakai SDK OpenAI di bahasa apa pun, cukup arahkan base URL ke https://api.kiosapi.id/v1. Atau panggil HTTP langsung.
kios_live_… di kode frontend/browser — mudah dicuri.PHP
$ch = curl_init('https://api.kiosapi.id/v1/chat/completions');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer kios_live_xxxx',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'model' => 'openai/gpt-4o',
'messages' => [['role' => 'user', 'content' => 'Halo!']],
]),
]);
$res = json_decode(curl_exec($ch), true);
echo $res['choices'][0]['message']['content'];Panduan lengkap PHP: /docs/php →
Go (sashabaranov/go-openai)
cfg := openai.DefaultConfig("kios_live_xxxx")
cfg.BaseURL = "https://api.kiosapi.id/v1"
client := openai.NewClientWithConfig(cfg)
resp, _ := client.CreateChatCompletion(context.Background(), openai.ChatCompletionRequest{
Model: "openai/gpt-4o",
Messages: []openai.ChatCompletionMessage{{Role: "user", Content: "Halo!"}},
})
fmt.Println(resp.Choices[0].Message.Content)Panduan lengkap Go: /docs/go →
Ruby (ruby-openai)
client = OpenAI::Client.new(
access_token: "kios_live_xxxx",
uri_base: "https://api.kiosapi.id/v1"
)
resp = client.chat(parameters: {
model: "openai/gpt-4o",
messages: [{ role: "user", content: "Halo!" }]
})
puts resp.dig("choices", 0, "message", "content")Panduan lengkap Ruby: /docs/ruby →
Java (HttpClient)
var body = """
{"model":"openai/gpt-4o","messages":[{"role":"user","content":"Halo!"}]}
""";
var req = HttpRequest.newBuilder(URI.create("https://api.kiosapi.id/v1/chat/completions"))
.header("Authorization", "Bearer kios_live_xxxx")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body)).build();
var res = HttpClient.newHttpClient().send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());Panduan lengkap Java: /docs/java →
C# / .NET (HttpClient)
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("Authorization", "Bearer kios_live_xxxx");
var payload = new {
model = "openai/gpt-4o",
messages = new[] { new { role = "user", content = "Halo!" } }
};
var res = await http.PostAsJsonAsync(
"https://api.kiosapi.id/v1/chat/completions", payload);
Console.WriteLine(await res.Content.ReadAsStringAsync());Panduan lengkap C#/.NET: /docs/csharp →
Kiosapi CLI
CLI resmi berbahasa Indonesia — agen koding, tim multi-agen, Skills, MCP, multimodal.
14. Install & perintah
kiosapi (v0.2.1) — CLI resmi berbahasa Indonesia. Butuh Node.js ≥ 20; tanpa dependensi runtime lain.
Panduan lengkap (mode agen, tim multi-agen, Skills, memori, MCP, konfigurasi proyek): /docs/cli →
Pasang & jalankan
# langsung (tanpa install)
npx kiosapi
# atau install global
npm i -g kiosapi
kiosapiMasuk (sekali)
kiosapi masuk # tempel kios_live_… (ditampilkan sebagai ****)
kiosapi periksa # cek konektivitas, versi, & saldo
kiosapi --version # tampilkan versi (alias: kiosapi versi / -v)
kiosapi perbarui # update ke versi terbaruSetup manual (config file)
# Linux/macOS : ~/.kiosapi/config.json
# Windows : %USERPROFILE%\.kiosapi\config.json
{
"apiKey": "kios_live_xxxxxxxxxxxx",
"baseUrl": "https://api.kiosapi.id",
"defaultModel": "anthropic/claude-sonnet-4-6"
}
# Atau via env (untuk CI/script)
export KIOSAPI_API_KEY=kios_live_xxxx
kiosapi tanya "halo"Konfigurasi proyek (.kiosapi/config.json)
Semua setting per-proyek hidup di folder .kiosapi/ (config, skills, memory, tim) dan dilindungi — agen tak bisa menimpa/menghapusnya. Buat lewat kiosapi init (wizard) atau kiosapi setel -p <key> <value>. File kiosapi.json lama di root masih dibaca.
Semua kunci opsional — isi hanya yang ingin di-override. Contoh lengkap (semua kunci yang didukung):
# .kiosapi/config.json — semua kunci opsional
{
"model": "deepseek/deepseek-v4-flash",
"mode": "buat",
"otomatis": false,
"maxSteps": 60,
"maxTokens": 80000,
"projectContext": "REST API Express + TypeScript. Tes di src/__tests__/. Pakai Zod untuk validasi.",
"tim": {
"manajer": "anthropic/claude-sonnet-4-6",
"perencana": "anthropic/claude-sonnet-4-6",
"koder": "deepseek/deepseek-v4-pro",
"peninjau": "openai/gpt-4o-mini"
},
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "ghp_xxx" }
}
}
}Referensi kunci
| Kunci | Tipe | Fungsi |
|---|---|---|
model | string | Model default untuk proyek ini (override default global) |
mode | "rencana" | "edit" | "buat" | Mode agen default saat masuk sesi |
otomatis | boolean | Auto-approve semua tool (lewati konfirmasi) |
maxSteps | number | Batas langkah tool per giliran agen (default 60) |
maxTokens | number | Anggaran token per tugas — agen berhenti bila terlewat |
projectContext | string | Briefing yang di-inject ke setiap agen (stack, konvensi, tujuan) |
tim.manajer | string | Model untuk manajer (yang memutuskan peran). Pilih model pintar |
tim.perencana | string | Model untuk perencana (susun rencana) |
tim.koder | string | Model untuk koder (tulis & jalankan kode) |
tim.peninjau | string | Model untuk peninjau (review hasil) |
mcpServers | object | Server MCP per-proyek (command/args/env) — tools muncul di agen & tim |
Presedence model tim: flag CLI (--koder dst) > tim.<peran> > model proyek > default global. Tiap peran yang tak diisi memakai model. Edit cepat tanpa wizard: kiosapi setel -p <key> <value> (mis. kiosapi setel -p budget 80000).
Perintah utama
| Perintah | Fungsi |
|---|---|
kiosapi | Sesi interaktif (login bila perlu) |
masuk / keluar | Simpan / hapus API key |
periksa | Cek konektivitas + saldo |
tanya "…" | Tanya sekali (streaming); dukung pipe stdin |
ngobrol | Mode percakapan multi-turn (REPL) |
rencana "…" | Agen read-only — telusuri kode & susun rencana |
edit "…" | Agen tulis file — ubah kode tanpa jalankan perintah |
buat "…" | Agen otonom — tulis file & jalankan perintah shell |
init | Wizard setup proyek lokal → .kiosapi/config.json |
setel -p <k> <v> | Atur config proyek (model/mode/budget/konteks…) |
tim "…" | Manajer pilih peran (perencana/koder/peninjau) yang perlu |
tim --peran <peran> "…" | Jalankan satu peran langsung (lewati manajer) |
tim --pakai <nama> "…" | Jalankan tim kustom tersimpan |
tim --buat <nama> [-g] | Buat tim kustom (wizard); -g = global |
tim --daftar | Tampilkan semua tim kustom (project + global) |
lanjut | Lanjutkan sesi / tim dari checkpoint terakhir |
balik | Kembalikan file yang diubah agen giliran terakhir (git) |
skill buat <nama> [-g] | Buat skill baru; -g = global |
skill <nama> [args] | Jalankan skill ($ARGUMENTS/{{1}} di prompt) |
skills | Lihat semua skill (project + global + bawaan) |
mcp | Lihat server MCP dikonfigurasi |
mcp sambung | Test koneksi MCP + tampilkan tools tersedia |
mcp init | Buat ~/.kiosapi/mcp.json dengan contoh konfigurasi |
gambar "…" [-o out.png] | Buat gambar AI (ditagih per gambar) |
video "…" | Buat video AI asinkron (ditagih per detik / per klip) |
musik "…" [--lirik "…"] | Buat musik / lagu bervokal (--instrumental utk tanpa vokal) |
suara "…" [--suara <id>] | Text-to-speech → mp3 (suara Indonesia: Indonesian_CalmWoman dll.) |
lihat <file> "…" | Vision: analisis gambar lokal |
model [--tools] | Daftar model (🔧 = dukung tool/agen) |
setel model | Pilih model default (picker bernomor) |
saldo | Lihat saldo saat ini |
pakai [--hari N] | Ringkasan pemakaian (default 7 hari) |
isi | Buka halaman top-up di browser |
sambung <tool> | Konfigurasi Kiosapi di aider/cursor/opencode dll |
Mode agen
| Mode | Bisa baca | Bisa tulis file | Bisa jalankan perintah |
|---|---|---|---|
rencana | ✓ | — | — |
edit | ✓ | ✓ | — |
buat | ✓ | ✓ | ✓ |
Sesi interaktif & slash commands
$ kiosapi
buat › bikin endpoint GET /health di Express + tes Jest-nya
buat › @src/routes/auth.ts perbaiki error handler ini
buat › @git:diff ada yang perlu di-refactor?
buat › /commit # buat commit git
buat › /diff HEAD~1 # git diff dengan argumen opsional
buat › /shell npm test # jalankan perintah shell langsung
buat › /model # picker model bernomor
buat › /mode rencana # ganti mode agen
buat › /tim tambah auth JWT # manajer pilih peran & jalankan
buat › /tim koder perbaiki bug # jalankan satu peran langsung
buat › /budget 50000 # anggaran token/giliran (agen berhenti bila lewat)
buat › /undo # batalkan giliran terakhir (dari riwayat)
buat › /balik # kembalikan file yang diubah agen (git)
buat › /ringkas # ringkas riwayat (hemat token)
buat › /bantuan # daftar semua slash command@mention — injeksi konteks
buat › @src/routes/auth.ts cek bug di fungsi ini
buat › @src/**/*.test.ts ada tes yang gagal?
buat › @git:diff # git diff HEAD
buat › @git:status # git status --short
buat › @git:log # git log --oneline -10
buat › @git:staged # git diff --stagedMulti-agen (tim) — manajer
Manajer menentukan peran MINIMAL yang perlu untuk tugasmu (tak selalu seluruh pipeline): Perencana (read-only, susun rencana), Koder (tulis file & jalankan), Peninjau (review). Temuan peninjau bisa langsung diperbaiki (loop), dan manajer melacak aktivitas agar tak mengulang kerja. Kamu juga bisa memanggil satu peran langsung.
kiosapi tim "bikin endpoint GET /health + tes Jest" # manajer yang memilih
kiosapi tim --peran koder "perbaiki bug di src/auth.ts" # langsung ke koder
# model berbeda per peran (atau set di .kiosapi/config.json → "tim")
kiosapi tim "refactor modul auth + tes" \
--perencana qwen/qwen3-30b \
--koder deepseek/deepseek-v4-pro \
--peninjau openai/gpt-4o-miniTim checkpoint & lanjutkan
Setiap langkah tim disimpan ke ~/.kiosapi/tim-checkpoint.json. Jika sesi terputus, jalankan kiosapi lanjut — CLI menawarkan resume dari langkah terakhir tanpa mengulang dari awal.
kiosapi lanjut
# Sesi tim tersimpan ditemukan
# Tugas : bikin REST API penuh dengan auth + tes
# Progress : 3/7 langkah selesai
# Langkah selesai:
# ✓ 1. Buat struktur folder + package.json
# ✓ 2. Implementasi model User + migrasi DB
# ✓ 3. Endpoint auth (register/login/refresh)
# Lanjutkan? [y/t/n]Skills — workflow tersimpan
Skills adalah workflow agen yang kamu simpan sebagai file Markdown — cocok untuk tugas berulang. CLI menyertakan skill bawaan siap pakai (review, tes, dokumentasi, jelaskan) yang bisa kamu timpa dengan skill project/global bernama sama.
# Buat skill di project (.kiosapi/skills/fix-tests.md)
kiosapi skill buat fix-tests
# Buat skill global (-g → ~/.kiosapi/skills/, tersedia di semua proyek)
kiosapi skill buat -g review-security
# Jalankan (argumen masuk ke $ARGUMENTS / {{1}})
kiosapi skill fix-tests
kiosapi skill fix-tests "src/auth/"
# Bawaan + dari sesi interaktif
kiosapi skill review # tinjau git diff
buat › /skills
buat › /skill fix-tests src/auth/Format frontmatter skill:
---
description: Perbaiki semua tes yang gagal dan jalankan ulang
mode: buat # rencana | edit | buat
# otomatis: true
# model: deepseek/deepseek-v4-flash
# tim: true # jalankan lewat manajer multi-agen
# peran: koder # atau satu peran langsung: perencana | koder | peninjau
---
Jalankan tes untuk {{1}} dan perbaiki yang gagal:
- Analisis pesan error (pakai $ARGUMENTS atau {{1}} {{2}} untuk argumen)
- Perbaiki satu per satu sampai semua lulus
- Jalankan ulang untuk konfirmasi semua hijauMemori proyek, anggaran token & revert
Memori proyek (.kiosapi/memory.md) menyimpan fakta durable yang ditemukan agen (lokasi kode, konvensi, perintah build) dan disuntik di awal tiap sesi — agar agen tak mengeksplorasi ulang dari nol dan hemat token. Diisi otomatis oleh agen, bisa kamu edit/commit.
# Anggaran token per tugas — agen berhenti rapi bila terlewat (checkpoint tersimpan)
kiosapi buat --budget 80000 "refactor modul auth"
buat › /budget 50000
# Revert: kembalikan file yang diubah agen pada giliran terakhir (via git)
kiosapi balik # tracked → HEAD, file baru dihapus (dengan konfirmasi)
buat › /balikSeluruh folder .kiosapi/ (config, skills, memory, tim) terlindung: tool file maupun perintah shell agen tak bisa menimpa/menghapusnya.
MCP — Model Context Protocol
MCP memungkinkan agen memanggil tools dari server eksternal (filesystem, GitHub API, tools kustom). Transport: stdio (proses lokal). Semua tools MCP muncul otomatis di setiap sesi agen dan tim mode.
# Scaffold file config
kiosapi mcp init # buat ~/.kiosapi/mcp.json
# Test koneksi + lihat tools tersedia
kiosapi mcp sambung~/.kiosapi/mcp.json
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "."]
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "ghp_xxxxxxxxxxxx" }
}
}
}Katalog tool agen bawaan
| Tool | Fungsi | Mode |
|---|---|---|
baca_file | Baca isi file teks | semua |
daftar_file | Daftar isi folder | semua |
cari | Cari teks di semua file | semua |
lihat_gambar | Analisis gambar lokal (vision) | semua |
tulis_file | Buat / timpa file | edit, buat |
edit_file | Ganti potongan teks unik di file | edit, buat |
hapus_file | Hapus file | edit, buat |
pindah_file | Pindahkan / ganti nama file atau folder | edit, buat |
buat_gambar | Buat gambar AI dan simpan ke file (berbayar) | edit, buat |
jalankan | Jalankan perintah shell | buat |
selesai | Tandai tugas selesai dengan ringkasan | semua |
Contoh satu-baris (skrip/CI)
kiosapi tanya "ringkas ini" < README.md
kiosapi buat --otomatis "tambah endpoint /health + tes"
kiosapi tanya -m deepseek/deepseek-v4-flash "jelaskan kode" < src/auth.ts
kiosapi gambar "logo kopi minimalis, flat design" -o logo.pngKiosapi Konek
Asisten AI Telegram/Website/WhatsApp — jawab pelanggan otomatis berdasarkan dokumen bisnis Anda (RAG).
15. Konek (Telegram/Website/WhatsApp)
Kiosapi Konek menyambungkan channel Telegram, widget Website, atau nomor WhatsApp Business Anda ke asisten AI yang menjawab pelanggan otomatis berdasarkan dokumen (FAQ, daftar harga, info produk/jasa) yang Anda unggah — bila pertanyaan di luar dokumen, bot menjawab jujur tidak tahu dan mengirim notifikasi email, bukan mengarang jawaban. Telegram, widget Website, dan WhatsApp aktif sekarang dan bisa dihubungkan sendiri dari dashboard — WhatsApp lewat tombol "Hubungkan WhatsApp" (alur resmi Meta, tanpa menyalin token). Widget Website juga bisa dikustomisasi (warna, ikon, teks, posisi, sapaan otomatis) lengkap dengan pratinjau langsung.
Panduan lengkap (langkah demi langkah menghubungkan WhatsApp, Telegram, dan widget Website; kustomisasi widget Website; jenis dokumen yang bisa diunggah; menghubungkan dokumen per channel; tier model & harga; pemecahan masalah): /docs/konek →
Kelola channel & dokumen di /dashboard/konek.
Hosted Agents
Agen AI yang menjalankan loop tool-calling di server Kiosapi — Anda cukup polling & menjawab panggilan tool.
16. Hosted Agents API
Definisikan sebuah agen sekali (model, system prompt, skema tool, max_steps), lalu jalankan secara asinkron: Kiosapi memanggil model berulang kali, berhenti di requires_action saat model minta memanggil tool (Anda yang mengeksekusi tool-nya, lalu kirim balik lewat tool_outputs), dan melanjutkan sampai ada jawaban akhir. Loop-nya di server — Anda cukup polling GET /v1/runs/:id. Sumber daya: Agent (konfigurasi) → Thread (percakapan persisten) → Run (satu giliran).
Panduan lengkap (model sumber daya, panduan curl end-to-end, mesin status, batasan, penagihan per-langkah, fitur yang belum tersedia): /docs/agents →
Ingin mencoba tanpa menulis kode? Playground di /dashboard/agents memungkinkan Anda membuat konfigurasi agen, menjalankan thread, dan memantau loop langkah demi langkah — termasuk mengisi hasil tool secara manual saat run berhenti di requires_action.