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/v1

Chat Completion

Endpoint utama kirim pesan ke model AI.

POST /chat/completions
πŸ”‘

Autentikasi

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

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

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", messages: [{ role: "user", content: "Halo!" }] })
});
const data = await res.json();
console.log(data.choices[0].message.content);

Python

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

gpt-4ogpt-4o-minigpt-4-turbogpt-3.5-turbo

Anthropic

claude-3.5-sonnetclaude-3-haikuclaude-3-opus

Google

gemini-progemini-1.5-flashgemini-1.5-pro

DeepSeek

deepseek-chatdeepseek-coder
⚑

Streaming

SSE Streaming

Dapet token satu per satu tanpa nunggu response lengkap. Format OpenAI SSE.

cURL

bash
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

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

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.

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

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

python
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

RPM60
RPD10.000
Token/menit100.000
Concurrent10
Max context128K

Penanganan 429

Exponential backoff dianjurkan:

javascript
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/v1

POST /chat/completions

Parameter:

ParameterTipeReqDeskripsi
modelstringWajibID model
messagesarrayWajib[{role, content}]
temperaturenumberOpsional0-2 (default 1)
max_tokensnumberOpsionalMax output token
streambooleanOpsionalSSE streaming
top_pnumberOpsionalNucleus sampling

Response

json
{"choices":[{...}],"usage":{"prompt_tokens":20,"completion_tokens":50,"total_tokens":70,"cost":0.000042,"remaining_balance":4.999958}}

Error Response

json
{"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.
❓

FAQ