Submit a bulk-delivery job for branches
Queues an ECS task that dumps every matching branches document to S3 in the requested format. Returns 202 with a jobId; poll GET /v1/branches/bulk-delivery/{jobId} for status + the signed download URL.
Row limit. Deliveries of up to 5,000 rows need no entitlement. Above that, the org's bulk-delivery.branches entitlement is required and its scope (row ceiling, row filters, allowed fields) governs the delivery; without it the request is rejected with 403 entitlement_missing. Pass limit at or below the ceiling to deliver a capped subset of a broader query. Email support@modelmatch.com to request a limit increase.
Delivery is billed at 1 credit per row regardless of entitlement (deliveries submitted from the ModelMatch web app are not billed).
Push-target destination. Pass destination: { type: "push-target", targetId } to have the finished rows sent to a configured push target instead of downloaded. The target is checked before anything is queued; a refusal returns the push target's status and code (TARGET_NOT_FOUND 404, FORBIDDEN 403, PLAN_REQUIRED 402, TARGET_DISABLED 409, ENTITY_MISMATCH 400). Limits and billing are the same as a file delivery.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/branches/bulk-delivery" \ -H "Content-Type: application/json" \ -d '{}'{
"billing": "credits",
"destination": {
"targetId": "string",
"type": "push-target"
},
"entityType": "string",
"estimatedTotal": 0,
"format": "parquet",
"jobId": "string",
"maxRows": 1,
"status": "queued"
}{
"error": "string"
}{
"error": "string"
}{
"balance": 0,
"cost": 0,
"error": "payment_required",
"message": "string",
"reason": "out_of_credits"
}{
"entitlementKey": "string",
"error": "entitlement_missing",
"estimatedTotal": 0,
"maxRows": 1,
"message": "string"
}{
"code": "TARGET_NOT_FOUND",
"error": "TARGET_NOT_FOUND",
"message": "string"
}{
"code": "TARGET_NOT_FOUND",
"error": "TARGET_NOT_FOUND",
"message": "string"
}{
"error": "string"
}Search branches with filters POST
Search NMLS-registered mortgage company branch offices (not real estate offices — use listOffices for those). Returns branch name, address, parent company, managers, and NMLS ID. Each row carries branch-level production metrics for the selected period. If you only need how many branches match and not the records themselves, send the same request body to `countBranches`.
Cancel a bulk-delivery job for companies DELETE
Cancels a queued or running companies delivery job. The job is marked `cancelled` immediately; the container running it notices on its next page boundary and stops. Because a delivery is billed once, at the end, **a cancelled job is never charged** — no credits are debited and there is nothing to refund. No partial file is written. Idempotent-ish: cancelling a job that has already finished (or was already cancelled) returns 409 and changes nothing. Poll `GET /v1/companies/bulk-delivery/{jobId}` for the settled state.