Konvensi Umum V1 API

Autentikasi, penagihan, objek bersama, dan format respons error untuk V1 Open API

Dokumen ini menjelaskan autentikasi, penagihan, objek bersama, dan format respons error untuk V1 Open API (/v1/*).

Cakupan: Endpoint Relay /v1 publik — total 12.


Konvensi umum

Base URL

http://www.mangoto.ai

Endpoint dipasang di root domain, mis. POST http://www.mangoto.ai/v1/chat/completions.

Autentikasi

Semua endpoint /v1 publik menggunakan Bearer Token:

Authorization: Bearer sk-xxxxxxxxxxxxxxxx
AturanDeskripsi
Validasi tokenMemvalidasi API Key, status pengguna, dan saldo/kuota
Allowlist IPJika token memiliki allowlist IP, sumber permintaan diperiksa
Override channelAdmin dapat menambahkan -{channelId} setelah Key (mis. sk-xxx-6); pengguna biasa tidak dapat
Kegagalan authMengembalikan HTTP 401 / 403

Pengecualian: GET /v1/videos/{task_id}/content mendukung Session konsol admin dan Bearer Token.

Content-Type

SkenarioContent-Type
Permintaan JSONapplication/json
Edit gambar / buat video dengan filemultipart/form-data
Respons TTSaudio/mpeg, audio/wav, dll. (tergantung response_format)
Streaming Chat / Responsestext/event-stream (SSE)

Penagihan

  • Gateway memilih channel upstream secara otomatis berdasarkan model di body permintaan (atau parameter path)
  • Mendukung penagihan berbasis token, per permintaan, per detik, dan strategi lainnya
  • API Key yang berbeda mungkin melihat daftar model yang berbeda

Objek respons bersama

usage (penagihan token)

Umum di respons endpoint teks (Chat / Completions / Responses):

FieldTipeDeskripsi
prompt_tokensintegerJumlah token input (Completions / Chat)
completion_tokensintegerJumlah token output (Completions / Chat)
total_tokensintegerTotal jumlah token
input_tokensintegerJumlah token input (Responses)
output_tokensintegerJumlah token output (Responses)
prompt_cache_hit_tokensintegerToken input yang di-cache (beberapa model)
prompt_tokens_detailsobjectRincian token input
prompt_tokens_details.cached_tokensintegerJumlah token yang di-cache
prompt_tokens_details.text_tokensintegerJumlah token teks
prompt_tokens_details.audio_tokensintegerJumlah token audio
prompt_tokens_details.image_tokensintegerJumlah token gambar
completion_tokens_detailsobjectRincian token output
completion_tokens_details.reasoning_tokensintegerJumlah token reasoning
completion_tokens_details.text_tokensintegerJumlah token teks

usage (penagihan per permintaan, gambar)

FieldTipeDeskripsi
quota_typeintegerPengenal jenis penagihan
quotaintegerKuota yang dikonsumsi oleh permintaan ini
request_countintegerJumlah permintaan, biasanya 1
prompt_tokensintegerToken input (biasanya 0 untuk endpoint gambar)
completion_tokensintegerToken output (biasanya 0 untuk endpoint gambar)
total_tokensintegerTotal token (biasanya 0 untuk endpoint gambar)

Respons error

Error standar (teks / gambar / audio / konten video)

Kode status HTTP: 400, 401, 403, 404, 429, 500, dll.

{
  "error": {
    "message": "Invalid request",
    "type": "invalid_request_error",
    "code": "invalid_request",
    "param": "model"
  }
}
FieldTipeDeskripsi
error.messagestringDeskripsi error yang dapat dibaca manusia
error.typestringJenis error, mis. invalid_request_error, insufficient_quota
error.codestringKode error, mis. invalid_request, model_not_found
error.paramstringField permintaan yang menyebabkan error (jika ada)
error.metadataobjectMetadata diperluas (dikembalikan beberapa upstream)

Error tugas (pembuatan / kueri tugas video gagal)

Kode status HTTP: 400, 429, dll.

{
  "code": "invalid_request",
  "message": "model is required"
}
FieldTipeDeskripsi
codestringKode error; umumnya invalid_request
messagestringDeskripsi error

Pada HTTP 429, message adalah: 当前分组上游负载已饱和,请稍后再试 (beban upstream untuk grup saat ini sudah jenuh; coba lagi nanti).

Error diperluas gateway (daftar model, daftar suara, dll.)

Kode status HTTP: 200 (kegagalan bisnis) atau 400.

{
  "success": false,
  "message": "get user group failed"
}
FieldTipeDeskripsi
successbooleanApakah panggilan berhasil; false berarti gagal
messagestringDeskripsi error

Saldo token & detail penggunaan

Authentication matches other /v1 APIs: Authorization: Bearer sk-xxxxxxxx. Only the current Bearer token's data can be queried.

MetodePathDeskripsi
GET/v1/token/balanceKueri saldo token (⚡)
GET/v1/token/consumeQuery current API Key consume records (paginated)

Autentikasi: Authorization: Bearer sk-xxxxxxxx


GET /v1/token/balance

Query the balance of the current Bearer token, returning remaining and used quota in ⚡.

Autentikasi: Authorization: Bearer sk-xxxxxxxx

Parameter permintaan

No query parameters.

Contoh permintaan (curl)

curl http://www.mangoto.ai/v1/token/balance \
  -H "Authorization: Bearer sk-xxxxx"

Body respons

HTTP 200

{
  "success": true,
  "message": "",
  "data": {
    "id": 1,
    "name": "API Token",
    "remain_quota_usd": 0.2,
    "used_quota_usd": 0.1,
    "unlimited_quota": false
  }
}

Field respons

FieldTipeDeskripsi
successbooleanApakah panggilan berhasil
messagestringPesan status
data.idintegerID token
data.namestringNama token
data.remain_quota_usdnumberKuota tersisa (⚡). Selalu 0 untuk token tak terbatas
data.used_quota_usdnumberKuota terpakai (⚡)
data.unlimited_quotabooleanApakah token memiliki kuota tak terbatas

GET /v1/token/consume

Paginated consume records for the current Bearer API Key only (token_id, type=consume). Not the owning user's wallet logs.

Autentikasi: Authorization: Bearer sk-xxxxxxxx

Parameter permintaan

ParameterTipeWajibDeskripsi
pageintegerTidakNomor halaman, default 1
page_sizeintegerTidakItem per halaman, default 10, maksimum 100
time_rangestringTidakFilter rentang waktu cepat; hanya all, today, yesterday, week, month yang diizinkan. Prioritas lebih tinggi daripada start_timestamp / end_timestamp
start_timestampintegerTidakTimestamp mulai (digunakan saat time_range kosong)
end_timestampintegerTidakTimestamp akhir (digunakan saat time_range kosong)
model_namestringTidakFilter nama model
request_idstringTidakFilter ID permintaan
upstream_request_idstringTidakFilter ID permintaan upstream

Contoh permintaan (curl)

curl "http://www.mangoto.ai/v1/token/consume?page=1&page_size=10&time_range=today" \
  -H "Authorization: Bearer sk-xxxxx"

Body respons

HTTP 200

{
  "success": true,
  "message": "",
  "code": 0,
  "data": {
    "page": 1,
    "page_size": 10,
    "total": 100,
    "items": [
      {
        "id": 1,
        "created_at": 1700000000,
        "type": 2,
        "type_name": "",
        "content": "",
        "token_name": "default",
        "model_name": "gpt-3.5-turbo",
        "app_name": "",
        "usage_name": "gpt-3.5-turbo",
        "quota_usd": 0.002,
        "quota_type": 2
      }
    ]
  }
}

Field respons

FieldTipeDeskripsi
successbooleanApakah panggilan berhasil
messagestringPesan status
codeintegerKode status; 0 = sukses, -1 = kegagalan bisnis
data.pageintegerNomor halaman saat ini
data.page_sizeintegerItem per halaman
data.totalintegerTotal jumlah catatan
data.itemsarrayDaftar entri detail penggunaan
data.items[].idintegerID log
data.items[].created_atintegerTimestamp pembuatan
data.items[].typeintegeralways 2 (consume)
data.items[].type_namestringconsume
data.items[].contentstringKonten log
data.items[].token_namestringNama token
data.items[].model_namestringNama model
data.items[].app_namestringNama aplikasi (jika dari aplikasi Apps)
data.items[].usage_namestringNama model yang digunakan, atau nama aplikasi Apps
data.items[].quota_usdnumberPerubahan kuota (⚡);
data.items[].quota_typeintegerTipe perubahan kuota (0 tidak ada, 1 peningkatan, 2 penurunan)

Dokumentasi terkait