cURL
ACH Returns
Submit ACH Returns (Batch)
Submit multiple ACH return records in a single batch request. Each return is processed independently with detailed individual results.
POST
cURL
Overview
This batch endpoint allows you to submit multiple ACH return records from external loan management systems (LMS) in a single API request for improved efficiency. Each return in the batch is processed independently with detailed individual results, making it ideal for processing daily ACH return files from banks or bulk syncing from your LMS system.ID Mapping
The endpoint uses the same reference ID mapping as the single ACH return endpoint:- customer_id - Maps to
customer.reference_id - loan_id - Maps to
loan.external_reference - payment_id - Maps to
payment_transaction.external_reference
Request Body Format
The batch endpoint accepts an array of ACH return records wrapped in areturns field:
Individual Return Schema
Each object in thereturns array follows the same schema as the single ACH return endpoint:
Identifiers (Required):
customer_id- Customer reference ID from your LMSloan_id- Loan reference ID from your LMSpayment_id- Payment reference ID from your LMS
system_source- Source system identifierpayment_date- Date payment was madepayment_amount- Payment amount in dollarspayment_type- Type of paymentpayment_reversed- Boolean indicating if payment was reversedpayment_reverse_date- Date payment was reversedpayment_reverse_reason_code- Code indicating reversal reasonpayment_reverse_comments- Additional comments
ach_submitted_date- Date ACH was submittedach_settlement_date- Date ACH settledach_status- ACH status (PENDING, SUBMITTED, PROCESSED, COMPLETED, FAILED, RETURNED, CANCELED)
ach_return_code- ACH return code (R01-R29)ach_return_date- Date of ACH returnach_return_reason- Human-readable return reason
ach_correction_code- ACH correction codeach_corrected_aba_number- Corrected ABA routing numberach_corrected_account_number- Corrected account numberach_correction_date- Date correction was received
debit_status- Debit card transaction statusdebit_decline_reason- Reason for debit card decline
overall_return_code- Combined return code from ACH or debit
Response Format
The batch endpoint returns detailed results for each ACH return processed:Response Fields
- success -
trueif ALL returns were processed successfully,falseif any failed - total_processed - Total number of returns in the batch
- successful - Number of successfully processed returns
- failed - Number of failed returns
- results - Array of individual results for each return
- success - Whether this specific return was processed successfully
- payment_id - The payment ID from the request for easy matching
- message - Success or error message for this specific return
Partial Success Handling
The batch endpoint uses partial success handling to ensure maximum processing:- Individual failures don’t stop processing - If one return fails, the remaining returns are still processed
- Detailed error messages - Each failed return includes its specific error message
- Transaction isolation - Each return is processed in its own transaction to prevent one failure from affecting others
- Overall success flag - The top-level
successfield istrueonly if all returns succeeded
Example: Partial Failure Response
What the Endpoint Does
For each ACH return in the batch, Finosu:- Locates the records using the external reference IDs
-
Updates PaymentTransaction with:
- Payment reversal information (if applicable)
- Status change to RETURNED if ACH return exists
-
Updates AchPayment (if exists) with:
- ACH transaction dates
- Status mapping from your external status
-
Creates ACHReturnHistory record with:
- ACH return code and reason
- ACH correction/NOC data
- Risk assessment tracking
- Action taken metadata
-
Triggers NSF revocation check (for R01/R09 returns):
- Automatically revokes payment methods after 2 consecutive NSF returns
When to Use Batch vs Single
Use the batch endpoint when:- Processing daily ACH return files from your bank
- Syncing multiple returns from your LMS system
- You have more than 5-10 returns to submit
- You want to minimize API calls for efficiency
- Processing real-time individual returns
- You only have 1-2 returns to submit
- You need simpler error handling
- Testing or debugging individual returns
Error Handling
The endpoint returns HTTP status 200 OK for all requests, with detailed success/failure information in the response body for each individual return. Individual return errors may include:- 404 NOT FOUND - Customer, loan, or payment not found with provided IDs
- 422 UNPROCESSABLE ENTITY - ACH payment has no associated payment method
- 500 INTERNAL SERVER ERROR - Server error during processing
results array in the response to see which returns succeeded and which failed.
Authentication
Authentication via X-API-Key header:- API key is company-scoped
- Must be obtained from Finosu
- Same authentication as single ACH return endpoint
Example Usage
This endpoint is typically used for:- Daily bank reconciliation - Process ACH return files from your bank
- Bulk LMS sync - Sync multiple return records from your loan management system
- Scheduled jobs - Automated daily/weekly return processing workflows
Authorizations
Body
application/json
Batch of ACH return records
Array of ACH return records to process
Response
200 - application/json
Batch processing completed (may include partial failures - check individual results)
True if ALL returns were processed successfully, false if any failed
Example:
true
Total number of returns in the batch
Example:
2
Number of successfully processed returns
Example:
2
Number of failed returns
Example:
0
Individual results for each return