Transfer
A dollar moving on a rail, with its Transaction Risk Skoor.
Every transfer the bank's webhooks describe, on any rail, keyed by Column's id. The Transaction Risk Skoor (trs-v1) is a number from 0 to 100 stored on the row with its band, version, n and confidence; null means too little history, never zero risk. Bands: clear 0–29, review 30–69, hold 70–100. Transfers are written by ingest; the API rescores them and reads them inside reports and pre-flights.
Transfer
| Field | Type | Notes |
|---|---|---|
| id | string | Column transfer id, any rail. |
| tenantId | string (uuid) | |
| programId | string (uuid) | |
| rail | "ach" | "wire" | "realtime" | "book" | "intl_wire" | "check" | "card" | |
| direction | "incoming" | "outgoing" | |
| type | "CREDIT" | "DEBIT" | null | ACH type, null on other rails. |
| amountCents | string | Integer cents as a string (bigint-safe). |
| currency | string | ISO 4217, default USD. |
| status | string | Column's status enum, upper-cased. |
| entityId | string | null | |
| accountId | string | null | |
| counterpartyId | string | null | |
| counterpartyCountry | string | null | ISO 3166-1 alpha-2. |
| secCode | string | null | ACH SEC code. |
| returnCode | string | null | ACH return code when returned (R01…). |
| returnedAt | string | null (date-time) | |
| effectiveAt | string | null (date-time) | |
| columnCreatedAt | string (date-time) | When the bank created it. |
| skoor | integer | null | Transaction Risk Skoor 0–100; null until scored or when history is too thin. |
| skoorBand | "clear" | "review" | "hold" | "unscored" | null | |
| skoorVersion | string | null | Scorer version, e.g. trs-v1. |
| skoorN | integer | null | Observations behind the baselines. |
| skoorConfidence | number | null | 0–1; null when the Skoor is null. |
| skoorInputs | object | null | |
| skooredAt | string | null (date-time) | |
| raw | object | The bank's own object as last delivered. |
| updatedAt | string (date-time) |
Reason
| Field | Type | Notes |
|---|---|---|
| id | string | Stable reason id, e.g. TRS-ENT-01. |
| signal | string | The signal code the scorer emitted. |
| weight | number | Points added. |
| hard | boolean | |
| sentence | string | What a compliance officer reads. |
| detail (optional) | string |
SkoorSignal
| Field | Type | Notes |
|---|---|---|
| code | string | |
| weight | number | |
| hard (optional) | boolean | |
| detail (optional) | string |
Endpoints
post/api/skoor/backfill/{programId}
Rescore every transfer on a program
Recomputes the Transaction Risk Skoor for every transfer on the program with the current scorer. The bearer must be the operator token of the tenant that owns the program; X-Operator is not required.
| Auth | Bearer (program's tenant); no X-Operator |
|---|---|
| Operation | Transfer · POST /api/skoor/backfill/{programId} |
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
| programId | path | string (uuid) | Program id. |
Responses
200 — How many transfers were scored. object
| Field | Type | Notes |
|---|---|---|
| scored | integer |
401 — Bearer is not the owning tenant's operator token. Error
| Field | Type | Notes |
|---|---|---|
| error | string | What went wrong, in one sentence. |
| requestId (optional) | string | Present once the gateway is live: the X-Request-Id of the failed request. |
Example
curl -s -X POST "https://skoor.ai/risk/api/skoor/backfill/a1e0c2d4-6b7f-4d8e-9a3b-0c1d2e3f4a55" \ -H "Authorization: Bearer test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"