KKiosapi.id

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.

FiturKeterangan
Pilih modelDropdown di header — ganti model kapan saja dalam sesi
Model gratis50 request/hari tanpa top-up; badge Gratis di picker model
StreamingRespons muncul token per token, langsung
Riwayat sesiPercakapan tersimpan selama tab browser terbuka
Lampiran teksLampirkan 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. 1. Pilih tab Gambar.
  2. 2. Tulis prompt — deskripsikan gambar yang ingin dibuat.
  3. 3. Pilih model (mis. google/imagen-3) dan opsi kualitas.
  4. 4. Klik Buat Gambar — hasil muncul dalam beberapa detik.
  5. 5. Download atau simpan ke galeri.

Video (text-to-video / image-to-video)

  1. 1. Pilih tab Video.
  2. 2. Tulis prompt. Opsional: upload gambar sebagai frame awal (image-to-video).
  3. 3. Pilih model, resolusi, dan durasi (detik).
  4. 4. Klik Buat Video — proses berjalan di background (~1–3 menit).
  5. 5. Progress muncul di Render Queue. Setelah selesai, video bisa diputar & diunduh.
Biaya:Model berbayar ditagih per gambar atau per detik video — lihat tabel harga. Galeri tersimpan di browser (localStorage); clear browser data akan menghapus index galeri (file di server tetap ada sampai expired).

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_xxxxxxxxxxxx

3. 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.

Gratis
Berbayar

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.mp3

Contoh 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 IDTipeOpsi (option)
openai/gpt-image-1gambar1024x1024:low, 1024x1024:medium, 1024x1024:high, 1536x1024:medium, 1024x1536:medium
openai/gpt-image-2.5-sunburstgambar1024x1024:low, 1024x1024:medium, 1024x1024:high, 1024x1024:xhigh, 1024x1024:max, 1536x1024:medium, 1024x1536:medium
openai/gpt-image-2.5-flaregambar1024x1024:low, 1024x1024:medium, 1024x1024:high, 1024x1024:xhigh, 1024x1024:max, 1536x1024:medium, 1024x1536:medium
google/imagen-3gambarstandard
google/imagen-3-fastgambarstandard
google/nano-banana-2gambarstandard
alibaba/wan-2.7-image-progambarstandard
minimax/image-01gambarstandard
zai/glm-imagegambarstandard
xai/grok-imagine-imagegambarstandard
xai/grok-imagine-image-qualitygambarstandard
xai/grok-imagine-image-2.0gambar1k:low, 1k:medium, 2k:low, 2k:medium
google/veo-3video720p, 1080p
alibaba/wan2.7-t2vvideostandard
alibaba/happyhorse-1.0-t2vvideostandard
alibaba/wan2.7-i2vvideo (i2v)standard
minimax/hailuo-2.3video768p-6s, 768p-10s, 1080p-6s
minimax/hailuo-2.3-fast-i2vvideo (i2v)768p-6s, 768p-10s, 1080p-6s
minimax/h3video768p, 2k
minimax/h3-i2vvideo (i2v)768p, 2k
zai/cogvideox-3videostandard
xai/grok-imagine-videovideostandard
xai/grok-imagine-video-1.5videostandard
apishop/seedance-2.0video720p-5s, 720p-10s, 1080p-5s, 1080p-10s
apishop/seedance-2.0-i2vvideo (i2v)720p-5s, 720p-10s, 1080p-5s, 1080p-10s
google/lyria-2gambarstandard
minimax/music-2.6gambarsong
minimax/music-3.0gambarsong
openai/tts-1gambarstandard
openai/tts-1-hdgambarstandard
minimax/speech-2.8-turbogambarstandard
minimax/speech-2.8-hdgambarstandard
mistral/voxtral-ttsgambarstandard
xai/grok-ttsgambarstandard
xai/grok-sttgambarstandard
openai/whisper-1gambarstandard
mistral/voxtral-transcribegambarstandard
zai/glm-asrgambarstandard
alibaba/qwen3-asr-flashgambarstandard

Kode error media

HTTPcodeArti
401authentication_errorAPI key / sesi tidak valid
400model_not_foundModel tak dikenal atau disembunyikan
400invalid_request_errorOpsi (`option`) tidak valid
402insufficient_balanceSaldo kurang — top up
402spend_cap_reachedBatas pengeluaran bulanan tercapai
422prompt_blockedPrompt ditolak moderasi
422output_blockedHasil ditolak moderasi
422generation_refusedProvider menolak (filter keamanan)
429rate_limit_exceededTerlalu banyak permintaan
429abuse_throttledAkun dibatasi sementara (pelanggaran berulang)
504generation_timeoutPembuatan terlalu lama
502upstream_unavailableLayanan 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

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.

TierPemakaian / bulanDiskon
PerungguRp200.0005%
PerakRp400.00010%
EmasRp600.00015%
PlatinumRp800.00020%

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).

Penting:Yang punya masa berlaku hanya diskonnya. Uang yang Anda bayarkan tetap masuk sebagai saldo Rupiah biasa yang tidak pernah hangus — begitu masa berlaku paket habis, saldo Anda utuh, hanya persentase diskonnya yang berhenti. Diskon efektif yang dipakai penagihan adalah yang lebih besar antara Diskon Tier dan Paket Hemat yang sedang aktif (tidak ditumpuk). Membeli paket baru menggantikan paket yang masih aktif.

Ringkasan perbedaan

Saldo RupiahDiskon TierPaket Hemat
Cara didapatTop-up biasaOtomatis dari pemakaianDibeli manual
Masa berlakuTidak ada (permanen)Bulanan, ikut pemakaianDiskon: 30–120 hari
Yang berakhir— (tidak hangus)Persentase diskonPersentase diskon saja — saldo tetap
Bisa diuangkan?Tidak—Tidak

11. Batas & error

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-flash

Cline / 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
claude

Wajib 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

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.

Keamanan: panggil API dari server/backend aplikasi Anda. Jangan menaruh 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
kiosapi

Masuk (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 terbaru

Setup 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

KunciTipeFungsi
modelstringModel default untuk proyek ini (override default global)
mode"rencana" | "edit" | "buat"Mode agen default saat masuk sesi
otomatisbooleanAuto-approve semua tool (lewati konfirmasi)
maxStepsnumberBatas langkah tool per giliran agen (default 60)
maxTokensnumberAnggaran token per tugas — agen berhenti bila terlewat
projectContextstringBriefing yang di-inject ke setiap agen (stack, konvensi, tujuan)
tim.manajerstringModel untuk manajer (yang memutuskan peran). Pilih model pintar
tim.perencanastringModel untuk perencana (susun rencana)
tim.koderstringModel untuk koder (tulis & jalankan kode)
tim.peninjaustringModel untuk peninjau (review hasil)
mcpServersobjectServer 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

PerintahFungsi
kiosapiSesi interaktif (login bila perlu)
masuk / keluarSimpan / hapus API key
periksaCek konektivitas + saldo
tanya "…"Tanya sekali (streaming); dukung pipe stdin
ngobrolMode 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
initWizard 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 --daftarTampilkan semua tim kustom (project + global)
lanjutLanjutkan sesi / tim dari checkpoint terakhir
balikKembalikan 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)
skillsLihat semua skill (project + global + bawaan)
mcpLihat server MCP dikonfigurasi
mcp sambungTest koneksi MCP + tampilkan tools tersedia
mcp initBuat ~/.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 modelPilih model default (picker bernomor)
saldoLihat saldo saat ini
pakai [--hari N]Ringkasan pemakaian (default 7 hari)
isiBuka halaman top-up di browser
sambung <tool>Konfigurasi Kiosapi di aider/cursor/opencode dll

Mode agen

ModeBisa bacaBisa tulis fileBisa 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 --staged

Multi-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-mini

Tim 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 hijau

Memori 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 › /balik

Seluruh 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

ToolFungsiMode
baca_fileBaca isi file tekssemua
daftar_fileDaftar isi foldersemua
cariCari teks di semua filesemua
lihat_gambarAnalisis gambar lokal (vision)semua
tulis_fileBuat / timpa fileedit, buat
edit_fileGanti potongan teks unik di fileedit, buat
hapus_fileHapus fileedit, buat
pindah_filePindahkan / ganti nama file atau folderedit, buat
buat_gambarBuat gambar AI dan simpan ke file (berbayar)edit, buat
jalankanJalankan perintah shellbuat
selesaiTandai tugas selesai dengan ringkasansemua

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.png

Kiosapi 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.