Open API

Sambungkan pengecekan kepatuhan ke sistem Anda

Open API situs Indonesia membuka pengecekan kepatuhan teks / video / gambar untuk platform lokal, beserta kamus kata terlarang kustom, penulisan ulang AI, dan pengecekan massal paket materi, lewat satu set REST API. Mesin pengecekan dan akun kreditnya sama dengan versi web — hasil yang Anda lihat di web persis sama dengan yang dikembalikan API.

Base URLhttps://www.byerisk.com/api/v1/intl/idBuat API KeySpesifikasi OpenAPI (JSON) →

Mulai cepat

Tiga langkah. Seluruh pengecekan memakai satu pola: kirim untuk mendapat id, lalu polling hasilnya.

1

Buat API Key

Buat di halaman «Akses API» pada dashboard. Key berformat brsk_live_… dan hanya ditampilkan sekali saat dibuat — segera simpan ke pengelola kredensial Anda.

2

Sertakan header autentikasi

Tambahkan Authorization: Bearer brsk_live_… pada setiap permintaan. Perhatikan bahwa ini berbeda dari token sesi login web dan tidak bisa saling menggantikan.

3

Kirim pengecekan, lalu polling hasilnya

Pengiriman langsung mengembalikan id dan pengecekan berjalan di belakang layar. Polling endpoint GET sampai status menjadi completed. Teks biasanya 3–15 detik, video kira-kira setengah durasi videonya.

Kirim satu pengecekan teks

bash
curl -X POST https://www.byerisk.com/api/v1/intl/id/text/checks \
  -H "Authorization: Bearer $BYERISK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Serum ini 100% ampuh memutihkan wajah dalam 3 hari, garansi uang kembali!",
    "platform": "tiktok_id",
    "vertical": "beauty",
    "explainLocale": "id-ID"
  }'

# → {"success":true,"data":{"id":"cm5abc…","status":"processing"}}

Polling untuk mengambil hasil

bash
curl https://www.byerisk.com/api/v1/intl/id/text/checks/cm5abc… \
  -H "Authorization: Bearer $BYERISK_API_KEY"

# status = completed:
# {
#   "success": true,
#   "data": {
#     "status": "completed",
#     "riskLevel": "high",
#     "summary": { "violation": 6, "sceneHint": 0, "custom": 0 },
#     "risks": [
#       {
#         "kind": "violation",
#         "severity": "high",
#         "matchedText": "ampuh",
#         "startIndex": 15,
#         "endIndex": 20,
#         "category": "Klaim khasiat berlebihan",
#         "legalRef": "Peraturan BPOM No. 3 Tahun 2022"
#       }
#     ]
#   }
# }

Format respons memakai amplop seragam. Sukses berupa { "success": true, "data": … }, gagal berupa { "success": false, "error": "…" }. Tabel field «Respons» pada dokumentasi endpoint di bawah menjelaskan isi dari data.

Situs dan Key

Ini hal terpenting yang perlu diketahui sebelum integrasi: satu API Key hanya milik satu situs. Key yang dibuat di konsol situs Indonesia hanya bisa memanggil endpoint di bawah /v1/intl/id/. Memakainya untuk memanggil /v1/ milik situs Mandarin akan mengembalikan 401, begitu pula sebaliknya.

Mengapa Key terikat pada satu situs. Keduanya bukan produk yang sama: rute, enum platform, kamus aturan, tingkat keanggotaan, dan akun kredit semuanya terpisah. Satu Key yang bisa memanggil semuanya berarti «kredit siapa yang dipotong dan aturan mana yang dipakai» harus ditebak dari isi permintaan, dan kedua tebakan yang salah sama-sama tidak menghasilkan error — mengecek teks berbahasa Indonesia dengan kumpulan aturan Mandarin hasilnya nyaris selalu lolos, atau kredit terpotong dari akun situs lain. Pengikatan situs menahan kedua kasus itu sejak langkah pertama.

DimensiDiisolasi per situs?Keterangan
API KeyYaDibuat terpisah di tiap situs; panggilan lintas situs mengembalikan 401
Saldo kredit, tingkat langgananYaSaldo situs Mandarin tidak bisa dipakai di sini, dan keanggotaan tidak membuka akses lintas situs
Riwayat pengecekan, kamus kata kustomYaKata yang sama disimpan terpisah di tiap situs dan tidak saling memicu
Kuota jumlah kata, sakelar utama kamusTidakHak tingkat akun, dibagi lintas situs
Akun itu sendiri (nomor HP, sesi login)TidakSatu akun ByeRisk yang sama bisa berbisnis di beberapa situs sekaligus

Kesimpulan risiko

Ini bagian yang paling sering salah diintegrasikan: riskLevel pada pengecekan teks dan pada gambar / video bukan enum yang sama. Keduanya berasal dari jalur penilaian yang berbeda dan tidak punya rumus konversi — tanganilah per endpoint, jangan menulis satu enum riskLevel yang menyatukan keduanya.

EndpointNilai riskLevelArti
Pengecekan tekssafe / low / medium / highDiambil dari severity tertinggi di antara pelanggaran yang cocok
Pengecekan gambar dan videoPASS / REVIEW / REJECTSaran penanganan dari peninjauan konten

Dua dimensi pada tiap risiko

kind

Jenis risiko

violation adalah pelanggaran keras regulasi / platform yang wajib diperbaiki; scene-hint adalah catatan batasan skenario. Hanya violation yang dihitung ke riskLevel.

severity

Tingkat keparahan

Tiga tingkat: high / medium / low. riskLevel tingkat atas mengambil yang tertinggi di antara seluruh violation.

customRisks

Kecocokan kata kustom

Kata yang Anda atur sendiri, dikelompokkan terpisah dan tidak dihitung ke riskLevel. Itu preferensi, bukan penilaian kepatuhan.

Mengapa kata kustom dipisahkan. Nama kompetitor atau istilah yang dilarang secara internal adalah preferensi bisnis Anda. Mencampurnya dengan «melanggar regulasi setempat» dalam satu daftar membuat sistem hilir Anda tidak bisa membedakan «wajib diblokir» dari «sekadar diingatkan». Karena itu keduanya dikembalikan terpisah di customRisks, dan yang sudah diberi kata pengganti akan membawa replacement untuk penggantian presisi.

Rujukan pasal tidak ikut diterjemahkan. Penjelasan risiko dan saran perbaikan mengikuti explainLocale (bahasa Mandarin atau Indonesia), tetapi nomor dan sumber pasal di legalRef selalu dipertahankan apa adanya — rujukan harus dapat diverifikasi.

Cakupan pengecekan

Ketiga dimensi memiliki jalur penilaiannya masing-masing. Berbeda dari situs Mandarin, di sini tidak disediakan parameter untuk memangkas dimensi pengecekan — dimensi untuk gambar dan audio terikat pada konfigurasi kebijakan di sisi akun, sehingga mengirim parameter dimensi tidak akan mengubah kebijakan yang benar-benar dijalankan; itu hanya sakelar semu.

DimensiCakupanKeterangan
TeksKamus aturan platform + peninjauan semantikRegulasi setempat dan aturan platform; peninjauan semantik menangani risiko lintas kalimat dan menyaring positif palsu
GambarRisiko visual + pengenalan tulisan pada gambarPenilaian visual tidak bergantung pada bahasa konten
VideoGambar + audio + naskah lisanNaskah lisan ditranskripsi lalu diproses mesin yang sama dengan pengecekan teks

Pengecekan gambar tidak menilai kepatuhan komersial. Yang dinilai adalah risiko pada visualnya sendiri, bukan verifikasi klaim khasiat atau tanda sertifikasi yang menuntut pemahaman atas tulisan di dalam gambar. Untuk risiko semacam itu, kirimkan teksnya secara terpisah ke pengecekan teks — kami lebih memilih menyatakan batasnya di dokumentasi daripada membuat Anda mengira lolosnya pengecekan gambar berarti seluruh materi sudah patuh.

Syarat berhenti polling video ada dua. status sudah final, dan transcriptStatus bukan lagi processing. Transkripsi lisan biasanya selesai lebih lambat daripada peninjauan gambar; hanya melihat status akan membuat Anda tidak pernah mendapat transcriptRisks.

Integrasi multi-tenant

Bila Anda mengintegrasikan pengecekan kepatuhan ke sistem Anda lalu menyediakannya untuk beberapa pelanggan Anda sendiri, tambahkan header X-End-Tenant berisi nomor tenant di sistem Anda, dan kami akan membuka satu domain terisolasi untuk tiap nomor tenant. Anda tidak perlu mengajukan API Key terpisah untuk tiap pelanggan.

bash
curl -X POST https://www.byerisk.com/api/v1/intl/id/text/checks \
  -H "Authorization: Bearer $BYERISK_API_KEY" \
  -H "X-End-Tenant: toko-4271" \
  -H "Content-Type: application/json" \
  -d '{ "text": "…", "platform": "tiktok_id", "vertical": "general" }'
DimensiKepemilikanKeterangan
Kamus kata terlarang kustomMasing-masing tenant satuKata milik tenant A tidak akan memicu pengecekan tenant B
Riwayat pengecekan, direktori unggah materiMasing-masing tenant satuEndpoint daftar hanya mengembalikan data X-End-Tenant saat ini, tidak saling terlihat
Saldo kredit, tingkat langgananAkun utama AndaDipotong dari kolam kredit Anda; tidak perlu mengisi saldo untuk tiap tenant
Kuota panggilanPer API KeySeluruh tenant berbagi kuota satu Key; buat beberapa Key bila butuh konkurensi lebih tinggi

Kirimkan identitas tenant yang stabil. Nomor tenant dibuat otomatis saat pertama kali muncul, tidak perlu didaftarkan lebih dulu, dengan nilai 1–64 karakter huruf, angka, _ . : -. Namun bila yang dikirim adalah nilai yang berubah tiap permintaan (misalnya keliru mengirim id permintaan), batas jumlah domain untuk satu Key akan cepat habis dan mulai menghasilkan error. Bila header ini tidak dikirim, seluruh data berada dalam satu domain milik Anda sendiri, persis seperti saat fitur ini tidak dipakai.

Biaya dan pembatasan laju

API dan versi web memakai kolam kredit yang sama untuk situs ini, dengan tarif yang sama. Sebelum integrasi, Anda bisa memanggil GET /v1/intl/id/account untuk mengecek saldo dan pemakaian bulan ini.

TindakanBiaya
Pengecekan teksSesuai tarif paket, per panggilan
Penulisan ulang AISesuai tarif paket, per panggilan
Pengecekan video1 kredit / detik
Pengecekan gambar2 kredit / gambar
Pengecekan massal paket materiDihitung per sub-item sesuai tarifnya
Pengelolaan kata kustom, kueri akun, kredensial unggahGratis

Pembatasan laju dihitung per API Key: kelompok pengiriman 60 kali/menit, kelompok kueri 600 kali/menit, kelompok konfigurasi 120 kali/menit. Tiap kelompok dihitung terpisah, setiap respons membawa X-RateLimit-Remaining, dan melewati batas mengembalikan 429 beserta Retry-After.

Dua ambang langganan. Membuat API Key maupun pengecekan massal paket materi sama-sama memerlukan paket Flagship atau lebih tinggi di situs ini. Keanggotaan diisolasi per situs — langganan di situs Mandarin tidak membuka akses di sini. Key yang sudah pernah dibuat tidak terpengaruh oleh perubahan ambang ini dan tetap bisa dipakai.

Kode error

KodeArtiCara menangani
400Parameter tidak validPerbaiki parameter sesuai pesan error
401Key tidak valid / dicabut / kedaluwarsa, atau bukan milik situs yang Anda panggilPeriksa dulu apakah pesannya menyebut situs tidak cocok, baru pertimbangkan mengganti Key
402Kredit tidak mencukupiIsi ulang lalu coba lagi
403Fitur memerlukan tingkat langganan lebih tinggiNaikkan langganan di situs ini
404Data tidak ada, bukan milik akun Anda, atau milik situs lainPeriksa id dan segmen situs
429Terkena pembatasan lajuMundur dan coba lagi sesuai Retry-After
500Kesalahan sisi serverDapat dicoba ulang; hubungi kami bila terus gagal

Untuk AI Agent

Salah satu tujuan desain API ini adalah agar AI agent bisa membacanya sendiri dan memanggilnya — spesifikasinya mengikuti standar OpenAPI 3.0, dengan parameter masuk, keluaran, nilai enum, dan makna error tertulis di dalamnya, tanpa perlu dokumen adaptasi tambahan.

Berikan alamat spesifikasi kepada agent Anda (Claude, GPT, Coze, Dify, dan lainnya mendukung impor tool dari OpenAPI), pasangkan dengan satu API Key, dan agent dapat menjalankan siklus «cek → baca risiko → perbaiki teks → cek ulang» secara mandiri:

Prompt
Baca spesifikasi OpenAPI di https://www.byerisk.com/api/v1/intl/id/openapi.json?lang=id-ID,
lalu gunakan API Key saya untuk memanggil ByeRisk situs Indonesia.
Cek apakah teks jualan berbahasa Indonesia berikut sudah patuh,
uraikan satu per satu risiko yang wajib diperbaiki, dan berikan saran penulisan ulangnya.

Alamat spesifikasi membawa parameter lang yang mengikuti bahasa antarmuka Anda saat ini — versi mana yang Anda berikan kepada agent, itulah bahasa penjelasan yang dibacanya. Spesifikasi terbuka untuk umum tanpa autentikasi.

https://www.byerisk.com/api/v1/intl/id/openapi.json?lang=id-ID

Pengecekan Teks

POST/v1/intl/id/text/checks

Kirim pengecekan teks

Kirim satu teks untuk dicek kepatuhannya. Langsung mengembalikan id, pengecekan berjalan asinkron di belakang layar.

Setelah mendapat id, polling GET {id} sampai status menjadi completed atau failed (biasanya 3–15 detik).

Yang dicek adalah konten dalam bahasa setempat; bahasa penjelasan risiko ditentukan oleh explainLocale — keduanya tidak saling memengaruhi.

Kredit dipotong saat pengiriman; jika gagal masuk antrean, kredit dikembalikan penuh secara otomatis.

Body permintaan

FieldTipeKeterangan
textWajib字符串Teks yang akan dicek, 10–5000 karakter. Yang dicek adalah konten berbahasa Indonesia itu sendiri, terpisah dari bahasa penjelasan di bawah.(长度 10–5000)
platformWajib枚举Platform tempat konten akan diterbitkan; menentukan kumpulan aturan platform mana yang dipakai.Nilai yang tersedia: tiktok_idTikTok Indonesiashopee_idShopee IndonesiatokopediaTokopedia
verticalWajib枚举Industri konten. Menyebut industri spesifik = kumpulan aturan umum + kumpulan aturan khusus industri tersebut; general = hanya kumpulan umum.Nilai yang tersedia: generalUmumbeautyKecantikan & perawatanhealthSuplemen kesehatanfoodMakanan & minumanfashionFesyen
explainLocale枚举Bahasa untuk penjelasan risiko dan saran perbaikan. Ortogonal terhadap bahasa konten yang dicek — yang dicek selalu teks berbahasa Indonesia, parameter ini hanya menentukan bahasa yang kami pakai untuk menjelaskan hasilnya kepada Anda. Bila tidak diisi, digunakan zh-CN.Nilai yang tersedia: zh-CNBahasa Mandarinid-IDBahasa IndonesiaDefault zh-CN

Respons201

FieldTipeKeterangan
id字符串Id pengecekan ini, dipakai untuk polling hasil.
object字符串Tipe objek.
status字符串Status saat ini. Tepat setelah dikirim nilainya processing.
Kemungkinan error
402Kredit tidak mencukupi

Contoh

bash
curl -X POST https://www.byerisk.com/api/v1/intl/id/text/checks \
  -H "Authorization: Bearer $BYERISK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Serum ini 100% ampuh memutihkan wajah dalam 3 hari, sudah bersertifikat BPOM, garansi uang kembali!",
    "platform": "tiktok_id",
    "vertical": "beauty",
    "explainLocale": "zh-CN"
  }'
json — respons
{
  "success": true,
  "data": {
    "id": "cms8xhc5x0006sp59vrks7zkf",
    "object": "intl_text_check",
    "status": "processing"
  }
}
GET/v1/intl/id/text/checks

Riwayat pengecekan teks

Dikembalikan berurutan dari yang terbaru, hanya berisi ringkasan (teks dipotong sampai 100 karakter). Hanya menampilkan data situs ini.

Parameter kueri

FieldTipeKeterangan
pagestringNomor halaman, mulai dari 1.Default 1
pageSizestringJumlah data per halaman, maksimum 50.Default 20

Respons200

FieldTipeKeterangan
object字符串Tipe objek, selalu list.
page数字Halaman saat ini.
pageSize数字Jumlah data per halaman.
total数字Total data yang cocok.
hasMore布尔Apakah masih ada halaman berikutnya.
data数组<对象>Data pada halaman ini.
id字符串Id pengecekan.
object字符串Tipe objek.
status字符串Status.
platform字符串Platform penerbitan.
vertical对象Industri konten.
preview字符串Ringkasan teks (dipotong sampai 100 karakter). Untuk teks lengkap, panggil endpoint detail.
riskLevel枚举Kesimpulan tingkat atas.Nilai yang tersedia: safelowmediumhigh
riskCount数字Jumlah risiko.
fixStatus对象Status penulisan ulang AI.
createdAt对象Waktu dibuat.

Contoh

bash
curl "https://www.byerisk.com/api/v1/intl/id/text/checks" \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "object": "list",
    "page": 1,
    "pageSize": 20,
    "total": 128,
    "hasMore": true,
    "data": [
      {
        "id": "string",
        "object": "intl_text_check",
        "status": "string",
        "platform": "string",
        "vertical": null,
        "preview": "string",
        "riskLevel": "safe",
        "riskCount": 0,
        "fixStatus": null,
        "createdAt": null
      }
    ]
  }
}
GET/v1/intl/id/text/checks/{id}

Ambil hasil pengecekan teks

Saat status masih processing, pengecekan belum selesai — coba lagi nanti; hasil final baru ada di risks ketika completed.

Risiko dipisah menjadi dua lapis yang tidak boleh dicampur:

- risks — risiko kepatuhan. kind=violation adalah pelanggaran keras, kind=scene-hint adalah catatan batasan skenario.

- customRisks — kata terlarang yang Anda atur sendiri, tidak dihitung ke riskLevel; jika Anda mengisi kata pengganti, akan disertakan replacement.

Parameter jalur

FieldTipeKeterangan
idWajibstring

Respons200

FieldTipeKeterangan
id字符串Id pengecekan.
object字符串Tipe objek.
status枚举processing berarti pengecekan masih berjalan, coba lagi nanti; hasil final baru ada di risks ketika completed.Nilai yang tersedia: processingSedang diprosescompletedSelesaifailedGagal
platform枚举Platform penerbitan.Nilai yang tersedia: tiktok_idTikTok Indonesiashopee_idShopee IndonesiatokopediaTokopedia
vertical枚举Industri konten.Nilai yang tersedia: generalUmumbeautyKecantikan & perawatanhealthSuplemen kesehatanfoodMakanan & minumanfashionFesyen
text字符串Teks asli yang dicek.
riskLevel枚举Kesimpulan tingkat atas, diambil dari severity tertinggi di antara risiko violation. ⚠️ Bukan kumpulan nilai yang sama dengan PASS / REVIEW / REJECT pada pengecekan gambar / video.Nilai yang tersedia: safelowmediumhigh
summary对象Hitungan tiap kategori.
violation数字Jumlah pelanggaran keras terhadap regulasi / aturan platform.
sceneHint数字Jumlah catatan batasan skenario.
custom数字Jumlah kecocokan kamus kata kustom. Tidak dihitung ke riskLevel.
semantic数字Jumlah label risiko semantik (peringatan menyeluruh yang tidak bisa dilokalisasi ke posisi tertentu).
risks数组<对象>Risiko kepatuhan satu per satu.
id对象Id risiko.
kind枚举Jenis risiko: violation pelanggaran keras regulasi / platform (wajib diperbaiki); scene-hint catatan batasan skenario.Nilai yang tersedia: violationPelanggaran kerasscene-hintCatatan batasan skenario
severity枚举Tingkat keparahan. riskLevel tingkat atas mengambil yang tertinggi di antara seluruh violation.Nilai yang tersedia: highTinggimediumSedanglowRendah
matchedText字符串Potongan teks asli yang cocok.
startIndex数字Indeks awal potongan yang cocok pada teks asli. **Bernilai -1 bila kecocokan semantik tidak bisa dilokalisasi** (bukan null) — dalam kasus ini cari sendiri matchedText di teks asli, atau tampilkan saja sebagai peringatan menyeluruh.
endIndex数字Indeks akhir potongan yang cocok; juga bisa bernilai -1.
category对象Kategori risiko, sudah dilokalkan sesuai explainLocale.
suggestion对象Saran perbaikan, sudah dilokalkan sesuai explainLocale.
legalRef对象Rujukan pasal regulasi / aturan platform. Tidak ikut diterjemahkan oleh explainLocale — nomor dan sumber pasal harus dapat diverifikasi.
source枚举Sumber penilaian: rule kecocokan aturan deterministik; model penilaian model; custom kata kustom.Nilai yang tersedia: rulemodelcustom
customRisks数组<对象>Kecocokan kamus kata kustom. Terpisah dari risks dan tidak dihitung ke riskLevel — ini preferensi Anda sendiri, bukan penilaian kepatuhan.
matchedText字符串Potongan teks asli yang cocok.
startIndex数字Indeks awal (bisa bernilai -1).
endIndex数字Indeks akhir (bisa bernilai -1).
replacement对象Kata pengganti yang Anda atur untuk kata ini. Kosong berarti hanya mengingatkan, tanpa saran pengganti.
note对象Catatan yang Anda tulis untuk kata ini.
semanticLabels数组<字符串>Peringatan menyeluruh: model menilai ada risiko tetapi tidak dapat menunjuk potongan teks tertentu.
fixStatus对象Status penulisan ulang AI: null belum dipicu | processing sedang berjalan | completed selesai | failed gagal.
fixedText对象Teks lengkap hasil penulisan ulang AI, terisi setelah penulisan ulang selesai.
createdAt对象Waktu dibuat (ISO 8601).
updatedAt对象Waktu pembaruan terakhir (ISO 8601).
Kemungkinan error
404Data tidak ditemukan, bukan milik akun Anda, atau milik situs lain

Contoh

bash
curl "https://www.byerisk.com/api/v1/intl/id/text/checks/{id}" \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_text_check",
    "status": "processing",
    "platform": "tiktok_id",
    "vertical": "general",
    "text": "string",
    "riskLevel": "safe",
    "summary": {
      "violation": 3,
      "sceneHint": 1,
      "custom": 0,
      "semantic": 2
    },
    "risks": [
      {
        "id": null,
        "kind": "violation",
        "severity": "high",
        "matchedText": "garansi uang kembali",
        "startIndex": 42,
        "endIndex": 62,
        "category": null,
        "suggestion": null,
        "legalRef": "UU No. 8 Tahun 1999 Pasal 9",
        "source": "rule"
      }
    ],
    "customRisks": [
      {
        "matchedText": "string",
        "startIndex": 0,
        "endIndex": 0,
        "replacement": null,
        "note": null
      }
    ],
    "semanticLabels": [
      "string"
    ],
    "fixStatus": null,
    "fixedText": null,
    "createdAt": null,
    "updatedAt": null
  }
}
DELETE/v1/intl/id/text/checks/{id}

Hapus data pengecekan teks

Tidak dapat dipulihkan.

Parameter jalur

FieldTipeKeterangan
idWajibstring

Respons200

FieldTipeKeterangan
id字符串Id data yang dihapus.
object字符串Tipe objek.
deleted布尔Selalu true.
Kemungkinan error
404Data tidak ditemukan atau milik situs lain

Contoh

bash
curl -X DELETE https://www.byerisk.com/api/v1/intl/id/text/checks/{id} \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_text_check",
    "deleted": true
  }
}
POST/v1/intl/id/text/checks/{id}/fix

Picu penulisan ulang AI

Memicu penulisan ulang oleh AI untuk pengecekan yang sudah selesai. Langsung kembali, penulisan ulang berjalan di belakang layar.

Polling GET {id}; hasilnya ada di fixedText setelah selesai (fixStatus menjadi completed).

Kredit penulisan ulang dipotong terpisah dan dikembalikan otomatis bila gagal.

Parameter jalur

FieldTipeKeterangan
idWajibstring

Respons201

FieldTipeKeterangan
id字符串Id pengecekan.
object字符串Tipe objek.
fixStatus字符串Status penulisan ulang, bernilai processing setelah diterima.
creditCost数字Kredit yang dipakai penulisan ulang ini.
Kemungkinan error
400Data ini tidak perlu ditulis ulang (tidak ada pelanggaran), atau sudah ada penulisan ulang yang sedang berjalan
402Kredit tidak mencukupi
404Data tidak ditemukan atau milik situs lain

Contoh

bash
curl -X POST https://www.byerisk.com/api/v1/intl/id/text/checks/{id}/fix \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_text_check",
    "fixStatus": "processing",
    "creditCost": 2
  }
}

Pengecekan Gambar

POST/v1/intl/id/image/checks

Kirim pengecekan gambar

Kirim URL gambar yang dapat diakses publik untuk dicek kepatuhannya.

Pengecekan gambar bersifat sinkron: saat endpoint ini merespons, hasilnya sudah siap dan body respons adalah hasil lengkapnya —

tidak perlu polling. (GET {id} tetap tersedia untuk penelusuran ulang.)

**Selalu periksa status**: normalnya completed; bila mesin pengecekan bermasalah nilainya failed (kredit sudah dikembalikan otomatis,

labels kosong). Kasus ini tetap mengembalikan 201, bukan 5xx — datanya sendiri berhasil dibuat.

Biaya: 2 kredit per gambar.

Body permintaan

FieldTipeKeterangan
imageUrlWajib字符串URL gambar, wajib dapat diakses publik (layanan pengecekan kami harus bisa mengunduhnya langsung). Bila Anda belum punya penyimpanan objek sendiri, panggil dulu POST /v1/intl/{country}/uploads/policy untuk mengambil kredensial unggah langsung.
imageTitleWajib字符串Judul / nama berkas gambar, untuk mengenalinya kembali di riwayat.
imageSizeWajib数字Ukuran gambar (byte).(最小 1)
imageWidth数字Lebar gambar (piksel).
imageHeight数字Tinggi gambar (piksel).
vertical枚举Deklarasi industri konten. Tidak memengaruhi penilaian gambar kali ini (kebijakan penilaian gambar terikat pada konfigurasi sisi akun, lepas dari industri), hanya dipakai untuk pencatatan dan tampilan riwayat. Isi apa adanya, boleh dikosongkan.Nilai yang tersedia: generalUmumbeautyKecantikan & perawatanhealthSuplemen kesehatanfoodMakanan & minumanfashionFesyen
explainLocale枚举Bahasa untuk label risiko. Sama seperti pengecekan teks, terpisah dari bahasa tulisan di dalam gambar.Nilai yang tersedia: zh-CNBahasa Mandarinid-IDBahasa IndonesiaDefault zh-CN

Respons201

FieldTipeKeterangan
id字符串Id pengecekan.
object字符串Tipe objek.
status枚举Wajib diperiksa: bernilai failed bila mesin pengecekan bermasalah (kredit sudah dikembalikan otomatis, labels kosong); kasus ini tetap mengembalikan 201.Nilai yang tersedia: processingSedang diprosescompletedSelesaifailedGagal
image对象Informasi gambar.
url字符串URL gambar (yang Anda kirim).
title字符串Judul / nama berkas gambar.
sizeBytes对象Ukuran (byte).
width对象Lebar (piksel).
height对象Tinggi (piksel).
vertical枚举Industri yang dideklarasikan saat pengiriman. Hanya pencatatan, tidak memengaruhi penilaian gambar.Nilai yang tersedia: generalUmumbeautyKecantikan & perawatanhealthSuplemen kesehatanfoodMakanan & minumanfashionFesyen
riskLevel枚举Kesimpulan tingkat atas. ⚠️ Bukan kumpulan nilai yang sama dengan safe/low/medium/high pada pengecekan teks.Nilai yang tersedia: PASSREVIEWREJECT
labels数组<对象>Label risiko yang cocok. Array kosong bila tidak ada risiko.
description字符串Label risiko, sudah dilokalkan sesuai explainLocale.
riskLevel枚举Tingkat untuk label ini sendiri. Data lama tidak memiliki tingkat per label, sehingga bernilai null (kami tidak mengarang nilainya).Nilai yang tersedia: PASSREVIEWREJECT
createdAt对象Waktu dibuat.
updatedAt对象Waktu pembaruan terakhir.
Kemungkinan error
400Parameter tidak valid
402Kredit tidak mencukupi

Contoh

bash
curl -X POST https://www.byerisk.com/api/v1/intl/id/image/checks \
  -H "Authorization: Bearer $BYERISK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://cdn.example.com/products/serum-01.jpg",
    "imageTitle": "serum-01.jpg",
    "imageSize": 254112,
    "imageWidth": 1080,
    "imageHeight": 1080,
    "vertical": "general",
    "explainLocale": "zh-CN"
  }'
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_image_check",
    "status": "processing",
    "image": {
      "url": "string",
      "title": "string",
      "sizeBytes": null,
      "width": null,
      "height": null
    },
    "vertical": "general",
    "riskLevel": "PASS",
    "labels": [
      {
        "description": "色情低俗",
        "riskLevel": "PASS"
      }
    ],
    "createdAt": null,
    "updatedAt": null
  }
}
GET/v1/intl/id/image/checks

Riwayat pengecekan gambar

Dikembalikan berurutan dari yang terbaru, hanya berisi ringkasan.

Parameter kueri

FieldTipeKeterangan
pagestringNomor halaman, mulai dari 1.Default 1
pageSizestringJumlah data per halaman, maksimum 50.Default 20

Respons200

FieldTipeKeterangan
object字符串Tipe objek, selalu list.
page数字Halaman saat ini.
pageSize数字Jumlah data per halaman.
total数字Total data yang cocok.
hasMore布尔Apakah masih ada halaman berikutnya.
data数组<对象>Data pada halaman ini.
id字符串Id pengecekan.
object字符串Tipe objek.
status字符串Status.
image对象URL dan judul gambar.
vertical对象Deklarasi industri.
riskLevel枚举Kesimpulan tingkat atas.Nilai yang tersedia: PASSREVIEWREJECT
labels数组<字符串>Teks label risiko (daftar tidak memuat tingkat per label).
createdAt对象Waktu dibuat.

Contoh

bash
curl "https://www.byerisk.com/api/v1/intl/id/image/checks" \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "object": "list",
    "page": 1,
    "pageSize": 20,
    "total": 128,
    "hasMore": true,
    "data": [
      {
        "id": "string",
        "object": "intl_image_check",
        "status": "string",
        "image": null,
        "vertical": null,
        "riskLevel": "PASS",
        "labels": [
          "string"
        ],
        "createdAt": null
      }
    ]
  }
}
GET/v1/intl/id/image/checks/{id}

Ambil hasil pengecekan gambar

Menelusuri kembali pengecekan gambar yang sudah dikirim.

Parameter jalur

FieldTipeKeterangan
idWajibstring

Respons200

FieldTipeKeterangan
id字符串Id pengecekan.
object字符串Tipe objek.
status枚举Wajib diperiksa: bernilai failed bila mesin pengecekan bermasalah (kredit sudah dikembalikan otomatis, labels kosong); kasus ini tetap mengembalikan 201.Nilai yang tersedia: processingSedang diprosescompletedSelesaifailedGagal
image对象Informasi gambar.
url字符串URL gambar (yang Anda kirim).
title字符串Judul / nama berkas gambar.
sizeBytes对象Ukuran (byte).
width对象Lebar (piksel).
height对象Tinggi (piksel).
vertical枚举Industri yang dideklarasikan saat pengiriman. Hanya pencatatan, tidak memengaruhi penilaian gambar.Nilai yang tersedia: generalUmumbeautyKecantikan & perawatanhealthSuplemen kesehatanfoodMakanan & minumanfashionFesyen
riskLevel枚举Kesimpulan tingkat atas. ⚠️ Bukan kumpulan nilai yang sama dengan safe/low/medium/high pada pengecekan teks.Nilai yang tersedia: PASSREVIEWREJECT
labels数组<对象>Label risiko yang cocok. Array kosong bila tidak ada risiko.
description字符串Label risiko, sudah dilokalkan sesuai explainLocale.
riskLevel枚举Tingkat untuk label ini sendiri. Data lama tidak memiliki tingkat per label, sehingga bernilai null (kami tidak mengarang nilainya).Nilai yang tersedia: PASSREVIEWREJECT
createdAt对象Waktu dibuat.
updatedAt对象Waktu pembaruan terakhir.
Kemungkinan error
404Data tidak ditemukan atau milik situs lain

Contoh

bash
curl "https://www.byerisk.com/api/v1/intl/id/image/checks/{id}" \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_image_check",
    "status": "processing",
    "image": {
      "url": "string",
      "title": "string",
      "sizeBytes": null,
      "width": null,
      "height": null
    },
    "vertical": "general",
    "riskLevel": "PASS",
    "labels": [
      {
        "description": "色情低俗",
        "riskLevel": "PASS"
      }
    ],
    "createdAt": null,
    "updatedAt": null
  }
}
DELETE/v1/intl/id/image/checks/{id}

Hapus data pengecekan gambar

Penghapusan lunak, sekaligus membersihkan berkas gambar yang telah diunggah secara asinkron.

Parameter jalur

FieldTipeKeterangan
idWajibstring

Respons200

FieldTipeKeterangan
id字符串Id data yang dihapus.
object字符串Tipe objek.
deleted布尔Selalu true.
Kemungkinan error
404Data tidak ditemukan atau milik situs lain

Contoh

bash
curl -X DELETE https://www.byerisk.com/api/v1/intl/id/image/checks/{id} \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_text_check",
    "deleted": true
  }
}

Pengecekan Video

POST/v1/intl/id/video/checks

Kirim pengecekan video

Kirim URL video yang dapat diakses publik untuk dicek kepatuhannya. Langsung mengembalikan id, pengecekan berjalan asinkron.

Polling GET {id}; durasi pengecekan kira-kira setengah durasi video (minimal 30 detik), disarankan polling setiap 5–10 detik.

Pengecekan mencakup tiga dimensi: gambar (frames), audio (audios), dan naskah lisan (transcriptRisks,

setelah ditranskripsi diproses oleh mesin yang sama dengan pengecekan teks).

Biaya: 1 kredit per detik durasi video, dipotong saat pengiriman. Mohon laporkan videoDuration dengan jujur.

Body permintaan

FieldTipeKeterangan
videoUrlWajib字符串URL video, wajib dapat diakses publik. Bila Anda belum punya penyimpanan objek sendiri, panggil dulu endpoint kredensial unggah langsung.
videoTitleWajib字符串Judul / nama berkas video.
videoSizeWajib数字Ukuran video dalam satuan MB (bukan byte). Maksimum 1024 (1GB).(取值 0.01–1024)
videoDurationWajib数字Durasi video (detik). Biaya dihitung dari nilai ini (1 kredit/detik), mohon laporkan dengan jujur.(最小 1)
videoWidth数字Lebar video (piksel).
videoHeight数字Tinggi video (piksel).
platform枚举Platform penerbitan. Hanya menentukan kumpulan aturan platform untuk naskah lisan; bila tidak diisi, dipakai platform default situs ini.Nilai yang tersedia: tiktok_idTikTok Indonesiashopee_idShopee IndonesiatokopediaTokopedia
vertical枚举Industri konten. Hanya menentukan kumpulan aturan industri untuk naskah lisan: menyebut industri spesifik = kumpulan umum + kumpulan industri tersebut; tidak diisi atau general = dilonggarkan ke seluruh kumpulan industri (lebih baik melapor berlebih). Penilaian gambar dan audio tidak terkait dengannya.Nilai yang tersedia: generalUmumbeautyKecantikan & perawatanhealthSuplemen kesehatanfoodMakanan & minumanfashionFesyen

Respons201

FieldTipeKeterangan
id字符串Id pengecekan ini, dipakai untuk polling hasil.
object字符串Tipe objek.
status字符串Status saat ini. Tepat setelah dikirim nilainya processing.
Kemungkinan error
402Kredit tidak mencukupi

Contoh

bash
curl -X POST https://www.byerisk.com/api/v1/intl/id/video/checks \
  -H "Authorization: Bearer $BYERISK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "videoUrl": "https://cdn.example.com/videos/promo-01.mp4",
    "videoTitle": "promo-01.mp4",
    "videoSize": 12.4,
    "videoDuration": 45,
    "videoWidth": 1080,
    "videoHeight": 1920,
    "platform": "tiktok_id",
    "vertical": "general"
  }'
json — respons
{
  "success": true,
  "data": {
    "id": "cms8xhc5x0006sp59vrks7zkf",
    "object": "intl_text_check",
    "status": "processing"
  }
}
GET/v1/intl/id/video/checks

Riwayat pengecekan video

Dikembalikan berurutan dari yang terbaru, hanya berisi ringkasan.

Parameter kueri

FieldTipeKeterangan
pagestringNomor halaman, mulai dari 1.Default 1
pageSizestringJumlah data per halaman, maksimum 50.Default 20
statusenumFilter berdasarkan status.Nilai yang tersedia: processingSedang diprosescompletedSelesaifailedGagal

Respons200

FieldTipeKeterangan
object字符串Tipe objek, selalu list.
page数字Halaman saat ini.
pageSize数字Jumlah data per halaman.
total数字Total data yang cocok.
hasMore布尔Apakah masih ada halaman berikutnya.
data数组<对象>Data pada halaman ini.
id字符串Id pengecekan.
object字符串Tipe objek.
status字符串Status peninjauan video.
video对象URL, judul, dan durasi video.
vertical对象Deklarasi industri.
riskLevel枚举Kesimpulan tingkat atas.Nilai yang tersedia: PASSREVIEWREJECT
labels数组<字符串>Label risiko.
transcriptStatus对象Status transkripsi lisan.
createdAt对象Waktu dibuat.

Contoh

bash
curl "https://www.byerisk.com/api/v1/intl/id/video/checks" \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "object": "list",
    "page": 1,
    "pageSize": 20,
    "total": 128,
    "hasMore": true,
    "data": [
      {
        "id": "string",
        "object": "intl_video_check",
        "status": "string",
        "video": null,
        "vertical": null,
        "riskLevel": "PASS",
        "labels": [
          "string"
        ],
        "transcriptStatus": null,
        "createdAt": null
      }
    ]
  }
}
GET/v1/intl/id/video/checks/{id}

Ambil hasil pengecekan video

Setiap pemanggilan sekaligus mendorong satu putaran polling ke mesin pengecekan, jadi cukup polling endpoint ini — tidak perlu endpoint status terpisah.

⚠️ Syarat berhenti polling ada dua: status sudah final (completed / failed),

dan transcriptStatus bukan lagi processing. Transkripsi lisan biasanya selesai lebih lambat daripada peninjauan gambar;

hanya melihat status akan membuat Anda berhenti saat transkripsi masih berjalan dan tidak pernah mendapat transcriptRisks.

explainLocale menentukan bahasa penjelasan risiko lisan. Parameter ini ada di sisi baca, bukan sisi kirim —

hasilnya keluar asinkron, sehingga pilihan bahasa saat pengiriman tidak sampai ke saat data disimpan.

Parameter jalur

FieldTipeKeterangan
idWajibstring

Parameter kueri

FieldTipeKeterangan
explainLocaleenumBahasa penjelasan risiko. Bila tidak diisi, digunakan zh-CN.Nilai yang tersedia: zh-CNBahasa Mandarinid-IDBahasa IndonesiaDefault zh-CN

Respons200

FieldTipeKeterangan
id字符串Id pengecekan.
object字符串Tipe objek.
status枚举Status peninjauan video. ⚠️ Ini bukan satu-satunya syarat berhenti polling — perhatikan juga transcriptStatus, karena transkripsi lisan biasanya selesai lebih lambat daripada peninjauan gambar.Nilai yang tersedia: processingSedang diprosescompletedSelesaifailedGagal
video对象Informasi video.
url字符串URL video.
title字符串Judul / nama berkas video.
sizeMb对象Ukuran (MB).
durationSeconds对象Durasi (detik).
width对象Lebar (piksel).
height对象Tinggi (piksel).
platform枚举Platform yang dipakai untuk pengecekan naskah lisan.Nilai yang tersedia: tiktok_idTikTok Indonesiashopee_idShopee IndonesiatokopediaTokopedia
vertical枚举Industri yang dipakai untuk pengecekan naskah lisan.Nilai yang tersedia: generalUmumbeautyKecantikan & perawatanhealthSuplemen kesehatanfoodMakanan & minumanfashionFesyen
riskLevel枚举Kesimpulan tingkat atas (gambar + audio).Nilai yang tersedia: PASSREVIEWREJECT
labels数组<字符串>Label risiko keseluruhan.
frames数组<对象>Kecocokan pada gambar, dengan titik waktu per detik.
timeSeconds数字Titik waktu kemunculan gambar yang cocok di dalam video (detik).
riskLevel枚举Tingkat untuk gambar ini.Nilai yang tersedia: PASSREVIEWREJECT
description字符串Keterangan kecocokan.
imageUrl对象URL cuplikan gambar yang cocok. URL bertanda tangan berumur pendek dan akan kedaluwarsa — simpan sendiri bila Anda perlu menyimpannya jangka panjang.
ocrText对象Tulisan yang dikenali di dalam gambar.
audios数组<对象>Kecocokan pada audio, dengan titik awal dan akhir dalam detik.
startSeconds数字Titik awal potongan yang cocok (detik).
endSeconds数字Titik akhir potongan yang cocok (detik).
riskLevel枚举Tingkat untuk potongan ini.Nilai yang tersedia: PASSREVIEWREJECT
description字符串Keterangan kecocokan.
text对象Teks suara dari potongan yang cocok.
transcript对象Transkripsi lengkap naskah lisan.
transcriptStatus对象Status transkripsi lisan: null tidak diaktifkan | processing sedang ditranskripsi | completed | failed | empty tanpa jalur audio. **Selama masih processing, risiko lisan belum lengkap — lanjutkan polling.**
transcriptRisks数组<对象>Pelanggaran pada naskah lisan. Diproses oleh mesin yang sama dengan pengecekan teks, dan dihitung setara dengan gambar / audio dalam kesimpulan.
matchedText字符串Potongan naskah lisan asli yang cocok.
severity枚举Tingkat keparahan.Nilai yang tersedia: highTinggimediumSedanglowRendah
category对象Kategori risiko, sudah dilokalkan.
suggestion对象Saran perbaikan, sudah dilokalkan.
legalRef对象Rujukan pasal, tidak ikut diterjemahkan.
replacement对象Kalimat patuh yang bisa langsung menggantikan matchedText; kosong berarti hanya bisa dihapus.
startSeconds数字Titik awal kalimat tempat kecocokan berada (detik), bisa langsung dipakai untuk seek.
endSeconds数字Titik akhir kalimat tempat kecocokan berada (detik).
sentence对象Kalimat utuh tempat kecocokan berada, sebagai konteks untuk Anda.
source枚举Sumber penilaian.Nilai yang tersedia: rulemodelcustom
createdAt对象Waktu dibuat.
updatedAt对象Waktu pembaruan terakhir.
Kemungkinan error
404Data tidak ditemukan atau milik situs lain

Contoh

bash
curl "https://www.byerisk.com/api/v1/intl/id/video/checks/{id}" \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_video_check",
    "status": "processing",
    "video": {
      "url": "string",
      "title": "string",
      "sizeMb": null,
      "durationSeconds": null,
      "width": null,
      "height": null
    },
    "platform": "tiktok_id",
    "vertical": "general",
    "riskLevel": "PASS",
    "labels": [
      "string"
    ],
    "frames": [
      {
        "timeSeconds": 12,
        "riskLevel": "PASS",
        "description": "string",
        "imageUrl": null,
        "ocrText": null
      }
    ],
    "audios": [
      {
        "startSeconds": 0,
        "endSeconds": 0,
        "riskLevel": "PASS",
        "description": "string",
        "text": null
      }
    ],
    "transcript": null,
    "transcriptStatus": null,
    "transcriptRisks": [
      {
        "matchedText": "string",
        "severity": "high",
        "category": null,
        "suggestion": null,
        "legalRef": null,
        "replacement": null,
        "startSeconds": 0,
        "endSeconds": 0,
        "sentence": null,
        "source": "rule"
      }
    ],
    "createdAt": null,
    "updatedAt": null
  }
}
DELETE/v1/intl/id/video/checks/{id}

Hapus data pengecekan video

Penghapusan lunak, sekaligus membersihkan berkas video yang telah diunggah secara asinkron.

Parameter jalur

FieldTipeKeterangan
idWajibstring

Respons200

FieldTipeKeterangan
id字符串Id data yang dihapus.
object字符串Tipe objek.
deleted布尔Selalu true.
Kemungkinan error
404Data tidak ditemukan atau milik situs lain

Contoh

bash
curl -X DELETE https://www.byerisk.com/api/v1/intl/id/video/checks/{id} \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_text_check",
    "deleted": true
  }
}

Pengecekan Massal Paket Materi

POST/v1/intl/id/batches

Kirim pengecekan massal paket materi

Kirim beberapa teks + gambar + video sekaligus, dicek bersama dan disimpulkan secara agregat.

Maksimum 10 teks, 20 gambar, 10 video, total ≤40 item per paket.

Langsung mengembalikan id, seluruh sub-item dicek paralel di belakang layar. Polling GET {id} untuk melihat progres:

progress.done / progress.total adalah tingkat penyelesaian; setelah semua selesai, result memberi kesimpulan paket (PASS / REJECT).

Setiap sub-item membawa checkId yang bisa dipakai memanggil endpoint per item untuk detail lengkap.

Biaya: dihitung per sub-item sesuai tarifnya (teks per item, gambar per lembar, video per detik). Bila kredit tidak cukup, seluruh paket ditolak saat pengiriman.

Body permintaan

FieldTipeKeterangan
nameWajib字符串Nama paket materi, 1–60 karakter.
platformWajib枚举Platform penerbitan, berlaku untuk seluruh paket.Nilai yang tersedia: tiktok_idTikTok Indonesiashopee_idShopee IndonesiatokopediaTokopedia
verticalWajib枚举Industri konten, berlaku untuk seluruh paket.Nilai yang tersedia: generalUmumbeautyKecantikan & perawatanhealthSuplemen kesehatanfoodMakanan & minumanfashionFesyen
texts数组<字符串>Sub-item teks, maksimum 10. Teks yang kurang dari 10 karakter akan dibuang, bukan membuat seluruh paket gagal — bila sepuluh teks dikirim sekaligus lalu semuanya ditolak gara-gara satu teks terlalu pendek, sementara pesan error tidak menyebut yang mana, itu bukan kontrak yang baik.
images数组<对象>Sub-item gambar, maksimum 20.
urlWajib字符串URL gambar, dapat diakses publik.
nameWajib字符串Judul / nama berkas gambar.
sizeWajib数字Ukuran gambar (byte).
width数字Lebar (piksel).
height数字Tinggi (piksel).
videos数组<对象>Sub-item video, maksimum 10.
urlWajib字符串URL video, dapat diakses publik.
nameWajib字符串Judul / nama berkas video.
sizeWajib数字Ukuran video dalam satuan MB (sama seperti pengecekan video tunggal, bukan byte).
durationWajib数字Durasi video (detik), dasar perhitungan biaya.
width数字Lebar (piksel).
height数字Tinggi (piksel).
explainLocale枚举Bahasa penjelasan risiko.Nilai yang tersedia: zh-CNBahasa Mandarinid-IDBahasa IndonesiaDefault zh-CN

Respons201

FieldTipeKeterangan
id字符串Id pengecekan ini, dipakai untuk polling hasil.
object字符串Tipe objek.
status字符串Status saat ini. Tepat setelah dikirim nilainya processing.
Kemungkinan error
400Paket materi kosong, atau melebihi batas jumlah item
402Kredit tidak cukup untuk menutup biaya seluruh paket
403Pengecekan massal memerlukan langganan Flagship atau lebih tinggi

Contoh

bash
curl -X POST https://www.byerisk.com/api/v1/intl/id/batches \
  -H "Authorization: Bearer $BYERISK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Kampanye Ramadan · batch 1",
    "platform": "tiktok_id",
    "vertical": "beauty",
    "texts": [
      "string"
    ],
    "images": [
      {
        "url": "string",
        "name": "string",
        "size": 254112,
        "width": 0,
        "height": 0
      }
    ],
    "videos": [
      {
        "url": "string",
        "name": "string",
        "size": 12.4,
        "duration": 45,
        "width": 0,
        "height": 0
      }
    ],
    "explainLocale": "zh-CN"
  }'
json — respons
{
  "success": true,
  "data": {
    "id": "cms8xhc5x0006sp59vrks7zkf",
    "object": "intl_text_check",
    "status": "processing"
  }
}
GET/v1/intl/id/batches

Daftar paket materi

Dikembalikan berurutan dari yang terbaru, lengkap dengan progres dan kesimpulan tiap paket. Sekaligus mendorong status sebagian paket yang masih berjalan.

Parameter kueri

FieldTipeKeterangan
pagestringNomor halaman, mulai dari 1.Default 1
pageSizestringJumlah data per halaman, maksimum 50.Default 20
explainLocaleenumBahasa penjelasan risiko (daftar ini sekaligus mendorong status sub-item, sehingga penyimpanan bisa terjadi saat ini).Nilai yang tersedia: zh-CNBahasa Mandarinid-IDBahasa IndonesiaDefault zh-CN

Respons200

FieldTipeKeterangan
object字符串Tipe objek, selalu list.
page数字Halaman saat ini.
pageSize数字Jumlah data per halaman.
total数字Total data yang cocok.
hasMore布尔Apakah masih ada halaman berikutnya.
data数组<对象>Data pada halaman ini.
id字符串Id paket materi.
object字符串Tipe objek.
name字符串Nama paket materi.
status字符串Status paket.
counts对象Jumlah sub-item per jenis.
texts数字Jumlah sub-item teks.
images数字Jumlah sub-item gambar.
videos数字Jumlah sub-item video.
progress对象Progres.
total数字Total sub-item.
done数字Jumlah sub-item yang selesai.
percent数字Persentase penyelesaian (0–100).
result对象Kesimpulan paket.
summary对象Hitungan seluruh paket.
violation数字Jumlah pelanggaran.
sceneHint数字Jumlah catatan skenario.
createdAt对象Waktu dibuat.
finishedAt对象Waktu selesai.

Contoh

bash
curl "https://www.byerisk.com/api/v1/intl/id/batches" \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "object": "list",
    "page": 1,
    "pageSize": 20,
    "total": 128,
    "hasMore": true,
    "data": [
      {
        "id": "string",
        "object": "intl_batch",
        "name": "string",
        "status": "string",
        "counts": {
          "texts": 0,
          "images": 0,
          "videos": 0
        },
        "progress": {
          "total": 12,
          "done": 9,
          "percent": 75
        },
        "result": null,
        "summary": {
          "violation": 0,
          "sceneHint": 0
        },
        "createdAt": null,
        "finishedAt": null
      }
    ]
  }
}
GET/v1/intl/id/batches/{id}

Ambil progres dan hasil paket materi

Setiap pemanggilan sekaligus menyegarkan status sub-item, jadi cukup polling endpoint ini. items[].checkId dipakai untuk mengambil detail lengkap per item.

Parameter jalur

FieldTipeKeterangan
idWajibstring

Parameter kueri

FieldTipeKeterangan
explainLocaleenumBahasa penjelasan risiko. Bila tidak diisi, digunakan zh-CN.Nilai yang tersedia: zh-CNBahasa Mandarinid-IDBahasa IndonesiaDefault zh-CN

Respons200

FieldTipeKeterangan
id字符串Id paket materi.
object字符串Tipe objek.
name字符串Nama paket materi.
platform枚举Platform penerbitan.Nilai yang tersedia: tiktok_idTikTok Indonesiashopee_idShopee IndonesiatokopediaTokopedia
vertical枚举Industri konten.Nilai yang tersedia: generalUmumbeautyKecantikan & perawatanhealthSuplemen kesehatanfoodMakanan & minumanfashionFesyen
status枚举Status paket.Nilai yang tersedia: processingSedang diprosescompletedSelesaifailedGagal
progress对象Progres.
total数字Total sub-item.
done数字Jumlah sub-item yang selesai.
percent数字Persentase penyelesaian (0–100).
result枚举Kesimpulan paket, baru terisi setelah seluruh sub-item selesai.Nilai yang tersedia: PASSREJECT
summary对象Hitungan seluruh paket.
violation数字Jumlah pelanggaran.
sceneHint数字Jumlah catatan skenario.
items数组<对象>Rincian sub-item.
id字符串Id sub-item (bukan id pengecekan).
kind枚举Jenis sub-item. Perhatikan nilainya text, bukan script yang dipakai secara internal — konsisten dengan jalur endpoint per item.Nilai yang tersedia: textimagevideo
checkId字符串Id pengecekan per item yang bersesuaian. Pakai untuk memanggil /text|image|video/checks/{id} guna mengambil detail lengkap.
index数字Indeks urutan sub-item saat dikirim.
status枚举Status sub-item.Nilai yang tersedia: processingSedang diprosescompletedSelesaifailedGagal
riskLevel对象Kesimpulan sub-item. Untuk teks: safe/low/medium/high; untuk gambar dan video: PASS/REVIEW/REJECT.
summary对象Hitungan sub-item.
violation数字Jumlah pelanggaran.
sceneHint数字Jumlah catatan skenario.
text字符串Sub-item teks: teks asli.
riskCount数字Sub-item teks: jumlah risiko.
image对象Sub-item gambar: URL dan judul.
video对象Sub-item video: URL, judul, dan durasi.
labels数组<字符串>Sub-item gambar / video: label risiko.
transcriptStatus对象Sub-item video: status transkripsi lisan.
createdAt对象Waktu dibuat.
finishedAt对象Waktu selesai.
Kemungkinan error
404Paket materi tidak ditemukan atau milik situs lain

Contoh

bash
curl "https://www.byerisk.com/api/v1/intl/id/batches/{id}" \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_batch",
    "name": "string",
    "platform": "tiktok_id",
    "vertical": "general",
    "status": "processing",
    "progress": {
      "total": 12,
      "done": 9,
      "percent": 75
    },
    "result": "PASS",
    "summary": {
      "violation": 0,
      "sceneHint": 0
    },
    "items": [
      {
        "id": "string",
        "kind": "text",
        "checkId": "string",
        "index": 0,
        "status": "processing",
        "riskLevel": null,
        "summary": {
          "violation": 0,
          "sceneHint": 0
        },
        "text": "string",
        "riskCount": 0,
        "image": null,
        "video": null,
        "labels": [
          "string"
        ],
        "transcriptStatus": null
      }
    ],
    "createdAt": null,
    "finishedAt": null
  }
}
DELETE/v1/intl/id/batches/{id}

Hapus paket materi

Menghapus paket materi beserta seluruh data pengecekan sub-itemnya secara lunak, sekaligus membersihkan berkas gambar / video yang telah diunggah secara asinkron.

Parameter jalur

FieldTipeKeterangan
idWajibstring

Respons200

FieldTipeKeterangan
id字符串Id data yang dihapus.
object字符串Tipe objek.
deleted布尔Selalu true.
Kemungkinan error
404Paket materi tidak ditemukan atau milik situs lain

Contoh

bash
curl -X DELETE https://www.byerisk.com/api/v1/intl/id/batches/{id} \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_text_check",
    "deleted": true
  }
}

Kata Terlarang Kustom

POST/v1/intl/id/custom-rules

Tambah satu kata terlarang kustom

Body permintaan

FieldTipeKeterangan
keywordWajib字符串Kata yang akan dicek. Untuk situs Indonesia, isilah kata berbahasa Indonesia — yang dicek adalah teks berbahasa Indonesia, kata berbahasa Mandarin tidak akan pernah cocok.(长度 0–100)
matchType枚举Cara pencocokan: keyword = pencocokan sub-string (default, muncul di posisi mana pun tetap dihitung); phrase = pencocokan batas kata. Untuk bahasa yang dipisah spasi seperti bahasa Indonesia, disarankan memakai phrase — pencocokan sub-string membuat kata pendek salah mengenai kata yang lebih panjang.Nilai yang tersedia: keywordCocok sub-stringphraseCocok batas kataDefault keyword
replacement字符串Kata pengganti. Setelah diisi, hasil kecocokan akan membawa replacement yang bisa dipakai untuk penggantian presisi sekali klik; bila dikosongkan, sistem hanya mengingatkan.(长度 0–100)
note字符串Catatan, hanya Anda yang bisa melihatnya.(长度 0–200)
enabled布尔Apakah aktif. Setelah dinonaktifkan, data tetap tersimpan tetapi tidak ikut dalam pengecekan.Default true

Respons201

FieldTipeKeterangan
id字符串Id aturan.
object字符串Tipe objek.
keyword字符串Kata yang dicek.
matchType枚举Cara pencocokan.Nilai yang tersedia: keywordCocok sub-stringphraseCocok batas kata
replacement对象Kata pengganti; kosong berarti hanya mengingatkan.
note对象Catatan, hanya Anda yang bisa melihatnya.
enabled布尔Apakah aktif.
createdAt对象Waktu dibuat.
updatedAt对象Waktu pembaruan terakhir.
Kemungkinan error
400Kata ini sudah ada di situs ini, atau kuota kamus paket Anda sudah penuh
403Kata terlarang kustom adalah fitur berbayar; langganan Anda saat ini belum mencakupnya

Contoh

bash
curl -X POST https://www.byerisk.com/api/v1/intl/id/custom-rules \
  -H "Authorization: Bearer $BYERISK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "keyword": "garansi uang kembali",
    "matchType": "keyword",
    "replacement": "kebijakan pengembalian berlaku",
    "note": "string",
    "enabled": false
  }'
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_custom_rule",
    "keyword": "garansi uang kembali",
    "matchType": "keyword",
    "replacement": null,
    "note": null,
    "enabled": false,
    "createdAt": null,
    "updatedAt": null
  }
}
GET/v1/intl/id/custom-rules

Tampilkan seluruh kata terlarang kustom di situs ini

Berurutan dari yang terbaru, tanpa halaman. Hanya mengembalikan kata milik situs ini — kata yang sama disimpan terpisah di tiap situs dan tidak saling memicu.

Respons200

FieldTipeKeterangan
object字符串Tipe objek, selalu list.
data数组<对象>Seluruh aturan di situs ini (jumlah kamus tidak besar, tanpa halaman).
id字符串Id aturan.
object字符串Tipe objek.
keyword字符串Kata yang dicek.
matchType枚举Cara pencocokan.Nilai yang tersedia: keywordCocok sub-stringphraseCocok batas kata
replacement对象Kata pengganti; kosong berarti hanya mengingatkan.
note对象Catatan, hanya Anda yang bisa melihatnya.
enabled布尔Apakah aktif.
createdAt对象Waktu dibuat.
updatedAt对象Waktu pembaruan terakhir.
total数字Total aturan.

Contoh

bash
curl "https://www.byerisk.com/api/v1/intl/id/custom-rules" \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "object": "list",
    "data": [
      {
        "id": "string",
        "object": "intl_custom_rule",
        "keyword": "garansi uang kembali",
        "matchType": "keyword",
        "replacement": null,
        "note": null,
        "enabled": false,
        "createdAt": null,
        "updatedAt": null
      }
    ],
    "total": 0
  }
}
PATCH/v1/intl/id/custom-rules/{id}

Ubah kata terlarang kustom

Hanya memperbarui field yang dikirim.

Parameter jalur

FieldTipeKeterangan
idWajibstring

Body permintaan

FieldTipeKeterangan
keyword字符串Kata yang akan dicek.(长度 0–100)
replacement字符串Kata pengganti.(长度 0–100)
note字符串Catatan.(长度 0–200)
enabled布尔Apakah aktif.

Respons200

FieldTipeKeterangan
id字符串Id aturan.
object字符串Tipe objek.
keyword字符串Kata yang dicek.
matchType枚举Cara pencocokan.Nilai yang tersedia: keywordCocok sub-stringphraseCocok batas kata
replacement对象Kata pengganti; kosong berarti hanya mengingatkan.
note对象Catatan, hanya Anda yang bisa melihatnya.
enabled布尔Apakah aktif.
createdAt对象Waktu dibuat.
updatedAt对象Waktu pembaruan terakhir.
Kemungkinan error
404Aturan tidak ditemukan atau milik situs lain

Contoh

bash
curl -X PATCH https://www.byerisk.com/api/v1/intl/id/custom-rules/{id} \
  -H "Authorization: Bearer $BYERISK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "keyword": "string",
    "replacement": "string",
    "note": "string",
    "enabled": false
  }'
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_custom_rule",
    "keyword": "garansi uang kembali",
    "matchType": "keyword",
    "replacement": null,
    "note": null,
    "enabled": false,
    "createdAt": null,
    "updatedAt": null
  }
}
DELETE/v1/intl/id/custom-rules/{id}

Hapus kata terlarang kustom

Penghapusan permanen, tidak dapat dipulihkan.

Parameter jalur

FieldTipeKeterangan
idWajibstring

Respons200

FieldTipeKeterangan
id字符串Id data yang dihapus.
object字符串Tipe objek.
deleted布尔Selalu true.
Kemungkinan error
404Aturan tidak ditemukan atau milik situs lain

Contoh

bash
curl -X DELETE https://www.byerisk.com/api/v1/intl/id/custom-rules/{id} \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "id": "string",
    "object": "intl_text_check",
    "deleted": true
  }
}
POST/v1/intl/id/custom-rules/bulk-import

Impor massal kata terlarang

Maksimum 2000 kata per panggilan. Ramah idempotensi: duplikat dalam batch maupun kata yang sudah ada akan dilewati, bukan menghasilkan error;

respons memberi tiga hitungan terpisah imported / skippedDuplicate / rejectedQuota.

Bagian yang melebihi kuota ditolak, sedangkan bagian yang diterima tetap ditulis.

Body permintaan

FieldTipeKeterangan
itemsWajib数组<对象>Daftar kata yang akan diimpor, maksimum 2000 per panggilan. Duplikat dalam batch maupun kata yang sudah ada akan dilewati otomatis (dihitung terpisah dalam respons), tanpa menghasilkan error.
keywordWajib字符串Kata yang akan dicek.(长度 0–100)
replacement字符串Kata pengganti.(长度 0–100)
note字符串Catatan.(长度 0–200)

Respons201

FieldTipeKeterangan
object字符串Tipe objek.
total数字Total kata yang dikirim kali ini.
imported数字Jumlah yang benar-benar ditulis.
skippedDuplicate数字Jumlah yang dilewati karena duplikat dalam batch atau sudah ada di kamus.
rejectedQuota数字Jumlah yang ditolak karena melebihi kuota paket.
Kemungkinan error
403Kata terlarang kustom adalah fitur berbayar; langganan Anda saat ini belum mencakupnya

Contoh

bash
curl -X POST https://www.byerisk.com/api/v1/intl/id/custom-rules/bulk-import \
  -H "Authorization: Bearer $BYERISK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "keyword": "string",
        "replacement": "string",
        "note": "string"
      }
    ]
  }'
json — respons
{
  "success": true,
  "data": {
    "object": "intl_custom_rule_import_result",
    "total": 0,
    "imported": 0,
    "skippedDuplicate": 0,
    "rejectedQuota": 0
  }
}
GET/v1/intl/id/custom-rules/quota

Cek kuota kamus

Mengembalikan jumlah terpakai dan batas paket. ⚠️ **used bersifat per akun** (termasuk kata yang Anda daftarkan di situs lain), sedangkan isPaid adalah status langganan situs ini — keanggotaan diisolasi per situs, kuota kamus tidak.

Respons200

FieldTipeKeterangan
object字符串Tipe objek.
used数字Jumlah terpakai. Kuota bersifat per akun dan dibagi lintas situs — termasuk kata yang Anda daftarkan di situs lain.
limit数字Batas kamus pada paket Anda saat ini. Paket gratis bernilai 0.
isPaid布尔Apakah langganan situs ini sedang berbayar.

Contoh

bash
curl "https://www.byerisk.com/api/v1/intl/id/custom-rules/quota" \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "object": "intl_custom_rule_quota",
    "used": 12,
    "limit": 500,
    "isPaid": true
  }
}
GET/v1/intl/id/custom-rules/settings

Cek status sakelar utama

Saat dimatikan, seluruh kata kustom tidak ikut dalam pengecekan (data tetap tersimpan). Sakelar ini per akun, tidak dipisah per situs.

Respons200

FieldTipeKeterangan
object字符串Tipe objek.
enabled布尔Sakelar utama tingkat akun. Saat dimatikan, seluruh kata kustom tidak ikut dalam pengecekan (data tetap tersimpan).

Contoh

bash
curl "https://www.byerisk.com/api/v1/intl/id/custom-rules/settings" \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "object": "intl_custom_rule_settings",
    "enabled": false
  }
}
PATCH/v1/intl/id/custom-rules/settings

Ubah sakelar utama

Ortogonal terhadap enabled tiap aturan: bila sakelar utama dimatikan, enabled per aturan tidak berlaku.

Body permintaan

FieldTipeKeterangan
enabledWajib布尔Sakelar utama tingkat akun. Setelah dimatikan, seluruh kata kustom tidak ikut dalam pengecekan (data tetap tersimpan), ortogonal terhadap enabled tiap aturan. Sakelar ini sendiri tidak dipisah per situs negara: ia menjawab pertanyaan «apakah akun ini memakai kamus kata kustom».

Respons200

FieldTipeKeterangan
object字符串Tipe objek.
enabled布尔Sakelar utama tingkat akun. Saat dimatikan, seluruh kata kustom tidak ikut dalam pengecekan (data tetap tersimpan).
Kemungkinan error
403Kata terlarang kustom adalah fitur berbayar; langganan Anda saat ini belum mencakupnya

Contoh

bash
curl -X PATCH https://www.byerisk.com/api/v1/intl/id/custom-rules/settings \
  -H "Authorization: Bearer $BYERISK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "enabled": false
  }'
json — respons
{
  "success": true,
  "data": {
    "object": "intl_custom_rule_settings",
    "enabled": false
  }
}

Akun

GET/v1/intl/id/account

Cek saldo dan pemakaian akun

Mengembalikan saldo kredit, paket langganan, dan jumlah pemakaian tiap jenis pengecekan bulan ini untuk situs ini.

⚠️ Kredit dan langganan diisolasi per situs: saldo di sini tidak mencakup kredit Anda di situs lain, begitu pula sebaliknya.

Disarankan memanggilnya sekali sebelum integrasi untuk memastikan kuota — kalau tidak, Anda baru tahu kredit kurang saat tertabrak 402.

Statistik pemakaian mencakup semua kanal (web, API), bukan hanya panggilan API.

Respons200

FieldTipeKeterangan
object字符串Tipe objek.
country字符串Situs tempat panggilan ini berlangsung.
credits对象Saldo kredit situs ini. Kredit diisolasi per situs; saldo situs Mandarin tidak termasuk di sini.
total数字Total kredit yang tersedia di situs ini.
subscription数字Bagian dari bonus langganan.
activity数字Bagian dari bonus kegiatan.
booster数字Bagian dari paket tambahan kredit.
expiringSoon对象Bagian yang akan kedaluwarsa dalam 7 hari; null bila tidak ada.
subscription对象Tingkat langganan di situs ini.
usageThisMonth对象Jumlah tiap jenis pengecekan di situs ini bulan ini (bulan kalender), mencakup seluruh kanal web maupun API.

Contoh

bash
curl "https://www.byerisk.com/api/v1/intl/id/account" \
  -H "Authorization: Bearer $BYERISK_API_KEY"
json — respons
{
  "success": true,
  "data": {
    "object": "intl_account",
    "country": "id",
    "credits": {
      "total": 8420,
      "subscription": 0,
      "activity": 0,
      "booster": 0,
      "expiringSoon": null
    },
    "subscription": null,
    "usageThisMonth": null
  }
}

Unggah Materi

POST/v1/intl/id/uploads/policy

Ambil kredensial unggah materi

Endpoint ini hanya diperlukan bila Anda belum punya penyimpanan materi yang dapat diakses publik.

Bila materi sudah ada di penyimpanan objek atau CDN Anda sendiri, langsung isikan URL-nya ke endpoint pengecekan dan lewati langkah ini.

Mengembalikan satu kredensial POST Policy untuk unggah langsung lewat form standar:

bash
curl -X POST "$host" \
  -F "key=$dir<nama-berkas-Anda>" \
  -F "policy=$policy" \
  -F "OSSAccessKeyId=$accessKeyId" \
  -F "signature=$signature" \
  -F "file=@./promo-01.mp4"

Setelah unggah berhasil, alamat materi adalah {cdnHost}/{key}; isikan ke videoUrl / imageUrl pada endpoint pengecekan.

Kredensial kedaluwarsa dalam 5 menit dan hanya mengizinkan penulisan ke prefiks direktori khusus akun Anda di situs ini.

Body permintaan

FieldTipeKeterangan
kindWajib枚举Jenis materi, menentukan batas ukuran: video maksimum 1GB, image maksimum 10MB.Nilai yang tersedia: videoimage

Respons201

FieldTipeKeterangan
object字符串Tipe objek.
kind枚举Jenis materi.Nilai yang tersedia: videoimage
host字符串Alamat tujuan unggah langsung (form di-POST ke sini).
cdnHost字符串Domain akses materi setelah unggah berhasil; alamat materi = {cdnHost}/{key}.
dir字符串Prefiks direktori yang boleh ditulisi. key wajib diawali dengannya, kalau tidak akan ditolak.
policy字符串Kebijakan unggah (base64).
accessKeyId字符串AccessKeyId untuk unggah langsung.
signature字符串Tanda tangan kebijakan.
maxSizeBytes数字Batas ukuran untuk jenis materi ini (byte).
expiresAt字符串Waktu kedaluwarsa kredensial (ISO 8601), hangus setelah 5 menit.

Contoh

bash
curl -X POST https://www.byerisk.com/api/v1/intl/id/uploads/policy \
  -H "Authorization: Bearer $BYERISK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "video"
  }'
json — respons
{
  "success": true,
  "data": {
    "object": "intl_upload_policy",
    "kind": "video",
    "host": "string",
    "cdnHost": "string",
    "dir": "string",
    "policy": "string",
    "accessKeyId": "string",
    "signature": "string",
    "maxSizeBytes": 0,
    "expiresAt": "string"
  }
}