API v1 · beta

Dokumentasi API Weind

Satu API untuk akun, katalog model, chat, kunci akses, dan pemakaian. Halaman ini hanya memuat endpoint yang benar-benar terdaftar di kode yang berjalan, bukan rencana.

Base URL https://weind.id
Mulai cepat

Dari nol ke permintaan pertama

Buat akun, simpan token, lalu panggil endpoint terautentikasi. Semua contoh di bawah bisa disalin apa adanya.

1. Buat akun (atau masuk)
curl -sS -X POST https://weind.id/v1/auth/register \
  -H 'Content-Type: application/json' \
  -d '{ "email": "[email protected]", "password": "rahasia-yang-panjang", "display_name": "Nama Kamu" }'
# Sudah punya akun? Gunakan POST /v1/auth/login dengan email + password saja.
2. Simpan token dari respons
{ "data": { "user": { "id": "<uuid>", "email": "[email protected]", "displayName": "Nama Kamu" },
  "access_token": "<jwt>", "refresh_token": "<token>", "token_type": "Bearer", "expires_in": 900 } }
3. Panggil endpoint terautentikasi
export TOKEN='<access_token dari langkah 2>'
curl -sS https://weind.id/v1/auth/me -H "Authorization: Bearer $TOKEN"
# { "data": { "user": { ... }, "workspace_id": "<uuid>" } }
4. Buat API key untuk integrasi server
curl -sS -X POST https://weind.id/v1/api-keys \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{ "scopes": ["models:read", "chat:write", "usage:read"] }'
# data.key diawali weind_sk_ dan hanya ditampilkan sekali.
Autentikasi

Dua jenis kredensial

Kirim kredensial di header Authorization: Bearer <kredensial>. Server membedakannya dari bentuk nilainya: API key selalu diawali weind_sk_, token sesi tidak.

KredensialBentukMasa berlakuDipakai untuk
Token sesiJWT (access_token) expires_in detik, bawaan 15 menit. Diperpanjang lewat refresh token (bawaan 30 hari). /v1/auth/me, /v1/auth/workspaces, /v1/usage, /v1/usage/export, /v1/ledger, /v1/reconciliation, dan manajemen /v1/api-keys
API keyweind_sk_ + rahasia base64url Tanpa kedaluwarsa kecuali Anda mengisi expiresAt; bisa dicabut kapan saja. /v1/chat dan endpoint berbayar lain; juga diterima di /v1/api-keys

Token sesi

API key

Header development dinonaktifkan di produksi

Di development, modul internal menerima header x-weind-workspace dan x-weind-user sebagai jalan pintas identitas. Di produksi keduanya ditolak tanpa syarat: setiap permintaan yang membawanya dijawab 401 dengan kode DEV_AUTH_DISABLED, bahkan bila header Authorization yang sah ikut disertakan.

Jangan pernah mengirim header tersebut ke https://weind.id. Gunakan token sesi atau API key.

Contoh penolakan
curl -sS 'https://weind.id/v1/usage?period=2026-09' -H 'x-weind-workspace: <uuid>'
# 401 { "statusCode": 401, "code": "DEV_AUTH_DISABLED", "error": "Unauthorized",
#        "message": "Header autentikasi development tidak diizinkan di produksi." }
Referensi

Endpoint

Daftar di bawah dibangun dari data di halaman ini dan hanya memuat rute yang terdaftar di kode aplikasi yang berjalan. Buka tiap kelompok untuk melihat detail.

Penanganan error

Satu bentuk envelope untuk semua kegagalan

Penangan error yang terpasang di aplikasi /v1 selalu membalas bentuk berikut, sesuai tipe ErrorEnvelope di kode.

Envelope error
{ "error": { "code": "VALIDATION_ERROR",
  "message": "Parameter `period` harus \"YYYY-MM\" (mis. 2026-09).",
  "request_id": "<id permintaan>", "retryable": false } }

Dua pengecualian bentuk

1. Penjaga dev header. Respons DEV_AUTH_DISABLED memakai bentuk ringkas { statusCode, code, error, message } dan dibuat sebelum penangan error berjalan.

2. Endpoint pemakaian. /v1/usage, /v1/usage/export, /v1/ledger, dan /v1/reconciliation punya penangan error sendiri yang mengisi request_id dari header x-request-id yang Anda kirim, sehingga nilainya bisa null.

Kode error yang dipakai API publik

KodeStatusRetryableArtinya
DEV_AUTH_DISABLED401tidakHeader x-weind-workspace/x-weind-user dikirim ke produksi.
AUTH_TOKEN_MISSING401tidakKredensial tidak ada, atau token sesi tidak memuat workspace.
AUTH_TOKEN_INVALID401tidakToken sesi tidak valid atau sudah kedaluwarsa.
AUTH_REFRESH_INVALID401tidakRefresh token tidak ada atau tidak berlaku.
AUTH_INVALID_CREDENTIALS401tidakEmail atau password salah. Login juga memakai kode ini bila email belum terdaftar.
AUTH_EMAIL_EXISTS409tidakEmail sudah terdaftar saat register.
API_KEY_MISSING401tidakEndpoint berbayar dipanggil tanpa API key.
API_KEY_INVALID401tidakAPI key tidak dikenal.
API_KEY_REVOKED401tidakAPI key sudah dicabut.
API_KEY_EXPIRED401tidakAPI key melewati expiresAt.
VALIDATION_ERROR400tidakBody atau query tidak lolos validasi.
NOT_FOUND404tidakRute atau resource tidak ada.
IDEMPOTENCY_KEY_REQUIRED400tidakHeader Idempotency-Key tidak dikirim.
IDEMPOTENCY_KEY_INVALID400tidakHeader Idempotency-Key melebihi 255 karakter.
IDEMPOTENCY_KEY_REPLAYED409tidakKey yang sama masih diproses permintaan lain. Ulangi dengan key yang sama setelah jeda singkat.
IDEMPOTENCY_KEY_MISMATCH409tidakKey yang sama dipakai dengan body berbeda. Pakai key baru.
PAYLOAD_TOO_LARGE413tidakBody melebihi batas penjaga keamanan (64 KiB).
RATE_LIMITED429yaBatas laju terlampaui. Lihat Retry-After.
SERVICE_UNAVAILABLE503yaDependensi sedang tidak sehat.
INTERNAL_ERROR500tidakKesalahan tak terduga. Sertakan request_id saat melapor.

Batas laju

Setiap endpoint /v1 dibatasi per workspace; permintaan anonim dihitung terpisah. Aturan khusus yang berlaku untuk permukaan publik ini: chat.send 30/menit (token bucket), api_keys.write 10 per 10 menit, dan api_keys.read ikut aturan global. Endpoint auth, katalog, dan pemakaian memakai aturan global 300 permintaan/menit. Saat terlampaui, jawabannya 429 dengan header Retry-After.

Batasan saat ini

Yang belum bisa Anda andalkan

Kami memilih jujur daripada terlihat siap

  • Katalog model masih kosong. GET /v1/models saat ini mengembalikan array kosong, karena belum ada model yang diaktifkan di database produksi.
  • Pemanggilan model AI sungguhan belum aktif. Modul chat berjalan dengan adapter tiruan: setiap respons memuat simulated: true, dan tidak ada permintaan yang benar-benar dikirim ke penyedia model.
  • Pembayaran belum aktif. Top-up saldo, invoice, dan refund belum bisa dipakai untuk uang sungguhan, sehingga angka pemakaian dan biaya Anda masih nol.
  • Beberapa modul ada di API tetapi tidak didokumentasikan di sini. Agent builder, dokumen, komplain, dan pembayaran sengaja ditahan sampai statusnya jelas. Halaman ini hanya memuat yang bisa dipakai sekarang.

Spesifikasi mesin-terbaca tersedia di /v1/openapi.yaml, dan Swagger UI bawaan server ada di /v1/docs.