Send a customer/application list in one request. Finosu processes the list in the background and reports each row’s outcome.
Send the list to POST /customers/batch with scheduleMode: "enroll".
Finosu stores the upload, divides it into internal chunks, and enrolls each
application using the same cadence and validation rules as
individual enrollment.
Your integration does not need to make one request per application.Use one company API key per list. That key selects the company and its configured
portfolio; body fields cannot select a different company or enable another cadence.
Send a list
Use a stable Idempotency-Key header for the whole list and a stable
idempotencyKey in each row for that enrollment operation. These are different
keys with different purposes. Keep customer and application references consistent
across API requests.
The example combines two modes. Each must be enabled for the authenticated
company. Unsupported modes fail for the affected rows; they do not enable new
portfolio capabilities. Returning borrowers without oneOff can include
daysSincePaidOff for the existing returning cadence.Row fields follow the enrollment field contract,
plus the required idempotencyKey. Row-level scheduleMode can be omitted;
if present it must be "enroll". The outer scheduleMode is always required.Send isTest for test enrollments. An explicit null flag fails only the affected row. Omitting
isTest defaults to false.
Always send the outer scheduleMode: "enroll". The existing customer-create
workflow uses this URL without a mode. Enrollment row keys without the outer
mode are rejected to prevent accidental customer-create processing.
A successful submission returns HTTP 202, Location, and a job ID:
{ "jobId": "550e8400-e29b-41d4-a716-446655440000", "totalCustomers": 2, "message": "Batch accepted. Poll Location for progress and per-row results; acceptance does not mean enrollment has completed."}
Poll the Location URL with the same company’s API key. Start with a few seconds
between polls and increase the interval for longer-running jobs.
status: pending, processing, completed, failed, or cancelled.
processed: successfully handled rows, including saved receipt replays and
applications that were already scheduled.
failed: rejected rows or rows that exhausted processing retries.
progressPercentage: handled rows divided by the submitted count.
results: outcomes ordered by the original zero-based index. Each includes
customerId, loanId, status, replayed, and retryable. Successful rows
include the origination receipt; failures include code and message.
failures: the failed rows with their original index, customer reference,
and message, for compatibility with existing batch clients.
Results appear as rows finish. A terminal completed job can have failed rows
when at least one row succeeded; always inspect failed and results. A job
with no successful rows ends as failed. A failure before the source can be read
may have empty customer/application references; its original index still
identifies the row in your submitted list.A saved schedule does not mean a call has connected. Use the receipt’s
scheduledCallId to inspect the current call status.
Receipts are scheduling snapshots, not current borrower eligibility.
Retry without duplicate enrollments
Submission timeout or 503: retry the identical ordered list with the
same header key. If accepted previously, the same job is returned with
Idempotency-Replayed: true. A changed list under that key returns 409.
JSON object-key order is ignored; array order and submitted values must match.
Worker interruption: Finosu resumes processing and skips committed row
results. Enrollment and its result are committed together.
Retryable failed row: submit that row in a new list with a new header
key, retaining its original row idempotencyKey and payload. Replaying a
terminal list returns the existing job; it does not restart failed rows.
Invalid row: correct the data and submit a new list. A rejected validation
does not consume an enrollment receipt. If a key has already produced a saved
receipt, changing its enrollment payload returns a conflict.
Contact or application conflict: review the reason before resubmitting.
Enrollment cannot clear DNC, bypass a pause or reopen a terminal application.
Intentional restart: once all calls and their processing have finished,
use a new list key and a new row key for the same application and outreach
mode. Both the loan and captured application must still be PENDING.
The restart rules
apply to both New Lead and Returning Customer. Technical retries must retain
their original keys.
Row keys share the individual enrollment key namespace within the company. A
row submitted through batch and the single-record endpoint with the same key
and normalized enrollment fields returns the same enrollment receipt. Use a
separate row key for each distinct enrollment operation; do not reuse it for
unrelated customers or applications.
Limits and processing behavior
Up to 10,000 records per request and 10 MiB of serialized customer
data. Split larger lists into multiple batches with separate header keys.
Up to 10 batch submissions per minute per company, including submission
retries. Honor Retry-After on 429 and 503.
Finosu processes internal chunks of 25 records in the background. The
single-record endpoint’s 60-request/minute quota does not apply per batch row.
Rows and chunks can finish out of order. The list is not one transaction:
valid rows can succeed while others fail. Do not depend on list order to apply
multiple changes to the same customer.
Invalid envelopes return 422 before queuing. Oversized customer data returns
413. Invalid enrollment fields, disabled modes and application conflicts are
reported per row after acceptance.
The normal scheduler still enforces contact restrictions, calling hours,
phone rotation and the configured transfer routing. Batch intake does not
change those settings or imply immediate calls.
Batch enrollment does not replace the funded/stop workflow or enable LMS notes
and flags. See funded applications.
Multiple applications for one customer
Rows may share the same customer id when each represents a distinct loanId.
Use a different row idempotencyKey for each application and preserve that key
when retrying the same row. Enrollment creates separate loans and cadences without
closing or retargeting older applications. Contact restrictions and call spacing
remain customer-wide. See Returning customers and new applications.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Finosu","colors":{"primary":"#0D43F3","light":"#ECDAFB","dark":"#01071B"},"logo":{"light":"https://mintcdn.com/finosu/wBPuqyDOd8v5F65J/logo/finosu-logo.svg?fit=max\u0026auto=format\u0026n=wBPuqyDOd8v5F65J\u0026q=85\u0026s=b66cc2d6b8e9bed74fe5f4c33e87b063","dark":"https://mintcdn.com/finosu/wBPuqyDOd8v5F65J/logo/finosu-logo-light.svg?fit=max\u0026auto=format\u0026n=wBPuqyDOd8v5F65J\u0026q=85\u0026s=85ceab4cf34faa971189a7d83dc4555f"},"favicon":"https://mintcdn.com/finosu/wBPuqyDOd8v5F65J/favicon.svg?fit=max\u0026auto=format\u0026n=wBPuqyDOd8v5F65J\u0026q=85\u0026s=b13875ae3d830c305f655d4e2f72fe36","navbar":{"links":[{"href":"mailto:[email protected]","label":"Support"}],"primary":{"type":"button","label":"Homepage","href":"https://www.finosu.com"}},"seo":{"metatags":{"canonical":"https://docs.finosu.com"}},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Website","icon":"globe","href":"https://www.finosu.com/"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"finosu","hasAudioNarration":false,"actualSubdomain":"finosu","customDomains":["docs.finosu.com"],"gitSource":{"type":"github","owner":"finosu","repo":"webapp","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af7fb9f8deffcac16fba9be","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"API Reference","count":59},{"language":"default","tag":"Core Resources","count":33},{"language":"default","tag":"Collections","count":16},{"language":"default","tag":"Customers","count":9},{"language":"default","tag":"Origination","count":8},{"language":"default","tag":"Outbound Webhooks","count":7},{"language":"default","tag":"Payments","count":5},{"language":"default","tag":"Loans","count":5},{"language":"default","tag":"Scheduled Calls","count":5},{"language":"default","tag":"Calls","count":4}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/origination/batch","slug":"/api-reference/origination/batch","pageMetadata":{"title":"Enroll a List (Batch)","description":"Send a customer/application list in one request. Finosu processes the list in the background and reports each row’s outcome.","href":"/api-reference/origination/batch"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Send a customer/application list in one request. Finosu processes the list in the background and reports each row’s outcome.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Send the list to `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`POST /customers/batch`})}),` with `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`scheduleMode: \"enroll\"`})}),`.\nFinosu stores the upload, divides it into internal chunks, and enrolls each\napplication using the same cadence and validation rules as\n`,_jsx(_components.a,{href:`/api-reference/endpoint/customers/origination-enrollment`,children:`individual enrollment`}),`.\nYour integration does not need to make one request per application.`]}),`\n`,_jsx(_components.p,{children:`Use one company API key per list. That key selects the company and its configured\nportfolio; body fields cannot select a different company or enable another cadence.`}),`\n`,_jsx(Heading,{level:`2`,id:`send-a-list`,children:`Send a list`}),`\n`,_jsxs(_components.p,{children:[`Use a stable `,_jsx(_components.code,{children:`Idempotency-Key`}),` header for the `,_jsx(_components.strong,{children:`whole list`}),` and a stable\n`,_jsx(_components.code,{children:`idempotencyKey`}),` in each row for that `,_jsx(_components.strong,{children:`enrollment operation`}),`. These are different\nkeys with different purposes. Keep customer and application references consistent\nacross API requests.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`36`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`36`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --request`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.finosu.com/customers/batch'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'X-API-Key: YOUR_API_KEY'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Idempotency-Key: origination-list-2026-09-24-001'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --data`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"scheduleMode\": \"enroll\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"customers\": [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"idempotencyKey\": \"application-1001-enrollment-1\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"id\": \"customer-1001\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"loanId\": \"application-1001\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"taskType\": \"PendingLoanNewLead\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"firstName\": \"Jane\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"lastName\": \"Doe\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"birthday\": \"1985-06-15\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ssnLastFour\": \"1234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"phoneNumber\": \"+15125550100\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"mobilePhone\": \"+15125550101\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"timezone\": \"America/Chicago\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"daysInApplied\": 3`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"idempotencyKey\": \"application-2001-enrollment-1\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"id\": \"customer-2001\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"loanId\": \"application-2001\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"taskType\": \"PendingLoanReturning\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"oneOff\": true,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"firstName\": \"Alex\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"lastName\": \"Smith\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"birthday\": \"1987-04-12\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ssnLastFour\": \"5678\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"phoneNumber\": \"+15125550102\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"timezone\": \"America/Chicago\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The example combines two modes. Each must be enabled for the authenticated\ncompany. Unsupported modes fail for the affected rows; they do not enable new\nportfolio capabilities. Returning borrowers without `,_jsx(_components.code,{children:`oneOff`}),` can include\n`,_jsx(_components.code,{children:`daysSincePaidOff`}),` for the existing returning cadence.`]}),`\n`,_jsxs(_components.p,{children:[`Row fields follow the `,_jsx(_components.a,{href:`/api-reference/endpoint/customers/origination-enrollment#fields`,children:`enrollment field contract`}),`,\nplus the required `,_jsx(_components.code,{children:`idempotencyKey`}),`. Row-level `,_jsx(_components.code,{children:`scheduleMode`}),` can be omitted;\nif present it must be `,_jsx(_components.code,{children:`\"enroll\"`}),`. The outer `,_jsx(_components.code,{children:`scheduleMode`}),` is always required.`]}),`\n`,_jsxs(_components.p,{children:[`Send `,_jsx(_components.code,{children:`isTest`}),` for test enrollments. An explicit `,_jsx(_components.code,{children:`null`}),` flag fails only the affected row. Omitting\n`,_jsx(_components.code,{children:`isTest`}),` defaults to `,_jsx(_components.code,{children:`false`}),`.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Always send the outer `,_jsx(_components.code,{children:`scheduleMode: \"enroll\"`}),`. The existing customer-create\nworkflow uses this URL without a mode. Enrollment row keys without the outer\nmode are rejected to prevent accidental customer-create processing.`]})}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/api-reference/endpoint/customers/batch`,children:`Batch API reference`}),` for the shared\nrequest schema and playground.`]}),`\n`,_jsx(Heading,{level:`2`,id:`acceptance-and-progress`,children:`Acceptance and progress`}),`\n`,_jsxs(_components.p,{children:[`A successful submission returns `,_jsxs(_components.strong,{children:[`HTTP `,_jsx(_components.code,{children:`202`})]}),`, `,_jsx(_components.code,{children:`Location`}),`, and a job ID:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"jobId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"550e8400-e29b-41d4-a716-446655440000\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"totalCustomers\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Batch accepted. Poll Location for progress and per-row results; acceptance does not mean enrollment has completed.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Poll the `,_jsx(_components.code,{children:`Location`}),` URL with the same company’s API key. Start with a few seconds\nbetween polls and increase the interval for longer-running jobs.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.finosu.com/customers/batch/550e8400-e29b-41d4-a716-446655440000'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --header`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'X-API-Key: YOUR_API_KEY'`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.a,{href:`/api-reference/origination/batch-status`,children:`batch status endpoint`}),` returns:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`status`}),`: `,_jsx(_components.code,{children:`pending`}),`, `,_jsx(_components.code,{children:`processing`}),`, `,_jsx(_components.code,{children:`completed`}),`, `,_jsx(_components.code,{children:`failed`}),`, or `,_jsx(_components.code,{children:`cancelled`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`processed`}),`: successfully handled rows, including saved receipt replays and\napplications that were already scheduled.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`failed`}),`: rejected rows or rows that exhausted processing retries.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`progressPercentage`}),`: handled rows divided by the submitted count.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`results`}),`: outcomes ordered by the original zero-based `,_jsx(_components.code,{children:`index`}),`. Each includes\n`,_jsx(_components.code,{children:`customerId`}),`, `,_jsx(_components.code,{children:`loanId`}),`, `,_jsx(_components.code,{children:`status`}),`, `,_jsx(_components.code,{children:`replayed`}),`, and `,_jsx(_components.code,{children:`retryable`}),`. Successful rows\ninclude the `,_jsx(_components.code,{children:`origination`}),` receipt; failures include `,_jsx(_components.code,{children:`code`}),` and `,_jsx(_components.code,{children:`message`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`failures`}),`: the failed rows with their original `,_jsx(_components.code,{children:`index`}),`, customer reference,\nand message, for compatibility with existing batch clients.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Results appear as rows finish. A terminal `,_jsx(_components.code,{children:`completed`}),` job `,_jsx(_components.strong,{children:`can have failed rows`}),`\nwhen at least one row succeeded; always inspect `,_jsx(_components.code,{children:`failed`}),` and `,_jsx(_components.code,{children:`results`}),`. A job\nwith no successful rows ends as `,_jsx(_components.code,{children:`failed`}),`. A failure before the source can be read\nmay have empty customer/application references; its original `,_jsx(_components.code,{children:`index`}),` still\nidentifies the row in your submitted list.`]}),`\n`,_jsxs(_components.p,{children:[`A saved schedule does not mean a call has connected. Use the receipt’s\n`,_jsx(_components.code,{children:`scheduledCallId`}),` to `,_jsx(_components.a,{href:`/api-reference/endpoint/scheduled-calls/get-by-id`,children:`inspect the current call status`}),`.\nReceipts are scheduling snapshots, not current borrower eligibility.`]}),`\n`,_jsx(Heading,{level:`2`,id:`retry-without-duplicate-enrollments`,children:`Retry without duplicate enrollments`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Submission timeout or `,_jsx(_components.code,{children:`503`}),`:`]}),` retry the identical ordered list with the\nsame header key. If accepted previously, the same job is returned with\n`,_jsx(_components.code,{children:`Idempotency-Replayed: true`}),`. A changed list under that key returns `,_jsx(_components.code,{children:`409`}),`.\nJSON object-key order is ignored; array order and submitted values must match.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Worker interruption:`}),` Finosu resumes processing and skips committed row\nresults. Enrollment and its result are committed together.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Retryable failed row:`}),` submit that row in a new list with a `,_jsx(_components.strong,{children:`new header\nkey`}),`, retaining its original row `,_jsx(_components.code,{children:`idempotencyKey`}),` and payload. Replaying a\nterminal list returns the existing job; it does not restart failed rows.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Invalid row:`}),` correct the data and submit a new list. A rejected validation\ndoes not consume an enrollment receipt. If a key has already produced a saved\nreceipt, changing its enrollment payload returns a conflict.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Contact or application conflict:`}),` review the reason before resubmitting.\nEnrollment cannot clear DNC, bypass a pause or reopen a terminal application.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Intentional restart:`}),` once all calls and their processing have finished,\nuse a new list key and a new row key for the same application and outreach\nmode. Both the loan and captured application must still be `,_jsx(_components.code,{children:`PENDING`}),`.\nThe `,_jsx(_components.a,{href:`/api-reference/endpoint/customers/origination-enrollment`,children:`restart rules`}),`\napply to both New Lead and Returning Customer. Technical retries must retain\ntheir original keys.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Row keys share the individual enrollment key namespace within the company. A\nrow submitted through batch and the single-record endpoint with the same key\nand normalized enrollment fields returns the same enrollment receipt. Use a\nseparate row key for each distinct enrollment operation; do not reuse it for\nunrelated customers or applications.`}),`\n`,_jsx(Heading,{level:`2`,id:`limits-and-processing-behavior`,children:`Limits and processing behavior`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Up to `,_jsx(_components.strong,{children:`10,000 records`}),` per request and `,_jsx(_components.strong,{children:`10 MiB`}),` of serialized customer\ndata. Split larger lists into multiple batches with separate header keys.`]}),`\n`,_jsxs(_components.li,{children:[`Up to `,_jsx(_components.strong,{children:`10 batch submissions per minute per company`}),`, including submission\nretries. Honor `,_jsx(_components.code,{children:`Retry-After`}),` on `,_jsx(_components.code,{children:`429`}),` and `,_jsx(_components.code,{children:`503`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Finosu processes internal chunks of `,_jsx(_components.strong,{children:`25 records`}),` in the background. The\nsingle-record endpoint’s 60-request/minute quota does not apply per batch row.`]}),`\n`,_jsx(_components.li,{children:`Rows and chunks can finish out of order. The list is not one transaction:\nvalid rows can succeed while others fail. Do not depend on list order to apply\nmultiple changes to the same customer.`}),`\n`,_jsxs(_components.li,{children:[`Invalid envelopes return `,_jsx(_components.code,{children:`422`}),` before queuing. Oversized customer data returns\n`,_jsx(_components.code,{children:`413`}),`. Invalid enrollment fields, disabled modes and application conflicts are\nreported per row after acceptance.`]}),`\n`,_jsx(_components.li,{children:`The normal scheduler still enforces contact restrictions, calling hours,\nphone rotation and the configured transfer routing. Batch intake does not\nchange those settings or imply immediate calls.`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Batch enrollment does not replace the funded/stop workflow or enable LMS notes\nand flags. See `,_jsx(_components.a,{href:`/api-reference/origination/overview#funded-applications-and-stopping-outreach`,children:`funded applications`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`multiple-applications-for-one-customer`,children:`Multiple applications for one customer`}),`\n`,_jsxs(_components.p,{children:[`Rows may share the same customer `,_jsx(_components.code,{children:`id`}),` when each represents a distinct `,_jsx(_components.code,{children:`loanId`}),`.\nUse a different row `,_jsx(_components.code,{children:`idempotencyKey`}),` for each application and preserve that key\nwhen retrying the same row. Enrollment creates separate loans and cadences without\nclosing or retargeting older applications. Contact restrictions and call spacing\nremain customer-wide. See `,_jsx(_components.a,{href:`/api-reference/endpoint/customers/origination-enrollment#returning-customers-and-new-applications`,children:`Returning customers and new applications`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Enroll a List (Batch)","description":"Send a customer/application list in one request. Finosu processes the list in the background and reports each row’s outcome.","href":"/api-reference/origination/batch"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Send a list","slug":"send-a-list","depth":2,"children":[]},{"title":"Acceptance and progress","slug":"acceptance-and-progress","depth":2,"children":[]},{"title":"Retry without duplicate enrollments","slug":"retry-without-duplicate-enrollments","depth":2,"children":[]},{"title":"Limits and processing behavior","slug":"limits-and-processing-behavior","depth":2,"children":[]},{"title":"Multiple applications for one customer","slug":"multiple-applications-for-one-customer","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"finosu","siteName":"Finosu","title":"Enroll a List (Batch) - Finosu","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-30T13:39:18.088Z","originalFileLocation":"api-reference/origination/batch.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Send a customer/application list in one request. Finosu processes the list in the background and reports each row’s outcome.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Finosu\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/finosu/TlNmhbtOI2KhvTD7/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/finosu/TlNmhbtOI2KhvTD7/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/finosu/TlNmhbtOI2KhvTD7/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/finosu/TlNmhbtOI2KhvTD7/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/finosu/TlNmhbtOI2KhvTD7/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/finosu/TlNmhbtOI2KhvTD7/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/finosu/TlNmhbtOI2KhvTD7/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/finosu/TlNmhbtOI2KhvTD7/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/finosu/TlNmhbtOI2KhvTD7/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Enroll a List (Batch) - Finosu\">\u003cmeta data-mint-head property=\"og:description\" content=\"Send a customer/application list in one request. Finosu processes the list in the background and reports each row’s outcome.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Finosu\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.finosu.com/api-reference/origination/batch\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://finosu.mintlify.site/_mintlify/api/og/v2?division=Origination\u0026amp;title=Enroll+a+List+%28Batch%29\u0026amp;description=Send+a+customer%2Fapplication+list+in+one+request.+Finosu+processes+the+list+in+the+background+and+reports+each+row%E2%80%99s+outcome.\u0026amp;theme=9a32587e40fdeefedddc89d5\u0026amp;signature=7626e7a3a94da652d479cbf57ac6802460f254acaae88be455a2a46c41532d4e\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Enroll a List (Batch) - Finosu\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Send a customer/application list in one request. Finosu processes the list in the background and reports each row’s outcome.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://finosu.mintlify.site/_mintlify/api/og/v2?division=Origination\u0026amp;title=Enroll+a+List+%28Batch%29\u0026amp;description=Send+a+customer%2Fapplication+list+in+one+request.+Finosu+processes+the+list+in+the+background+and+reports+each+row%E2%80%99s+outcome.\u0026amp;theme=9a32587e40fdeefedddc89d5\u0026amp;signature=7626e7a3a94da652d479cbf57ac6802460f254acaae88be455a2a46c41532d4e\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/finosu/TlNmhbtOI2KhvTD7/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Finosu\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0D43F3\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.finosu.com/api-reference/origination/batch\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/origination/batch.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.finosu.com/#organization\",\"name\":\"Finosu\",\"url\":\"https://docs.finosu.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/finosu/wBPuqyDOd8v5F65J/logo/finosu-logo.svg?fit=max\u0026auto=format\u0026n=wBPuqyDOd8v5F65J\u0026q=85\u0026s=b66cc2d6b8e9bed74fe5f4c33e87b063\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.finosu.com#website\",\"name\":\"Finosu\",\"url\":\"https://docs.finosu.com\",\"publisher\":{\"@id\":\"https://docs.finosu.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.finosu.com/api-reference/origination/batch#webpage\",\"url\":\"https://docs.finosu.com/api-reference/origination/batch\",\"name\":\"Enroll a List (Batch)\",\"description\":\"Send a customer/application list in one request. Finosu processes the list in the background and reports each row’s outcome.\",\"dateModified\":\"2026-10-30T13:39:18.088Z\",\"isPartOf\":{\"@id\":\"https://docs.finosu.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.finosu.com/api-reference/origination/batch#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.finosu.com/api-reference/origination/batch#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Origination\",\"item\":\"https://docs.finosu.com/api-reference/origination/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Enroll a List (Batch)\",\"item\":\"https://docs.finosu.com/api-reference/origination/batch\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.finosu.com/api-reference/origination/batch#article\",\"headline\":\"Enroll a List (Batch)\",\"name\":\"Enroll a List (Batch)\",\"description\":\"Send a customer/application list in one request. Finosu processes the list in the background and reports each row’s outcome.\",\"url\":\"https://docs.finosu.com/api-reference/origination/batch\",\"mainEntityOfPage\":{\"@id\":\"https://docs.finosu.com/api-reference/origination/batch#webpage\"},\"dateModified\":\"2026-10-30T13:39:18.088Z\",\"publisher\":{\"@id\":\"https://docs.finosu.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.finosu.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Finosu\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Finosu\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/origination/batch.md","siteName":"Finosu","nav":{"global":{"anchors":[{"anchor":"Website","icon":"globe","href":"https://www.finosu.com/"}]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/introduction"}]},{"tab":"API Reference","groups":[{"group":"API Documentation","pages":[{"title":"API Basics","href":"/api-reference/introduction"},{"title":"Upcoming API Changes","href":"/api-reference/upcoming-changes"}]},{"group":"Core Resources","pages":[{"group":"Customers","icon":"user-group","pages":[{"title":"Create a Customer","openapi":"POST /customers","href":"/api-reference/endpoint/customers/create"},{"title":"Update a Customer","openapi":"PUT /customers/{id}","href":"/api-reference/endpoint/customers/update"},{"title":"Retrieve a Customer","openapi":"GET /customers/{id}","href":"/api-reference/endpoint/customers/get"},{"title":"List All Customers","openapi":"GET /customers","href":"/api-reference/endpoint/customers/all"},{"title":"Delete a Customer","openapi":"DELETE /customers/{id}","href":"/api-reference/endpoint/customers/delete"},{"title":"Batch Create Customers","openapi":"POST /customers/batch","href":"/api-reference/endpoint/customers/batch"},{"title":"Upsert a Customer (Webhook)","openapi":"POST /webhooks/customers/upsert","href":"/api-reference/endpoint/customers/webhook"},{"title":"Sync Customer Schedules","openapi":"POST /customers/schedule/sync","href":"/api-reference/endpoint/customers/schedule-sync"},{"title":"Cancel All Communications","openapi":"POST /customers/{id}/cancel-communications","href":"/api-reference/endpoint/customers/cancel-communications"}]},{"group":"Scheduled Calls","icon":"phone","pages":[{"title":"Create Scheduled Calls","openapi":"POST /scheduled-calls/{customerId}","href":"/api-reference/endpoint/scheduled-calls/create"},{"title":"Retrieve a Scheduled Call","openapi":"GET /scheduled-calls/{id}","href":"/api-reference/endpoint/scheduled-calls/get-by-id"},{"title":"List Scheduled Calls","openapi":"GET /scheduled-calls/customer/{customerId}","href":"/api-reference/endpoint/scheduled-calls/get"},{"title":"Cancel a Scheduled Call","openapi":"POST /scheduled-calls/{id}/cancel","href":"/api-reference/endpoint/scheduled-calls/cancel"},{"title":"Cancel All Scheduled Calls","openapi":"POST /scheduled-calls/customer/{customerId}/cancel-all","href":"/api-reference/endpoint/scheduled-calls/cancel-all"}]},{"group":"Calls","icon":"phone","pages":[{"title":"Retrieve a Call","openapi":"GET /calls/{id}","href":"/api-reference/endpoint/calls/get-by-id"},{"title":"List All Calls","openapi":"GET /calls","href":"/api-reference/endpoint/calls/list"},{"title":"List Calls for a Customer","openapi":"GET /calls/customer/{customerId}","href":"/api-reference/endpoint/calls/get"},{"title":"List Call Flags","openapi":"GET /calls/flags","href":"/api-reference/endpoint/calls/flags"}]},{"group":"Texts","icon":"pen-paintbrush","pages":[{"title":"Get Texts","openapi":"GET /texts/{customerId}","href":"/api-reference/endpoint/text/get"}]},{"group":"Emails","icon":"list-check","pages":[{"title":"Get Emails","openapi":"GET /emails/{customerId}","href":"/api-reference/endpoint/email/get"}]},{"group":"Billing","icon":"receipt","pages":[{"title":"List Daily Billing Costs","openapi":"GET /billing/daily-costs","href":"/api-reference/endpoint/billing/daily-costs"}]},{"group":"Outbound Webhooks","icon":"webhook","pages":[{"title":"Managed webhooks","href":"/api-reference/webhooks/overview"},{"title":"Webhook quickstart","href":"/api-reference/webhooks/quickstart"},{"title":"Event catalog","href":"/api-reference/webhooks/events"},{"title":"Verify signatures","href":"/api-reference/webhooks/verification"},{"title":"Delivery and retries","href":"/api-reference/webhooks/receiving"},{"title":"New Call","openapi":"WEBHOOK /call/webhook","href":"/api-reference/endpoint/calls/webhook"},{"title":"Transfer Note","openapi":"WEBHOOK /transfer-note","href":"/api-reference/endpoint/transfer-notes/transfer-note"}]},{"group":"LMS Sync","icon":"arrows-rotate","pages":[{"title":"LMS Customer Full Sync","openapi":"POST /webhooks/lms/sync/customer-full","href":"/api-reference/endpoint/lms/sync-customer-full"},{"title":"LMS Customer Batch Sync","openapi":"POST /webhooks/lms/sync/customer-full/batch","href":"/api-reference/endpoint/lms/sync-customer-full-batch"},{"title":"LMS Batch Sync Status","openapi":"GET /webhooks/lms/sync/batch/{jobId}","href":"/api-reference/endpoint/lms/sync-batch-status"},{"title":"LMS Loan Sync","openapi":"POST /webhooks/lms/sync/loan","href":"/api-reference/endpoint/lms/sync-loan"}]},{"group":"Borrower Sign-On","pages":[{"title":"Create Portal Session","openapi":"POST /sso/portal-sessions","href":"/api-reference/endpoint/sso/create-portal-session"}]}]},{"group":"Origination","icon":"phone-arrow-up-right","pages":[{"title":"Origination Overview","href":"/api-reference/origination/overview"},{"title":"Enroll an Application","description":"Create or reuse a customer and enroll an application in its configured outreach cadence.","href":"/api-reference/endpoint/customers/origination-enrollment"},{"title":"Enroll a List (Batch)","href":"/api-reference/origination/batch"},{"title":"Origination Examples","description":"Complete requests for new leads, returning borrowers, and one-off calls, with retry handling.","href":"/api-reference/origination/examples"},{"title":"Batch Progress and Results","openapi":"GET /customers/batch/{jobId}","href":"/api-reference/origination/batch-status"},{"title":"List Origination Task Types","openapi":"GET /origination/task-types","href":"/api-reference/endpoint/task-types/list"},{"title":"Close Origination","openapi":"POST /originations/{id}/close","href":"/api-reference/origination/close"},{"title":"List Origination Close Reasons","openapi":"GET /originations/close-reasons","href":"/api-reference/origination/close-reasons"}]},{"group":"Collections","icon":"file-invoice-dollar","pages":[{"title":"Collections Overview","href":"/api-reference/collections/overview"},{"group":"Loans","icon":"file-invoice-dollar","pages":[{"title":"List Collections Task Types","openapi":"GET /collections/task-types","href":"/api-reference/endpoint/collections/task-types"},{"title":"Create Loan","openapi":"POST /loans","href":"/api-reference/endpoint/loans/create"},{"title":"Create Loans (Batch)","openapi":"POST /loans/batch","href":"/api-reference/endpoint/loans/batch"},{"title":"Update Loan","openapi":"PUT /loans/{id}","href":"/api-reference/endpoint/loans/update"},{"title":"Delete Loan","openapi":"DELETE /loans/{id}","href":"/api-reference/endpoint/loans/delete"}]},{"group":"Payment Methods","icon":"credit-card","pages":[{"title":"List Customer Payment Methods","openapi":"GET /customers/{customerId}/payment-methods","href":"/api-reference/endpoint/customers/payment-methods"},{"title":"Revoke ACH Authorization","openapi":"POST /customers/{customerId}/payment-methods/{paymentMethodId}/ach-authorization","href":"/api-reference/endpoint/customers/update-ach-authorization"}]},{"group":"Payments","icon":"money-bill-transfer","pages":[{"title":"Record External Payment","openapi":"POST /external-payments","href":"/api-reference/endpoint/payments/external"},{"title":"Submit ACH Return","openapi":"POST /ach-returns","href":"/api-reference/endpoint/ach-returns/create"},{"title":"Submit ACH Returns (Batch)","openapi":"POST /ach-returns/batch","href":"/api-reference/endpoint/ach-returns/batch"},{"title":"Confirm ACH Settlement","openapi":"POST /ach-confirms","href":"/api-reference/endpoint/ach-confirms/create"},{"title":"Confirm ACH Settlements (Batch)","openapi":"POST /ach-confirms/batch","href":"/api-reference/endpoint/ach-confirms/batch"}]},{"group":"Servicing Lifecycle","icon":"circle-stop","pages":[{"title":"Cancel Loan Servicing","openapi":"POST /loans/{id}/cancel-servicing","href":"/api-reference/endpoint/loans/cancel-servicing"},{"title":"Cancel Customer Servicing","openapi":"POST /customers/{id}/cancel-servicing","href":"/api-reference/endpoint/customers/cancel-servicing"},{"title":"List Stop Servicing Reasons","openapi":"GET /loans/stop-servicing-reasons","href":"/api-reference/endpoint/loans/stop-servicing-reasons"}]}]}]}]},"basePath":"","title":"Enroll a List (Batch) - Finosu","buildId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","deploymentId":"dpl_Fyv1NbzwP68g2bEH2Roy98uY1zmE","dynamics":[],"chunks":[]}