MyTokenAI

Docs & Cara Pakai

API MyTokenAI 100% OpenAI-compatible. Semua SDK/library yang nyambung ke OpenAI bisa langsung dipakai — tinggal ganti base URL + API key. Token didebit dari pool key lu per request sesuai multiplier model (lihat halaman Models).

1. Yang lu butuhin

Base URL
https://api.vinnnservices.my.id/v1
API Key
sk-XXXX (halaman API)
Model
mis. deepseek-v3.2

Sudah punya key? Lihat di halaman API. Belum? Beli via QRIS dulu.

2. Pasang di 9Router (custom provider)

1
Buka dashboard 9Router lu
npm install -g 9router lalu jalanin 9router — dashboard kebuka di localhost:20128/dashboard.
2
Providers → Add Custom
Type: OpenAI-compatible. Base URL: https://api.vinnnservices.my.id/v1. API Key: sk-XXXX dari halaman API. Models: daftar model aktif (lihat halaman Models).
3
Validate → Save
9Router bakal ngetes endpoint lu. Kalau OK, model muncul di router lu — otomatis bisa dipakai semua CLI/IDE (Cursor, Claude Code, Codex, Cline, dst).
4
Point tool ke 9Router
Set base URL tool lu ke http://localhost:20128/v1 — token debit tetap dihitung di sisi MyTokenAI per request.

3. Contoh kode

cURL — chat biasa
curl https://api.vinnnservices.my.id/v1/chat/completions \
  -H "Authorization: Bearer sk-XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v3.2",
    "messages": [{"role": "user", "content": "halo"}]
  }'
cURL — streaming (SSE)
curl https://api.vinnnservices.my.id/v1/chat/completions \
  -H "Authorization: Bearer sk-XXXX" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-4.5",
    "stream": true,
    "messages": [{"role": "user", "content": "halo"}]
  }'
Python (openai SDK)
from openai import OpenAI

client = OpenAI(
    base_url="https://api.vinnnservices.my.id/v1",
    api_key="sk-XXXX",
)

resp = client.chat.completions.create(
    model="glm-5.3-flash",
    messages=[{"role": "user", "content": "halo"}],
)
print(resp.choices[0].message.content)
JavaScript (openai SDK)
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.vinnnservices.my.id/v1",
  apiKey: "sk-XXXX",
});

const stream = await client.chat.completions.create({
  model: "kimi-k3",
  stream: true,
  messages: [{ role: "user", content: "halo" }],
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

4. Debit & multiplier

Debit per request = (input_fresh×1.0 + cached×0.1 + cache_write×1.25 + output×3.0) × multiplier(model)

Sisa pool lu ditulis di header response X-Pool-Remaining. Streaming dihitung dari objek usage di chunk terakhir — kita inject otomatis stream_options:{"include_usage": true}.

Key mati kalau pool abis atau durasi habis. Topup/extend key lama bisa lewat halaman Topup.