Dokumentasi API

Dokumentasi API

Panggil semua fitur AI via kunci API, bayar per pakai, integrasi dalam beberapa baris kode.

Autentikasi

Semua permintaan API harus berisi header Authorization.

Authorization: Bearer sk-xxxxxxxxxxxxxxxx

Dapatkan kunci API di halaman „Kunci API" di konsol. Satu kunci per akun. Reset di konsol; yang lama langsung tidak berlaku.

Buat tugas

POST https://nsfwrouter.xyz/api/v1/tasks/create

Kirim tugas AI ke cluster GPU. Tugas asinkron, mengembalikan ID. Hasil via API atau Webhook.

Parameter permintaan
Parameter Tipe Wajib Deskripsi
tool_idintYaID alat, dari daftar alat
paramsobjectYaParameter tugas, objek JSON, field bergantung pada alat
webhook_urlstringTidakURL callback untuk notifikasi selesai
priorityintTidakPrioritas tugas 1-10, default 5
idempotency_keystringTidakKunci idempotensi, mencegah duplikat
execution_optionsobjectTidakOpsi eksekusi, objek JSON
Contoh permintaan
curl -X POST https://nsfwrouter.xyz/api/v1/tasks/create \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "tool_id": 1,
    "params": {
      "image": "https://example.com/photo.jpg",
      "prompt": "a beautiful landscape"
    },
    "webhook_url": "https://your-server.com/webhook"
  }'
Contoh respons
{
  "code": 0,
  "message": "success",
  "data": {
    "task": {
      "id": 123,
      "status": 0,
      "consume_coins": 5
    },
    "message": "task_submitted"
  }
}

Saldo dicek sebelum panggilan. Tidak cukup = error insufficient_coins. Koin dipotong saat pengiriman berhasil.

Query tugas

GET https://nsfwrouter.xyz/api/v1/tasks/query

Query detail dan status berdasarkan ID. Saat pemrosesan, status diambil dari cluster GPU. Query berulang dalam 10 detik mengembalikan cache DB.

Parameter query
Parameter Tipe Wajib Deskripsi
idintYaID tugas
Contoh respons
{
  "code": 0,
  "message": "success",
  "data": {
    "task": {
      "id": 123,
      "status": 1,
      "task_output_json": [
        {
          "type": "image",
          "url": "https://cdn.example.com/outputs/abc123.png",
          "file_name": "abc123.png",
          "file_size": 1024000,
          "mime_type": "image/png",
          "width": 1024,
          "height": 1024
        }
      ],
      "consume_coins": 5,
      "created_at": 1718200000,
      "completed_at": 1718200015
    }
  }
}
Nilai status tugas
status Arti
0Memproses
1Selesai
-1Dibatalkan
-2Gagal

Daftar tugas

GET https://nsfwrouter.xyz/api/v1/tasks

Query paginasi tugas akun, dengan filter alat, status dan periode.

Parameter query
Parameter Tipe Wajib Deskripsi
pageintTidakNomor halaman, default 1
page_sizeintTidakUkuran halaman, default 20, max 50
tool_idintTidakFilter berdasarkan alat
statusintTidakFilter berdasarkan status (0/1/-1/-2)
daysintTidakPeriode dalam hari, default 30
Contoh respons
{
  "code": 0,
  "message": "success",
  "data": {
    "list": [
      {
        "id": 123,
        "tool_id": 1,
        "status": 1,
        "task_output_json": [
          {
            "type": "image",
            "url": "https://cdn.example.com/outputs/abc123.png",
            "file_name": "abc123.png",
            "file_size": 1024000,
            "mime_type": "image/png",
            "width": 1024,
            "height": 1024
          }
        ],
        "error": null,
        "consume_coins": 5,
        "created_at": 1718200000,
        "completed_at": 1718200015
      },
      {
        "id": 122,
        "tool_id": 3,
        "status": 0,
        "task_output_json": [],
        "error": null,
        "consume_coins": 10,
        "created_at": 1718199000,
        "completed_at": 0
      }
    ],
    "page": 1,
    "page_size": 20
  }
}
Deskripsi field task_output_json
Field Tipe Deskripsi
typestringTipe hasil: image atau video
urlstringURL CDN untuk file hasil
file_namestringNama file
file_sizeintUkuran file (byte)
mime_typestringTipe MIME, mis. image/png, video/mp4
widthintLebar (piksel)
heightintTinggi (piksel)

Saldo akun

GET https://nsfwrouter.xyz/api/v1/account/balance

Cek saldo koin, total top up dan total konsumsi.

Contoh respons
{
  "code": 0,
  "message": "success",
  "data": {
    "remain_coins": 5000,
    "total_coins": 10000,
    "used_coins": 5000
  }
}

Webhook callback

Jika webhook_url ditentukan, POST dikirim saat selesai, gagal atau dibatalkan. Body JSON.

Header permintaan callback
Content-Type: application/json
Accept: application/json
User-Agent: OpenAPI-Webhook/1.0
Body permintaan callback
{
  "event": "task.finished",
  "task": {
    "id": 123,
    "status": 1,
    "task_output_json": [
      {
        "type": "image",
        "url": "https://cdn.example.com/outputs/abc123.png",
        "file_name": "abc123.png",
        "file_size": 1024000,
        "mime_type": "image/png",
        "width": 1024,
        "height": 1024
      }
    ],
    "consume_coins": 5,
    "created_at": 1718200000,
    "completed_at": 1718200015
  }
}

Server Anda harus mengembalikan HTTP 2xx. Pada non-2xx atau timeout (10 det), sistem mencoba ulang hingga 5x dengan backoff eksponensial.

Kode error

Semua respons error menggunakan format: {"code": kode, "message": "identifier", "data": {}}

Kode error message Deskripsi
20001api_key_requiredKunci API tidak diberikan
20001invalid_api_keyKunci API tidak valid
20001ip_not_allowedIP tidak di whitelist
20001permission_deniedAkses ditolak
30001tool_not_foundAlat tidak ditemukan
30001task_not_foundTugas tidak ditemukan
30001insufficient_coinsSaldo koin tidak cukup
30001task_submit_failedPengiriman tugas gagal
30001task_query_failedQuery tugas gagal
30001task_already_existsTugas sudah ada (idempotensi)
40001tool_id_requiredParameter tool_id hilang
40001param_errorError parameter
40001webhook_url_invalidFormat webhook_url tidak valid
40001params_must_be_json_object_or_arrayparams harus objek atau array JSON
40001execution_options_must_be_json_object_or_arrayexecution_options harus objek atau array JSON
Rentang kode error
Rentang Kategori
1xxxxError sistem
2xxxxError autentikasi
3xxxxError logika bisnis
4xxxxError parameter
5xxxxError dependensi eksternal