Step 1: Set your API key
All requests require the x-api-key header. Use sk_test_* keys during development.
x-api-key: sk_test_your_api_key_here
Sandbox keys (sk_test_*) create real data but Metro 2 files never reach bureaus. Use them freely during development.
Step 2: Create a consumer
Register the individual whose payments you’ll report.
curl -X POST https://vvdufluovypptsnkihyv.supabase.co/functions/v1/consumers \
-H "x-api-key: sk_test_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"first_name": "Jane",
"last_name": "Doe",
"date_of_birth": "1990-05-15",
"ssn": "123-45-6789",
"phone": "+15551234567",
"email": "[email protected]",
"address": {
"street": "123 Main St",
"city": "Austin",
"state": "TX",
"postal_code": "73301",
"country": "US"
},
"external_id": "sp-user-001"
}'
{
"id": "d1ba6184-b708-4e76-91fc-85dd6443c890",
"first_name": "Jane",
"last_name": "Doe",
"middle_name": null,
"date_of_birth": "1990-05-15",
"phone": "+15551234567",
"email": "[email protected]",
"address": {
"street": "123 Main St",
"city": "Austin",
"state": "TX",
"postal_code": "73301",
"country": "US"
},
"external_id": "sp-user-001",
"created_at": "2026-02-16T06:16:47.385307+00:00",
"updated_at": "2026-02-16T06:16:47.385307+00:00"
}
The SSN is encrypted at rest and never returned in any API response. Save the id for creating tradelines.
Step 3: Create a tradeline
A tradeline represents an ongoing payment obligation being reported to credit bureaus.
curl -X POST https://vvdufluovypptsnkihyv.supabase.co/functions/v1/tradelines \
-H "x-api-key: sk_test_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"consumer_id": "d1ba6184-b708-4e76-91fc-85dd6443c890",
"payment_type": "child_support",
"payment_type_label": "Monthly Child Support",
"account_opened_date": "2025-01-01",
"payment_amount": 150000,
"payment_frequency": "monthly",
"ecoa_code": "individual",
"metro2_account_type": "installment",
"report_to_bureaus": ["equifax", "transunion", "experian"]
}'
{
"id": "9c843590-8552-4490-a50c-f0cc413d8b69",
"consumer_id": "d1ba6184-b708-4e76-91fc-85dd6443c890",
"partner_id": "b3937f42-ca94-469d-a318-75fd149b3dfe",
"payment_type": "child_support",
"payment_type_label": "Monthly Child Support",
"account_status": "current",
"current_balance": 0,
"amount_past_due": 0,
"payment_history": "",
"is_active": true,
"created_at": "2026-02-16T06:16:56.200531+00:00",
"updated_at": "2026-02-16T06:16:56.200531+00:00"
}
payment_amount is in cents. $1,500.00 = 150000. Save the tradeline id for payment reporting.
Step 4: Report a payment
Each month, report payments against the tradeline. The API automatically updates the tradeline’s status, balance, and payment history.
curl -X POST https://vvdufluovypptsnkihyv.supabase.co/functions/v1/payments \
-H "x-api-key: sk_test_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"tradeline_id": "9c843590-8552-4490-a50c-f0cc413d8b69",
"payment_date": "2026-02-01",
"period_start": "2026-02-01",
"period_end": "2026-02-28",
"amount_due": 150000,
"amount_paid": 150000,
"payment_status": "on_time"
}'
{
"id": "1bedd1b0-aadd-4d0e-8d23-68b2f9d30efb",
"tradeline_id": "9c843590-8552-4490-a50c-f0cc413d8b69",
"payment_date": "2026-02-01",
"period_start": "2026-02-01",
"period_end": "2026-02-28",
"amount_due": 150000,
"amount_paid": 150000,
"payment_status": "on_time",
"reported": false,
"reported_at": null,
"external_payment_id": null,
"created_at": "2026-02-16T06:17:02.898846+00:00",
"tradeline_status": {
"account_status": "current",
"current_balance": 0,
"amount_past_due": 0,
"payment_history": "0"
}
}
The tradeline_status shows the auto-updated fields. The payment_history value "0" means “current” for this month.
What’s next?