POST/v1/scammer-checks

Check an identifier for scam indications

Consumes credit on every call, **including misses** (anti-enumeration). A miss is always billed at the `minimal` rate even when `detail=full` was requested. Exactly one of `input` (structured, normalized server-side) or `query` (pre-normalized `searchQueryIndex`, used by the SDKs) must be present.

Auth: Bearer <access_token>scope: scammer.check

Parameters

NamaTipeKeterangan
Idempotency-Keystring (header)Dedup key for retries: same key + same payload returns the stored result without charging again; same key + different payload answers 409. Hashed **exactly as received** — no trimming — so the value a partner records is the value that reconciles. The SDKs send one on every call.

Request body

NamaTipeKeterangan
creditSourceUSER | PARTNER | AUTOWho pays. USER: the consenting user's subscription credits (Stage 1). PARTNER: the org's prepaid balance [Stage 2]. AUTO: user first, fall back to partner [Stage 2].
detailminimal | full`minimal` omits topChronologies/comments and is always English (no translation cost). `full` requires the contractual `features.fullDetail` rider.
localestringBCP-47; only honored for detail=full (translation of tags/chronologies).
inputoneOfStructured identifier, normalized server-side with the same helpers the report pipeline uses. DOMAIN is deliberately not a supported type: the backend has no domain index, so such a key could never hit while the miss would still bill.
querystringEscape hatch: a pre-normalized searchQueryIndex as built by the SDKs (e.g. `PHONE_+62812...`). Validated against a per-type whitelist; prefer `input`.

Katalog error

  • 400

    `invalid_request`, `unsupported_input_type`, or `unsupported_credit_source` (PARTNER/AUTO before Stage 2).

  • 401

    `expired_token` (refresh and retry), `invalid_token` / `grant_revoked` (terminal: discard the grant, re-consent), `invalid_api_key`. Only the two terminal codes end a session.

  • 402

    `insufficient_user_credits`, `insufficient_partner_balance`, or `insufficient_credits`. Identical for hit and miss — the error never leaks whether the identifier exists.

  • 403

    `missing_scope`, `detail_not_permitted` (full without the contractual rider), `credential_mismatch`, `partner_suspended`.

  • 409

    `idempotency_conflict` — same key, different payload.

  • 429

    `rate_limited`; honor the `Retry-After` header.

API reference · Tracive for Developers