seamless.ai.id

Dokumentasi seamless.ai.id

seamless.ai.id adalah satu API kompatibel OpenAI untuk 4 model dari 4 pembuat, dibayar dengan saldo prabayar dalam rupiah. SDK dan alat yang sudah bisa memanggil OpenAI cukup diganti base URL dan API key-nya.

https://api.seamless.ai.id/v1

Mulai dalam empat langkah

  1. Minta API key ke operator (pendaftaran mandiri belum dibuka).
  2. Simpan API key pertama Anda: key hanya ditampilkan sekali.
  3. Isi saldo dengan QRIS dari dashboard, lalu coba model di Playground dashboard tanpa menulis kode.
  4. Ikuti panduan untuk alat Anda: curl, Python (SDK OpenAI), JavaScript / TypeScript (SDK OpenAI), LangChain, n8n.

Model yang tersedia: 3 model chat, 1 model embedding. Harga, konteks, dan kemampuan setiap model ada di daftar model, juga sebagai JSON di /pricing.

Saldo dalam rupiah: isi, tahan, tagih

  1. Isi saldo. Top-up dibayar dengan QRIS dari aplikasi bank atau e-wallet apa pun; saldo bertambah begitu pembayaran diterima dan kuitansi terbit. Jumlah minimum dan maksimum, bonus yang berlaku, dan cara PPN dihitung tampil di dashboard sebelum Anda membayar dan di halaman harga.
  2. Tahan. Sebelum request diteruskan ke provider, gateway menahan batas atas biayanya dari saldo: seluruh body dihitung seolah setiap byte satu token prompt, ditambah max_tokens token jawaban (tanpa max_tokens, batas bawaan model), dengan harga tertinggi yang bisa berlaku selama request berjalan. Kalau saldo yang tersedia tidak cukup, request ditolak sebelum dikirim. Mengisi max_tokens membuat yang ditahan lebih kecil.
  3. Tagih. Setelah jawaban selesai, yang ditagih adalah token yang dilaporkan provider dengan harga provider yang menjawab, dan sisa yang ditahan kembali ke saldo. Tagihan tidak pernah melebihi yang ditahan. Request yang gagal sebelum ada isi jawaban tidak ditagih. Kalau provider tidak melaporkan jumlah token (misalnya stream dihentikan sebelum laporan pemakaian), jumlahnya diperkirakan dari ukuran prompt dan jawaban yang sudah terkirim; untuk penalaran yang tidak terlihat (thinking model Anthropic) yang ditagih adalah seluruh batas jawaban.

Model berharga Gratis tidak memakai saldo. Harga token ditulis per 1 juta token; model pembuat gambar, transkripsi suara, dan teks ke suara dihargai per gambar, per jam audio, atau per 1 juta karakter, dan sebagian model rerank per 1.000 pencarian (lihat di bawah). Saldo, yang sedang ditahan, pemakaian per hari, dan daftar request tampil di dashboard atau lewat GET /v1/balance, /v1/usage, dan /v1/requests. Isi prompt dan jawaban (termasuk audio, transkrip, dan gambar yang dibuat) tidak pernah kami simpan, hanya metadata (model, jumlah token, gambar, detik audio, karakter, atau pencarian, biaya). Pengecualiannya hanya dua: Batch API (file JSONL yang Anda unggah ke /v1/files dan hasil setiap barisnya kami simpan sampai Anda menghapusnya, DELETE /v1/files/{id}, atau masa simpannya habis), dan preset (/v1/presets: prompt sistem dan pengaturan yang Anda simpan sendiri, sampai Anda menghapusnya).

API key dan scope

Setiap key memegang satu atau beberapa scope:

ScopeBoleh memanggil
inferencePOST /v1/chat/completions, POST /v1/responses, POST /v1/embeddings, POST /v1/images/generations, POST /v1/audio/transcriptions, POST /v1/audio/speech, POST /v1/rerank, POST /v1/moderations, Batch API (/v1/files, /v1/batches), GET /v1/models, GET /v1/models/{id}, dan GET /v1/requests/{id} untuk request key itu sendiri
readsaldo, pemakaian, analitik, daftar request, kuitansi, status top-up, kode referral (GET /v1/referral), daftar preset (GET /v1/presets), peringatan belanja (GET /v1/spend-alerts)
adminmembuat, mengubah, dan mencabut key; membuat top-up; mengurus anggota; pengaturan email; membuat dan mengubah preset (bersama read)

Responses API

POST /v1/responses menerima format Responses API OpenAI untuk setiap model chat, jadi SDK dan framework agent yang memanggil responses.create bisa memakai model mana pun di sini. Gateway menerjemahkannya ke chat completions: routing, fallback, harga, saldo yang ditahan, dan tagihannya sama persis dengan request chat yang sama, dan usage di jawaban adalah token yang ditagih.

Penalaran: reasoning_effort

Model dengan badge Reasoning berpikir sebelum menjawab. Seberapa banyak diatur dengan satu field untuk semua provider: reasoning_effort di POST /v1/chat/completions (argumen reasoning_effort di SDK OpenAI) atau reasoning.effort di POST /v1/responses. Nilainya, dari yang paling sedikit berpikir: none, minimal, low, medium, high, xhigh, max. Gateway menerjemahkannya untuk setiap provider (untuk Claude menjadi effort Anthropic).

Saat ini tidak ada model di daftar harga yang menerima reasoning_effort.

Contoh kode akan tampil di panduan begitu ada model yang menerimanya.

Batch API

Pekerjaan besar yang tidak perlu dijawab seketika dikirim sebagai satu file JSONL dan dijalankan gateway dalam 24 jam, dengan bentuk Batch API OpenAI, jadi client.files.create dan client.batches.create SDK OpenAI langsung bekerja. Contoh langkah demi langkah: curl, Python, JavaScript.

Preset

Preset adalah pengaturan bernama milik akun: model (atau sampai tiga model berurutan), prompt sistem, parameter bawaan (temperature, top_p, frequency_penalty, presence_penalty, seed, stop, reasoning_effort), preferensi routing, dan batas jawaban. Contoh: curl, Python, JavaScript.

Batas

Error

Setiap error berformat OpenAI:

{"error": {"message": "…", "type": "invalid_request_error", "param": "model", "code": "model_not_found"}}
StatuscodeArti dan yang perlu dilakukan
401missing_api_key, invalid_api_key, revoked_api_keyheader Authorization: Bearer … kosong, salah, atau key sudah dicabut
403insufficient_scopekey tidak punya scope endpoint itu; pesannya menyebut scope yang kurang
403model_not_allowed_for_key, provider_not_allowed_for_keymodel atau provider di luar batasan key itu; pilih model lain atau minta admin mengubah batasannya. Tidak ditagih
400request_above_key_max_pricebiaya terburuk request di atas harga maksimum per request key itu; kecilkan max_tokens atau prompt. Tidak ditagih
404model_not_foundid model salah ketik atau tidak dijual; ambil id dari daftar model
400invalid_value, invalid_field, unsupported_value, unsupported_parameterfield request yang salah atau fitur yang tidak bisa dilayani model itu; param menunjuk field-nya. Tidak ditagih
400invalid_image, unsupported_contentgambar yang tidak valid, atau gambar/audio/file ke model yang tidak menerimanya
400no_eligible_provider, price_above_maxpreferensi routing tidak menyisakan provider; ditolak sebelum saldo ditahan
400max_price_not_applicable, unsupported_modelmax_price (di request atau di key) dipakai untuk model pembuat gambar atau transkripsi, yang tidak berharga per token: pakai key dan request tanpa max_price; atau model dikirim ke endpoint jenis lain (lihat gambar dan transkripsi)
413request_too_largebody terlalu besar
429rate_limit_exceededtunggu Retry-After
429insufficient_quota, key_spend_limit_reached, member_budget_reachedisi saldo, naikkan batas, atau kecilkan max_tokens; jangan diulang otomatis
502, 503, 504upstream_error, no_provider_available, upstream_timeoutprovider sedang bermasalah; gateway sudah mencoba provider lain model itu kalau ada. Ulangi nanti (Retry-After kalau ada)

Kondisi setiap model sekarang, riwayat 90 hari, dan insiden yang diumumkan ada di halaman status. Setiap jawaban membawa header x-request-id; sebutkan saat menghubungi operator.

Memilih provider dan membatasi harga

Satu model bisa dilayani beberapa provider dengan harga dan kebijakan data masing-masing (tertulis di halaman model). Tanpa pengaturan, gateway memilih sendiri dan pindah ke provider lain kalau satu gagal. Request ditagih dengan harga provider yang menjawab, paling tinggi harga "hingga" model itu. Pengaturannya dikirim di body sebagai gateway.routing (SDK Python dan LangChain: extra_body):

Harga "mulai" di halaman model hanya dijamin dengan only (atau order + fallback: false) ke provider termurah, atau max_price setinggi harga itu. Admin akun bisa memasang pengaturan yang sama sebagai routing default sebuah key; request hanya bisa memperketatnya.

Model cadangan dan model router

Field models (milik gateway, tidak diteruskan ke provider) berisi model cadangan. Gateway mencoba model dulu dengan semua providernya, lalu model berikutnya di models sesuai urutan, paling banyak 3 model (termasuk model, duplikat diabaikan). Pindah ke model berikutnya hanya kalau model sebelumnya tidak bisa melayani request (misalnya tidak menerima gambar, tidak mendukung field yang dikirim, tidak ada provider yang cocok dengan gateway.routing atau max_price) atau semua providernya menolak sebelum menerima request (koneksi gagal, error 5xx atau 429, provider sedang diistirahatkan). Setelah provider mungkin sudah mulai bekerja (waktu habis, koneksi terputus di tengah jawaban) atau request Anda sendiri ditolak (400), gateway tidak pernah pindah ke model lain: provider lain dari model yang sama masih boleh mengambil alih (seperti request satu model), dan kalau semuanya gagal Anda menerima error itu tanpa ditagih. Jawaban yang sudah dibuat provider tetapi tidak bisa dikembalikan (lebih dari 32 MiB, atau tidak terbaca) ditagih perkiraan prompt dan seluruh batas outputnya (paling banyak saldo yang ditahan) dan tidak pernah dibuat ulang; minta lebih sedikit n atau logprobs, atau pakai stream. Stream tidak pernah berganti model setelah potongan pertama terkirim.

curl 'https://api.seamless.ai.id/v1/chat/completions' \
  -H "Authorization: Bearer $SEAMLESS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen/qwen2.5-0.5b-instruct",
    "models": ["meta/llama-3.2-1b-instruct"],
    "messages": [{"role": "user", "content": "Halo!"}]
  }'
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.seamless.ai.id/v1",
    api_key=os.environ["SEAMLESS_API_KEY"],
)

reply = client.chat.completions.create(
    model="qwen/qwen2.5-0.5b-instruct",
    messages=[{"role": "user", "content": "Halo!"}],
    # Model cadangan: field milik gateway, lewat extra_body.
    extra_body={"models": ["meta/llama-3.2-1b-instruct"]},
)
print(reply.model, reply.choices[0].message.content)

Input gambar

Model dengan badge Input gambar menerima bagian image_url di pesan user: data URL base64 (data:image/png;base64,…) atau URL https:// yang diambil penyedia model (gateway tidak pernah membukanya; URL ke alamat IP atau nama internal ditolak). Format JPEG, PNG, GIF, atau WebP, dikenali dari isi byte-nya; detail boleh auto, low, high, atau original. Operator membatasi jumlah dan ukuran gambar per request; yang melanggar dijawab 400 invalid_image dengan param yang menunjuk gambarnya. Saldo yang ditahan menghitung setiap gambar dengan batas token terbanyak per gambar model itu; tagihannya tetap dari token yang dilaporkan penyedia. Contoh kode ada di setiap panduan.

Gambar, transkripsi, teks ke suara, dan rerank

Saat ini tidak ada model pembuat gambar, transkripsi suara, teks ke suara, atau rerank di daftar harga.

Moderation

Saat ini tidak ada model moderation di daftar harga.