Developer hub

Program intake → verify → fund → route instructions. API schema: /api/openapi.json (interactive UI in non-production: /api/docs).

Developer API

Base URL
https://api.trustfield.ca

Core object
TF reference — every program gets TF-######; instructions use INS-########

Events
program.created · portal.verify.completed · fund.initiated · instruction.submitted · instruction.filled

Auth
Production: X-Admin-Token (operator) · X-Partner-Token (partner scope)

Quickstart (3 calls)

  1. Step 1: Open program POST /api/register

    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"}'
  2. Step 2: Verify + fund (sandbox) POST /api/register/TF-######/portal-step

    curl -s -X POST "$BASE/api/register/TF-000042/portal-step" -H "Content-Type: application/json" -d '{"step":"verify"}'
    curl -s -X POST "$BASE/api/register/TF-000042/portal-step" -H "Content-Type: application/json" -d '{"step":"fund"}'
  3. Step 3: Submit instruction POST /api/instructions

    curl -s -X POST "$BASE/api/instructions" -H "Content-Type: application/json" \
      -H "Idempotency-Key: demo-0001" \
      -d '{"reference":"TF-000042","provider":"ndax","action":"submit_order","payload":{"side":"buy","asset":"BTC","amount":"0.01"}}' | jq .

API — intake response

Structured TF references and JSON status for integrations. API schema (/api/openapi.json) · /developers

{
  "id": 42,
  "reference": "TF-000042",
  "full_name": "Program Operator Ltd",
  "email": "integration@example.com",
  "corridor": "CA-CAD",
  "status": "pending",
  "registration_type": "program",
  "message": "Program intake received. Reference TF-000042 is pending."
}
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"}'

Core endpoints

  • GET /api/register/{ref}Program status

    curl -s "$BASE/api/register/TF-000042" | jq .lifecycle,.instruction_count,.recent_events
  • GET /api/programs/{ref}Program alias

    curl -s "$BASE/api/programs/TF-000042" | jq .
  • GET /api/programs/{ref}/instructionsList instructions

    curl -s "$BASE/api/programs/TF-000042/instructions" | jq .
  • GET /api/programs/{ref}/eventsEvent stream

    curl -s "$BASE/api/programs/TF-000042/events?limit=20" | jq .
  • GET /api/register/{ref}/audit.jsonAudit export

    curl -s "$BASE/api/register/TF-000042/audit.json" -H "X-Admin-Token: $ADMIN_TOKEN" | jq .

Webhooks (partner → TrustField)

  • POST /api/webhooks/truliooTruliooHeader: X-Trulioo-Signature
  • POST /api/webhooks/vopayVoPayHeader: X-Vopay-Signature

Integration health

GET /api/integrations/health — adapter configuration (no secrets).

{
  "adapters": [
    {
      "provider": "aquanow",
      "configured": false,
      "message": "demo mode — sandbox simulation available"
    },
    {
      "provider": "banxa",
      "configured": false,
      "message": "demo mode — sandbox simulation available"
    },
    {
      "provider": "bitbuy",
      "configured": false,
      "message": "demo mode — sandbox simulation available"
    },
    {
      "provider": "bullbitcoin",
      "configured": false,
      "message": "demo mode — sandbox simulation available"
    },
    {
      "provider": "coinbase_cdp",
      "configured": false,
      "message": "demo mode — sandbox simulation available"
    },
    {
      "provider": "coinsquare",
      "configured": false,
      "message": "demo mode — sandbox simulation available"
    },
    {
      "provider": "kraken_embed",
      "configured": false,
      "message": "demo mode — sandbox simulation available"
    },
    {
      "provider": "ndax",
      "configured": false,
      "message": "set NDAX_API_KEY and NDAX_API_SECRET"
    },
    {
      "provider": "paytrie",
      "configured": false,
      "message": "demo mode — sandbox simulation available"
    },
    {
      "provider": "trulioo",
      "configured": false,
      "message": "set TRULIOO_API_KEY"
    },
    {
      "provider": "virgocx",
      "configured": false,
      "message": "demo mode — sandbox simulation available"
    },
    {
      "provider": "vopay",
      "configured": false,
      "message": "set VOPAY_API_KEY and VOPAY_API_SECRET"
    }
  ]
}

Market access catalog

GET /api/venues — 10+ 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 NDAX_API_KEY and NDAX_API_SECRET",
      "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"
    }
  ]
}

Optional modules

  • GET /api/corridorsCorridors
  • GET /api/execution-partnersExecution partners
  • GET /api/checklist/{ref}Checklist
  • GET /api/readinessReadiness