Push API
You build
- A signed HTTPS client (signing)
- A job that pushes new/changed loans (real-time or batched)
We provide
- Validation with per-row errors, dedupe, geocoding, assignment
case.receivedwebhooks + the full event stream- Batch idempotency +
Idempotency-Keyreplay safety
Endpoints
| Method | Path | Purpose |
|---|---|---|
POST | /api/v1/partner/cases | Push a batch (≤1,000 rows). ?dryRun=1 validates without writing. |
GET | /api/v1/partner/cases/{sourceLoanNumber} | Authoritative live snapshot of one case. |
POST | /api/v1/partner/cases/{sourceLoanNumber}/recall | Withdraw a case (borrower paid you directly / restructured). Idempotent. |
Full schemas in the API reference.
Recommended rhythm
- New overdue loans — push as they cross your DPD threshold (or hourly).
- Changes — re-push the row when outstanding/contact/address changes; it updates in place.
- Daily reconciliation — one
fullSnapshot: truepush of your complete active book; anything we hold that's missing from it is flagged both sides. - Recalls — call recall the moment a borrower settles with you directly, so no partner makes a wasted (and borrower-annoying) visit.
Response shape
{
"success": true,
"dryRun": false,
"batchId": "…",
"summary": { "totalRowsInCsv": 200, "validRows": 198, "created": 150, "updatedSnapshot": 40, "unchanged": 8, "errored": 2 },
"errors": [ { "index": 17, "sourceLoanNumber": "LN-…", "reason": "borrower.phone: invalid_mobile" } ]
}
Rows fail individually — one bad phone number never blocks the batch.