Dokumentasi
Panduan lengkap nanaAI API
Mulai Cepat
1. Daftar Akun
Buat akun di halaman registrasi. Tanpa kartu kredit.
2. Isi Saldo
Top up minimal $5 lewat halaman Isi Saldo.
3. Buat API Key
Generate key di halaman Key API. Simpan β hanya tampil sekali.
4. Kirim Request
Chat completion via endpoint API dengan Bearer token.
Endpoint API
Base URL
Semua request ke base URL ini. OpenAI-compatible.
https://nana.mwcs.dev/v1Chat Completion
Endpoint utama kirim pesan ke model AI.
POST /chat/completionsAutentikasi
Bearer Token
Sertakan API key di header Authorization tiap request.
Authorization: Bearer ***Keamanan
Jangan simpan API key di public repo atau client-side code. Pakai env variable.
Contoh Request
cURL
curl -X POST https://nana.mwcs.dev/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ***" \
-d '{"model":"gpt-4o","messages":[{"role":"user","content":"Halo!"}]}'JavaScript (fetch)
const res = await fetch("https://nana.mwcs.dev/v1/chat/completions", {
method: "POST",
headers: { "Content-Type": "application/json", "Authorization": "***" },
body: JSON.stringify({ model: "gpt-4o", messages: [{ role: "user", content: "Halo!" }] })
});
const data = await res.json();
console.log(data.choices[0].message.content);Python
import requests
response = requests.post("https://nana.mwcs.dev/v1/chat/completions",
headers={"Content-Type":"application/json","Authorization":"***"},
json={"model":"gpt-4o","messages":[{"role":"user","content":"Halo!"}]})
print(response.json()["choices"][0]["message"]["content"])Model Tersedia
OpenAI
Anthropic
DeepSeek
Streaming
SSE Streaming
Dapet token satu per satu tanpa nunggu response lengkap. Format OpenAI SSE.
cURL
curl -X POST https://nana.mwcs.dev/v1/chat/completions -H "Content-Type: application/json" -H "Authorization: Bearer ***" -d '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"Halo!"}],"stream":true}'JavaScript
const res = await fetch("https://nana.mwcs.dev/v1/chat/completions", {
method: "POST",
headers: { "Content-Type": "application/json", "Authorization": "***" },
body: JSON.stringify({ model: "gpt-4o-mini", messages: [{ role: "user", content: "Halo!" }], stream: true })
});
const reader = res.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
for (const line of decoder.decode(value).split("\n").filter(l => l.startsWith("data: "))) {
const json = line.slice(6);
if (json === "[DONE]") break;
console.log(JSON.parse(json).choices?.[0]?.delta?.content || "");
}
}Python
import httpx
with httpx.Client() as client:
with client.stream("POST", "https://nana.mwcs.dev/v1/chat/completions",
headers={"Content-Type":"application/json","Authorization":"***"},
json={"model":"gpt-4o-mini","messages":[{"role":"user","content":"Halo!"}],"stream":True}
) as res:
for line in res.iter_lines():
if line.startswith("data: ") and line[6:] != "[DONE]":
print(line[6:])SDK & Library
OpenAI JS SDK
Tinggal ganti baseURL + apiKey.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nana.mwcs.dev/v1", apiKey: "***" });
const c = await client.chat.completions.create({ model: "gpt-4o-mini", messages: [{ role: "user", content: "Halo!" }] });
console.log(c.choices[0].message.content);OpenAI Python SDK
OpenAI Python library kompatibel.
from openai import OpenAI
client = OpenAI(base_url="https://nana.mwcs.dev/v1", api_key="***")
c = client.chat.completions.create(model="gpt-4o-mini", messages=[{"role":"user","content":"Halo!"}])
print(c.choices[0].message.content)LangChain
Integrasi via ChatOpenAI.
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini", base_url="https://nana.mwcs.dev/v1", api_key="***")
print(llm.invoke("Halo!").content)Rate Limits
Default Limits
Penanganan 429
Exponential backoff dianjurkan:
async function fetchWithRetry(url, opts, retries = 3) {
for (let i = 0; i < retries; i++) {
const res = await fetch(url, opts);
if (res.status !== 429) return res;
await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));
}
throw new Error("Max retries");
}Upgrade
Butuh limit lebih tinggi? Hubungi admin.
API Reference
Base URL
Prefix semua endpoint. OpenAI-compatible.
https://nana.mwcs.dev/v1POST /chat/completions
Parameter:
| Parameter | Tipe | Req | Deskripsi |
|---|---|---|---|
| model | string | Wajib | ID model |
| messages | array | Wajib | [{role, content}] |
| temperature | number | Opsional | 0-2 (default 1) |
| max_tokens | number | Opsional | Max output token |
| stream | boolean | Opsional | SSE streaming |
| top_p | number | Opsional | Nucleus sampling |
Response
{"choices":[{...}],"usage":{"prompt_tokens":20,"completion_tokens":50,"total_tokens":70,"cost":0.000042,"remaining_balance":4.999958}}Error Response
{"error":{"message":"Insufficient balance","type":"insufficient_quota"}}Harga & Billing
Prepaid
Isi saldo dulu, potong otomatis per request. Tanpa tagihan bulanan.
Estimasi
10.000 req Γ 500 token Γ GPT-4o-mini ($0.00015/1K) = $0.75
Cek Pemakaian
Monitor di halaman Pemakaian. Semua request tercatat.
Roadmap
β Selesai
- Registrasi & Login
- Generate API Key
- API Proxy
- Billing & Usage Logs
- Dashboard
- Admin Panel
- UI Docs
π Progress
- Streaming (SSE)
- Payment Gateway
π Rencana
- Google OAuth
- Rate Limiting per Key
- Email Verification
- Domain & SSL
- Webhook Callback
- Unit Tests
Error Codes
401API key tidak valid atau tidak ada.402Saldo tidak cukup. Isi ulang.429Rate limit terlampaui. Tunggu.500Server error. Hubungi admin.502Upstream error. Model mungkin down.