📘 Public beta · Endpoints are stable; OpenAPI specs and SDKs ship monthly. See changelog →
Products
Anti-Fraud Platform
Channels (data sources)

Channels

A channel is a named data-source registration. It captures three things you set once and re-use across many requests:

  • Field mapping — how your raw bank payload maps to the canonical anti-fraud fields the rules engine reads.
  • Sampling — what fraction of inbound events should be evaluated (1–100%). Useful for shadow rollouts.
  • Laneonboarding or transaction. Scopes which canonical fields apply and which rules can fire.

How channels relate to /api/evaluate today

Today, real-time evaluation goes through POST /api/evaluate with a canonical-shaped body. The channel record carries your field-mapping config + sampling settings + observability metadata — visible in the dashboard's Channels view, used by the field-mapping preview, and consumed by the upcoming POST /api/channels/{id}/ingest route (2026 Q3) which will accept raw bank payloads and resolve them through the channel's mapping before evaluation. Until then, the canonical adapter lives in your service.

Channel object

{
  "id": "ch_01HXY...",
  "name": "Core banking — transfers",
  "type": "transaction",
  "lane": "transaction",
  "status": "active",
  "samplingPct": 100,
  "fieldMapping": {
    "transaction.amount":              "$.payload.nominal",
    "transaction.beneficiary_account": "$.payload.no_rek_tujuan",
    "transaction.beneficiary_bank":    "$.payload.bank_tujuan",
    "transaction.channel":             "$.payload.saluran",
    "transaction.timestamp":           "$.payload.tgl_transaksi",
    "customer.id":                     "$.payload.cif",
    "customer.account_id":             "$.payload.no_rek_asal"
  },
  "createdAt": "...",
  "updatedAt": "..."
}
FieldMeaning
laneonboarding (customer creation events) or transaction (per-event monitoring).
statusactive · paused.
samplingPct1–100 integer. Sampling rate as percent. samplingRate (0.0–1.0) is also returned as a UI alias.
fieldMappingObject mapping canonical field path → JSONPath into your raw payload.

Canonical fields

The destination side of the mapping is fixed. These are the canonical fields the rules engine reads.

Onboarding lane

FieldReq'dTypeDescription
identity.nikrequiredstring16-digit Indonesian national ID.
identity.full_namerequiredstringAs printed on the KTP.
identity.emailrequiredstringApplicant's email.
identity.phonerequiredstring+62 / 08 prefix mobile.
identity.dobrecommendeddateYYYY-MM-DD.
address.cityrecommendedstringKota / Kabupaten of residence.
address.provincerecommendedstringProvinsi (e.g. DKI Jakarta, Jawa Barat).
session.referraloptionalstringPromo / referral code if any.

Transaction lane

FieldReq'dTypeDescription
customer.idrequiredstringInternal customer / CIF — must already exist.
transaction.amountrequirednumberWhole rupiah.
transaction.beneficiary_accountrequiredstringDestination account number.
transaction.channelrequiredenumbi_fast · qris · virtual_account · internal · rtgs · topup_ewallet.
transaction.beneficiary_bankrecommendedstringBank code or name (BCA, MANDIRI, BRI, BNI).
transaction.timestamprecommendeddateISO-8601 of the event.
customer.account_idrecommendedstringCustomer's source account number.
transaction.purposeoptionalstringFree-text berita.

Endpoints

GET/api/channels
Auth · API keyScope · read

Filters: lane (onboarding · transaction). Returns channels for the current org with their full fieldMapping and sampling settings.

POST/api/channels
Auth · API keyScope · write
{
  "name": "Core banking — transfers",
  "type": "transaction",
  "lane": "transaction",
  "samplingPct": 100,
  "fieldMapping": {
    "transaction.amount":              "$.payload.nominal",
    "transaction.beneficiary_account": "$.payload.no_rek_tujuan",
    "customer.id":                     "$.payload.cif"
  }
}
PATCH/api/channels/{id}
Auth · API keyScope · write

Partial update — set any of name, type, status, fieldMapping, samplingPct. Admin role required.

DELETE/api/channels/{id}
Auth · API keyScope · write

Soft-deletes the channel. The fieldMapping config is removed from the dashboard's preview surfaces but evaluation traffic via /api/evaluate is unaffected (the canonical body shape is the contract there).

Sampling

Samples are decided per-event by your service today — samplingPct records intent and surfaces it in the Channels view so an analyst can see "this channel is currently in 10% shadow mode" without grepping config. The forthcoming POST /api/channels/{id}/ingest route (2026 Q3) will enforce sampling server-side when configured.

Don't sample onboarding

Onboarding-lane events should evaluate at 100% — you can't partially onboard a customer. Sampling is intended for high-volume transaction-lane traffic where you want to shadow-test a new rule pack before opening it to full traffic.

Audit

Channel create / update / delete writes an audit-log row with action: channel.created|channel.updated|channel.deleted, the actor, and a diff of what changed.