TrustField
Sandbox live on trustfield.caProgram operations and evidence for regulated programs — drift caught in CI and receipts; licensed partners remain settlement party of record.Program ops · evidence, not settlement
Start free sandboxTrustField
Governance software and REST APIs on sandbox programs — register for a TF program ID, run /trade, then wire checklist gates and partner handoff. Your licensed MSB remains settlement party of record.
5
Program templates
5+
Program event types
10+
Adapter integrations
<2s
Sandbox ack target
One program layer for intake, checklist, status, and exports — fewer portals and spreadsheets as corridors scale.
TF program IDs, event history, and export bundles your MLRO can defend — citations in API responses and diligence exports.
Self-serve sandbox on trustfield.ca — register, poll status, and create handoff records in minutes without a sales call.
Pick a program template, register for a TF program ID, connect your settlement partner. Your program connector is exercising the API loop in minutes.
MSB corridor, B2B payout, embedded finance, or technical sandbox — each maps to checklist gates and export bundles.
Browse templates →POST /api/register assigns TF-######, opens RPAA checklist, and records program.created in the immutable ledger.
Start sandbox →Create payload-free handoff records, poll reconciliation.json for breaks, and deliver audit exports to your MLRO stack.
Reconciliation API →From handoff-record creation to compliance export — workflow state and evidence without custody or settlement on TrustField.
Program event
handoff_record.created · TF-000042 · INS-000128
State + evidence
Checklist % · adapter ack · program_events ledger
Operator export
GET /api/register/{id}/audit.json
Partner / MLRO
Webhook · diligence brief · compliance report
Pre-built program paths covering MSB corridors, B2B payout, and technical sandbox evaluation.
MSB corridor program
Intake · checklist · partner map
→ Licensed MSB settlement
B2B payout program
Program ops · evidence export
→ Enterprise treasury handoff
Embedded finance
TF program ID · branded intake
→ Partner MSB of record
RPAA readiness track
Dual-track checklist
→ FINTRAC + BoC narrative
Technical sandbox
Full API loop
→ Engineering evaluation
Evidence and workflow for regulated payment programs — partners execute settlement; TrustField exports state.
Canada · AML / MSB
Audit JSON · CSV · HTML compliance report
Canada · RPAA / PSP path
Diligence brief · checklist export
Program operator
reconciliation.json · program_events
Program intelligence
Evidence-backed entity lineage for regulated programs — link TF program IDs to operators, settlement partners, and adapter handoffs with provenance metadata. Not on-chain wallet attribution.
12+
Program entity categories
3
Delivery modes
Yes
Provenance per entity
Real-time
Ledger refresh
Every program party includes provenance: intake fields, partner slug, handoff providers, and adapter health — suitable for MLRO review and exam export.
REST APIs, audit.json batch exports, and webhook program_events — integrate into your TM stack without replacing your analytics vendor.
Categories expand with Integration Program scope — corridor programs, B2B payout, embedded finance, and RPAA readiness tracks.
Structured categories for regulated payment programs — not darknet or mixer wallet labels.
Real-time
GET /api/register/{id}/entity-lineage.json
Batch
GET /api/register/{id}/audit.json
Events
program_events webhook stream
OpenAPI, curl recipes, and webhook samples — sandbox loop without a sales call.
{ "full_name": "Sample MSB Program", "email": "ops@partner-msb.ca", "corridor": "CA", "settlement_path": "fiat", "partner_slug": "demo-msb-tor", "consent_accepted": true}→ { "program_id": "TF-000042" }
Illustrative TF-000042 — your register response will differ.
Base URL
https://api.trustfield.ca
Core object
Every program receives a TF program ID (for example TF-000042). Individual handoff records use an INS handoff record ID.
Auth
In production, operators use X-Admin-Token and partners use X-Partner-Token.
Complete the sandbox loop from register → status → checklist without a sales call.
Register program intake
Returns TF-###### program ID and pending status.
curl -s -X POST "$BASE/api/register" -H "Content-Type: application/json" -d '{"full_name":"Program Operator","email":"ops@example.com","corridor":"CA-CAD","consent_accepted":true,"registration_type":"program"}'Poll program status
Lifecycle, handoff record count, and recent events.
curl -s "$BASE/api/register/TF-000042" | jq .lifecycle,.instruction_count,.recent_events
Update checklist item
Operator workflow — mark RPAA checklist steps complete.
curl -s -X PATCH "$BASE/api/checklist/TF-000042/items/rpaa-01" -H "Content-Type: application/json" -d '{"status":"complete"}'Program reconciliation
Break detection — checklist vs handoff records vs event ledger.
curl -s "$BASE/api/register/TF-000042/reconciliation.json" -H "X-Admin-Token: $ADMIN_TOKEN" | jq .aligned,.break_count,.breaks
Program health score
Operator readiness index — not credit scoring.
curl -s "$BASE/api/register/TF-000042/program-health.json" -H "X-Admin-Token: $ADMIN_TOKEN" | jq .health_score,.grade,.summary
Program entity lineage
Evidence-backed party attribution — not wallet labeling.
curl -s "$BASE/api/register/TF-000042/entity-lineage.json" -H "X-Admin-Token: $ADMIN_TOKEN" | jq .entity_count,.entities
Program entity categories
Public category taxonomy for program parties.
curl -s "$BASE/api/program-entity-categories" | jq .count,.categories[0]
Webhook event sample
Ops and evidence hooks — handoff.prepared, handoff_record.created, and related program events.
{
"event": "handoff_record.created",
"program_id": "TF-000042",
"handoff_ref": "INS-000128",
"timestamp": "2026-06-13T12:00:00Z"
}Event catalog
| Event | When it fires |
|---|---|
| program.created | After successful intake |
| portal.verify.completed | Customer verification step complete |
| handoff.prepared | Payload-free handoff checkpoint prepared |
| handoff_record.created | Payload-free handoff record created |
| handoff_record.updated | Partner reports completion status |
Register response sample
{
"id": 42,
"program_id": "TF-000042",
"full_name": "Program Operator Ltd",
"email": "integration@example.com",
"corridor": "CA-CAD",
"status": "pending",
"registration_type": "program",
"message": "Program intake received. Program ID TF-000042 is pending."
}Adapter health and venue catalog stubs — production partner handoff scoped by Integration Program SOW.
GET /api/integrations/health — adapter configuration (no secrets exposed)
{
"adapters": [
{
"provider": "identity_partner",
"configured": false,
"message": "set IDENTITY_PARTNER_API_KEY"
},
{
"provider": "pay_partner",
"configured": false,
"message": "set PAY_PARTNER_API_KEY and PAY_PARTNER_API_SECRET"
},
{
"provider": "venue_a",
"configured": false,
"message": "set VENUE_A_API_KEY, VENUE_A_API_SECRET, VENUE_A_API_PASSPHRASE"
},
{
"provider": "venue_b",
"configured": false,
"message": "demo mode — sandbox simulation available"
},
{
"provider": "venue_c",
"configured": false,
"message": "demo mode — sandbox simulation available"
},
{
"provider": "venue_d",
"configured": false,
"message": "demo mode — sandbox simulation available"
},
{
"provider": "venue_e",
"configured": false,
"message": "demo mode — sandbox simulation available"
},
{
"provider": "venue_f",
"configured": false,
"message": "demo mode — sandbox simulation available"
},
{
"provider": "venue_g",
"configured": false,
"message": "demo mode — sandbox simulation available"
},
{
"provider": "venue_h",
"configured": false,
"message": "demo mode — sandbox simulation available"
},
{
"provider": "venue_i",
"configured": false,
"message": "demo mode — sandbox simulation available"
},
{
"provider": "venue_j",
"configured": false,
"message": "demo mode — sandbox simulation available"
}
]
}GET /api/venues — integration patterns (public labels only)
{
"count": 10,
"demo_mode": true,
"venues": [
{
"public_label": "Market access A",
"tier": "P0",
"configured": false,
"sandbox_ready": false,
"live_sandbox": false,
"message": "set VENUE_A_API_KEY, VENUE_A_API_SECRET, VENUE_A_API_PASSPHRASE",
"mode": "demo"
},
{
"public_label": "Market access B",
"tier": "P1",
"configured": false,
"sandbox_ready": true,
"live_sandbox": false,
"message": "demo mode — sandbox simulation available",
"mode": "demo"
},
{
"public_label": "Market access C",
"tier": "P1",
"configured": false,
"sandbox_ready": true,
"live_sandbox": false,
"message": "demo mode — sandbox simulation available",
"mode": "demo"
},
{
"public_label": "Market access D",
"tier": "P1",
"configured": false,
"sandbox_ready": true,
"live_sandbox": false,
"message": "demo mode — sandbox simulation available",
"mode": "demo"
},
{
"public_label": "Market access E",
"tier": "P1",
"configured": false,
"sandbox_ready": true,
"live_sandbox": false,
"message": "demo mode — sandbox simulation available",
"mode": "demo"
},
{
"public_label": "Market access F",
"tier": "P1",
"configured": false,
"sandbox_ready": true,
"live_sandbox": false,
"message": "demo mode — sandbox simulation available",
"mode": "demo"
},
{
"public_label": "Market access G",
"tier": "P1",
"configured": false,
"sandbox_ready": true,
"live_sandbox": false,
"message": "demo mode — sandbox simulation available",
"mode": "demo"
},
{
"public_label": "Market access H",
"tier": "P1",
"configured": false,
"sandbox_ready": true,
"live_sandbox": false,
"message": "demo mode — sandbox simulation available",
"mode": "demo"
},
{
"public_label": "Market access I",
"tier": "P1",
"configured": false,
"sandbox_ready": true,
"live_sandbox": false,
"message": "demo mode — sandbox simulation available",
"mode": "demo"
},
{
"public_label": "Market access J",
"tier": "P1",
"configured": false,
"sandbox_ready": true,
"live_sandbox": false,
"message": "demo mode — sandbox simulation available",
"mode": "demo"
}
]
}