SKOOR Risk Money movement. Skoored by AI.

Policy

The automated-or-reviewed line, decision clocks, the limit ladder, program autonomy.

Policy is versioned data, never code: which detectors the platform may close alone and in which band, the history floor, which actions need two approvers, how long each SLA tier may wait, the per-band caps for entities and counterparties, and a per-program autonomy tier that widens only after the labelled set shows a detector is safe (and narrows on its own when overturns rise). Every alert and disposition records the policy version in force.

Policy

FieldTypeNotes
idstring (uuid)
tenantIdstring (uuid)
programIdstring | null (uuid)null = tenant-wide; set = a program's autonomy tier / limits.
versionstring
bodyobjectPolicyBody, ClockPolicy, LimitLadder or a program autonomy body, by version prefix.
activeboolean
createdAtstring (date-time)

PolicyBody

FieldTypeNotes
versionstring
autoClosableDetectorsstring[]Detectors the platform may close alone.
autoCloseBands"clear" | "review" | "hold" | "unscored"[]v1: clear only.
minProgramNintegerHistory floor for any automated decision.
alwaysReviewedstring[]
twoApproverActions"clear_hold" | "cancel_transfer" | "pause_card" | "suspend_card_account" | "freeze_account" | "request_to_program" | "periodic_review"[]
holdBandAutoHoldbooleanHold band → held before anyone decides.

ClockPolicy

Hours a decision may wait, by SLA tier. Defaults 1 / 24 / 72 / 168.

FieldTypeNotes
autoHoursnumber
standardHoursnumber
complexHoursnumber
appealHoursnumber

LimitLadder

FieldTypeNotes
counterpartyLadder
entityLadder
rescreenDaysobjectRe-screen cadence by band.
rescreenDays.clearinteger
rescreenDays.reviewinteger
rescreenDays.holdinteger
rescreenDays.unscoredinteger

LimitEvaluation

FieldTypeNotes
hitsLimitHit[]
hardbooleanTrue when any hit is hard (an actor in the hold band).
bandsobject
bands.entity"clear" | "review" | "hold" | "unscored" | null
bands.counterparty"clear" | "review" | "hold" | "unscored" | null
rescreenobject
rescreen.entityobject | null
rescreen.counterpartyobject | null
ladderLimitLadder

ProgramAutonomy

FieldTypeNotes
programIdstring (uuid)
tier"supervised" | "standard" | "trusted"
versionstring | nullActive program version; null = policy v1 only.
grantedstring[]
effectivePolicyBody
eligibilityDetectorEligibility[]
lastChangeAtstring | null (date-time)
nextChangeAllowedAtstring | null (date-time)Cadence: one widening per week.
historyobject[]
history[].versionstring
history[].createdAtstring (date-time)
history[].bodyProgramPolicyBody
history[].activeboolean

Endpoints

get/api/limits/ladder

The tenant's limit ladder

AuthBearer + X-Operator
OperationPolicy · GET /api/limits/ladder

Parameters

NameInTypeNotes
tenant (optional)querystringTenant slug. Optional: the bearer token already proves the tenant. Pass it to be explicit.

Responses

200 — Per-band caps for counterparties and entities and the re-screen cadence; the default ladder when the tenant has not written one. LimitLadder

FieldTypeNotes
counterpartyLadder
entityLadder
rescreenDaysobjectRe-screen cadence by band.
rescreenDays.clearinteger
rescreenDays.reviewinteger
rescreenDays.holdinteger
rescreenDays.unscoredinteger

401 — Bearer token missing or unknown. Error

FieldTypeNotes
errorstringWhat went wrong, in one sentence.
requestId (optional)stringPresent once the gateway is live: the X-Request-Id of the failed request.

Example

curl -s "https://skoor.ai/risk/api/limits/ladder?tenant=demo" \
  -H "Authorization: Bearer test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "X-Operator: you@bank.example"

get/api/limits/evaluate

Evaluate an amount against the ladder

AuthBearer + X-Operator
OperationPolicy · GET /api/limits/evaluate

Parameters

NameInTypeNotes
tenant (optional)querystringTenant slug. Optional: the bearer token already proves the tenant. Pass it to be explicit.
programId (optional)querystring (uuid)Program id.
amountCents (optional)querystringInteger cents.
entityId (optional)querystringEntity to evaluate, if any.
counterpartyId (optional)querystringCounterparty to evaluate, if any.

Responses

200 — Limit hits (hard when an actor is in the hold band), the actors' bands, their re-screen cadence and the ladder used. LimitEvaluation

FieldTypeNotes
hitsLimitHit[]
hardbooleanTrue when any hit is hard (an actor in the hold band).
bandsobject
bands.entity"clear" | "review" | "hold" | "unscored" | null
bands.counterparty"clear" | "review" | "hold" | "unscored" | null
rescreenobject
rescreen.entityobject | null
rescreen.counterpartyobject | null
ladderLimitLadder

400 — programId and amountCents required. Error

FieldTypeNotes
errorstringWhat went wrong, in one sentence.
requestId (optional)stringPresent once the gateway is live: the X-Request-Id of the failed request.

401 — Bearer token missing or unknown. Error

FieldTypeNotes
errorstringWhat went wrong, in one sentence.
requestId (optional)stringPresent once the gateway is live: the X-Request-Id of the failed request.

Example

curl -s "https://skoor.ai/risk/api/limits/evaluate?tenant=demo&programId=a1e0c2d4-6b7f-4d8e-9a3b-0c1d2e3f4a55&amountCents=185000&entityId=enti_sim_acme&counterpartyId=cpty_sim_1" \
  -H "Authorization: Bearer test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "X-Operator: you@bank.example"

get/api/autonomy/{programId}

A program's autonomy tier and eligibility

AuthBearer + X-Operator
OperationPolicy · GET /api/autonomy/{programId}

Parameters

NameInTypeNotes
programIdpathstring (uuid)Program id.
tenant (optional)querystringTenant slug. Optional: the bearer token already proves the tenant. Pass it to be explicit.

Responses

200 — Tier, granted detectors, the effective policy, per-detector eligibility from the last 30 days of person decisions, and the version history. ProgramAutonomy

FieldTypeNotes
programIdstring (uuid)
tier"supervised" | "standard" | "trusted"
versionstring | nullActive program version; null = policy v1 only.
grantedstring[]
effectivePolicyBody
eligibilityDetectorEligibility[]
lastChangeAtstring | null (date-time)
nextChangeAllowedAtstring | null (date-time)Cadence: one widening per week.
historyobject[]
history[].versionstring
history[].createdAtstring (date-time)
history[].bodyProgramPolicyBody
history[].activeboolean

401 — Bearer token missing or unknown. Error

FieldTypeNotes
errorstringWhat went wrong, in one sentence.
requestId (optional)stringPresent once the gateway is live: the X-Request-Id of the failed request.

404 — Unknown program on this tenant. Error

FieldTypeNotes
errorstringWhat went wrong, in one sentence.
requestId (optional)stringPresent once the gateway is live: the X-Request-Id of the failed request.

Example

curl -s "https://skoor.ai/risk/api/autonomy/a1e0c2d4-6b7f-4d8e-9a3b-0c1d2e3f4a55?tenant=demo" \
  -H "Authorization: Bearer test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "X-Operator: you@bank.example"

post/api/autonomy/{programId}/activate

Grant a detector to the automated side

Needs an eligible detector (≥10 person decisions in 30 days, ≥90% matching the draft, none of the never-automate set) and a second approver distinct from X-Operator; at most one widening per week. Writes a new program policy version on the record.

AuthBearer + X-Operator
OperationPolicy · POST /api/autonomy/{programId}/activate

Parameters

NameInTypeNotes
programIdpathstring (uuid)Program id.
tenant (optional)querystringTenant slug. Optional: the bearer token already proves the tenant. Pass it to be explicit.
Idempotency-Key (optional)headerstring1–255 characters. A replay with the same body returns the stored status and body with Idempotent-Replayed: true; a different body under the same key is 409.

Request body (application/json, required) · object

FieldTypeNotes
detectorstring
approverIdstring

Responses

201 — The new version and tier. object

FieldTypeNotes
versionstring
tier"supervised" | "standard" | "trusted"
grantedstring[]

400 — detector and approverId required. Error

FieldTypeNotes
errorstringWhat went wrong, in one sentence.
requestId (optional)stringPresent once the gateway is live: the X-Request-Id of the failed request.

401 — Bearer token missing or unknown. Error

FieldTypeNotes
errorstringWhat went wrong, in one sentence.
requestId (optional)stringPresent once the gateway is live: the X-Request-Id of the failed request.

404 — Unknown program on this tenant. Error

FieldTypeNotes
errorstringWhat went wrong, in one sentence.
requestId (optional)stringPresent once the gateway is live: the X-Request-Id of the failed request.

409 — Refused: not eligible, same approver, cadence, or never-automate. Error

FieldTypeNotes
errorstringWhat went wrong, in one sentence.
requestId (optional)stringPresent once the gateway is live: the X-Request-Id of the failed request.

Example

curl -s -X POST "https://skoor.ai/risk/api/autonomy/a1e0c2d4-6b7f-4d8e-9a3b-0c1d2e3f4a55/activate?tenant=demo" \
  -H "Authorization: Bearer test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "X-Operator: you@bank.example" \
  -H "Content-Type: application/json" \
  -d '{"detector":"repeat_pattern","approverId":"second.approver@bank.example"}'

post/api/autonomy/{programId}/demote

Run the demotion check now

Narrows the automated side for any granted detector whose overturn rate in the window is above 10%. The same check runs every 15 minutes.

AuthBearer + X-Operator
OperationPolicy · POST /api/autonomy/{programId}/demote

Parameters

NameInTypeNotes
programIdpathstring (uuid)Program id.
tenant (optional)querystringTenant slug. Optional: the bearer token already proves the tenant. Pass it to be explicit.

Responses

200 — Detectors demoted (empty when nothing changed) and the version written, if any. object

FieldTypeNotes
demotedstring[]
versionstring | null

401 — Bearer token missing or unknown. Error

FieldTypeNotes
errorstringWhat went wrong, in one sentence.
requestId (optional)stringPresent once the gateway is live: the X-Request-Id of the failed request.

404 — Unknown program on this tenant. Error

FieldTypeNotes
errorstringWhat went wrong, in one sentence.
requestId (optional)stringPresent once the gateway is live: the X-Request-Id of the failed request.

Example

curl -s -X POST "https://skoor.ai/risk/api/autonomy/a1e0c2d4-6b7f-4d8e-9a3b-0c1d2e3f4a55/demote?tenant=demo" \
  -H "Authorization: Bearer test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "X-Operator: you@bank.example"

← All objects