Risk Analyst
The Risk Analyst screens for fraud and abuse, holds suspect Parties, and keeps dispute rates under their Limits.
It holds one seat on the Operations Team and reports to the Operations Lead.
Responsibilities
- Scores each new Customer for fraud before their first money move.
- Holds suspect Parties and records the reason.
- Answers each disputed Order with its delivery record.
- Applies the runaway-volume brake when sends or spend spike.
Verbs
Reads: Risk.list.
Tools: enrichment, payments, audit-log.
Role contract
| Part | This seat |
|---|---|
| Purpose | So fraud and abuse cost the Startup less than its Limits allow. |
| Results | Fraud loss rate |
| Standards | Reviews every held Order within one business hour. Records the reason for every block. |
| Processes owned | Upstream review, Risk assessment |
| Limits | Action.cancel up to 50 calls per day |
| Autonomy | assist; supervised on Low decisions |
| Schedule | hourly |
| Also called | Fraud Analyst, Trust and Safety Analyst |
| Filled by | A role agent, from the start; a person answers its Approvals. |
Hands off to
Escalates to Operations Lead.
Processes owned
Accountable for Upstream review and Risk assessment.
Metrics
The seat answers to its Team's Metrics: on-time delivery, first-pass acceptance, open capacity, dispute rate and task age.
Approvals
- Asks first. An Action above the seat's Limit opens an Approval for the Operations Lead and waits.
Filled by
A role agent fills the seat in every new Startup. Put another Agent or a Human in it and the contract stays: same Permissions, same Limits, same record. Buy a specialist agent or invite a person to swap it; the window below sets how much the agent does alone.
Set how much the Risk Analyst agent does without asking.
Show me what the Risk Analyst agent did this week.
# 1. Role.update
curl -X PATCH https: //api.sb/ leaseline.app/ roles/ risk-analyst \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/ json" \
-d '{"name": "Risk Analyst", "autonomy": {"default": "assist", "byClass": {"low": "supervised"}}}'
# 2. Action.list
curl "https: //api.sb/ leaseline.app/ actions? limit= 50& where= by%20%3D%20%22agent_risk_analyst%22%20and%20createdAt%20%3E%3D%20%222026-10-16%22& sort= -createdAt" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'
await $.Role.update({ id: 'risk-analyst', name: 'Risk Analyst', autonomy: { default: 'assist', byClass: { low: 'supervised' } } })
await $.Action.list({ limit: 50, where: 'by = "agent_risk_analyst" and createdAt >= "2026-10-16"', sort: '-createdAt' })
npx startup-builder do Role.update --json '{"id": "risk-analyst", "name": "Risk Analyst", "autonomy": {"default": "assist", "byClass": {"low": "supervised"}}}'
npx startup-builder do Action.list --json '{"limit": 50, "where": "by = \"agent_risk_analyst\" and createdAt >= \"2026-10-16\"", "sort": "-createdAt"}'
{
"name": "do",
"arguments": {
"code": "await $.Role.update({ id: 'risk-analyst', name: 'Risk Analyst', autonomy: { default: 'assist', byClass: { low: 'supervised' } } })\nreturn await $.Action.list({ limit: 50, where: 'by = \"agent_risk_analyst\" and createdAt >= \"2026-10-16\"', sort: '-createdAt' })"
}
}
Example
In a data Startup, the Risk Analyst Agent is named Remy. A new Customer signs up from a disposable address and makes 9,000 calls in its first minute. Remy holds the Party and records the reason; the hold lifts when the Party verifies.