Afinis Reporting ACH Return (RET) API

Afinis Reporting ACH Return (RET) API allowing originators and payment providers to share ACH return payment data in support of fraud and risk mitigation.

OpenAPI Specification

nacha-ret.json Raw ↑
{"swagger":"2.0","info":{"version":"1.0.3","title":"RET (Reporting ACH Return Payments) API","description":"Allow Originators and payment providers to share ACH return payment data to support fraud/risk mitigation.","contact":{"email":"info@afinis.org","url":"https://www.afinis.org"}},"host":"api.afinis.org","basePath":"/payments/ach/v1","securityDefinitions":{"APIKeyQueryParam":{"type":"apiKey","in":"query","name":"apikey"}},"consumes":["application/json"],"produces":["application/json"],"schemes":["https"],"paths":{"/ret":{"post":{"operationId":"Reporting ACH Return Payments","tags":["Reporting ACH Return Payments"],"description":"Alert the network of ACH users about problematic ACH payments to help mitigate the risk of suspected bad actors perpetuating fraud against other ACH users","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"Reporting ACH Return Payments","required":true,"schema":{"type":"object","required":["originatorName","originatorAgentName","receiverName","receiverAgent","receiverAccount","endToEndIdentification","requestedExecutionDate","settlementDate","localInstrument","amount","returnReason","purpose"],"properties":{"originatorName":{"type":"string","minLength":1,"maxLength":70,"example":"John Edison"},"originatorAgentName":{"type":"string","minLength":1,"maxLength":70,"example":"Hank's Bank, the Think Tank at Mont Blanc"},"receiverName":{"type":"string","minLength":1,"maxLength":70,"example":"Jane Edison"},"receiverAgent":{"$ref":"#/definitions/agent"},"receiverAccount":{"$ref":"#/definitions/account"},"endToEndIdentification":{"description":"Unique identification assigned by the initiating party to unambiguously identify the transaction.","type":"string","example":"ABC13609-15-18","minLength":1,"maxLength":35},"requestedExecutionDate":{"description":"Date at which the initiating party requests the clearing agent to process the payment.","type":"string","example":"2023-02-24","minLength":10,"maxLength":10},"settlementDate":{"description":"Indicates the date of settlement of the underlying.","example":"2023-02-24","type":"string","minLength":10,"maxLength":10},"localInstrument":{"type":"string","example":"WEB","minLength":3,"maxLength":3,"enum":["ARC","BOC","CCD","CIE","CTX","IAT","MTE","POP","POS","PPD","RCK","SHR","TEL","WEB","XCK"]},"amount":{"description":"Amount of money to be moved between the debtor and creditor, before deduction of charges, expressed in the currency as ordered by the initiating party","type":"object","required":["amount","currency"],"properties":{"amount":{"type":"number","format":"float","example":1.01,"maxLength":11},"currency":{"type":"string","example":"USD","minLength":3,"maxLength":3}}},"returnReason":{"type":"string","example":"R01","minLength":3,"maxLength":3,"description":"Available codes:  *  'R01' - Insufficient funds *  'R02' - Account Closed *  'R03' - No Account / Unable to Locate Account *  'R04' - Invalid Account Number Structure *  'R05' - Unauthorized Debit to Consumer Account Using Corporate SEC Code *  'R06' - Returned per ODFI's Request *  'R07' - Authorization Revoked by Customer *  'R08' - Payment Stopped *  'R09' - Uncollected Funds *  'R10' - Customer Advises Originator is Not Known to Receiver and/or Originator is Not Authorized by Receiver to Debit Receiver’s Account *  'R11' - Customer Advises Entry Not in Accordance with the Terms of the Authorization *  'R12' - Account Sold to Another DFI *  'R14' - Representative Payee Deceased or Unable to Continue in That Capacity *  'R15' - Beneficiary or Account Holder (Other Than a Representative Payee) Deceased *  'R16' - Account Frozen / Entry Returned Per OFAC Instruction *  'R17' - File Record Edit Criteria / Entry with Invalid Account Number Initated Under Questionable Circumstances / Return of Improperly Initiated Reversal *  'R20' - Non-Transaction Account *  'R21' - Invalid Company Identification *  'R22' - Invalid Individual ID Number *  'R23' - Credit Entry Refused by Receiver *  'R29' - Corporate Customer Advises Not Authorized *  'R31' - Permissible Return Entry (CCD and CTX) only *  'R32' - RDFI Non-Settlement *  'R33' - Return of XCK Entry  *  'R34' - Limited Participation DFI *  'R35' - Return of Improper Debit Entry *  'R37' - Source Document Presented for Payment *  'R38' - Stop Payment on Source Document *  'R39' - Improper Source Document / Source Document Presented for Payment  *  'R50' - State Law Affecting RCK Acceptance  *  'R51' - Item related to RCK Entry is Ineligible for RCK Entry is Improper *  'R52' - Stop Payment on Item Related to RCK Entry *  'R53' - Item and RCK Entry Presented for Payment\n","enum":["R01","R02","R03","R04","R05","R06","R07","R08","R09","R10","R11","R12","R14","R15","R16","R17","R20","R21","R22","R23","R29","R31","R32","R33","R34","R35","R37","R38","R39","R50","R51","R52","R53"]},"purpose":{"description":"Underlying reason for the payment transaction.","type":"string","example":"Pay rent","minLength":1,"maxLength":35}}}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/response-200"}},"400":{"description":"Bad request","schema":{"$ref":"#/definitions/error-400"}},"401":{"description":"Unauthorized","schema":{"$ref":"#/definitions/error-401"}},"403":{"description":"Access denied, the operation is not allowed"},"404":{"description":"Not Found","schema":{"$ref":"#/definitions/error-404"}},"500":{"description":"Internal Server error","schema":{"$ref":"#/definitions/error-500"}},"503":{"description":"Service unavailable","schema":{"$ref":"#/definitions/error-503"}}},"security":[{"APIKeyQueryParam":[]}]}}},"definitions":{"response-200":{"title":"Response","type":"object","required":["status"],"properties":{"status":{"description":"Specifies the status","type":"string","example":"RCVD","minLength":1,"maxLength":140}}},"agent":{"title":"Agent","description":"Identification of a financial institution.","type":"object","properties":{"clearingSystemIdentification":{"type":"string","example":"USABA","enum":["USABA"],"description":"Specification of a pre-agreed offering between clearing agents or the channel through which the payment instruction is processed: \n * `USABA` - Routing Transit number assigned by the ABA for US financial Institutions. \n"},"memberIdentification":{"type":"string","minLength":1,"maxLength":35,"example":"061103852"}}},"account":{"title":"Account","description":"Details to identify an account","type":"object","required":["identification"],"properties":{"identification":{"description":"Unambiguous identification of the account of the debtor to which a debit entry will be made as a result of the transaction.","type":"string","example":"111010151","minLength":1,"maxLength":17},"type":{"type":"number","example":"22","minLength":2,"maxLength":2,"description":"Specifies the nature, or use of the account. Available codes:  *  '22' - demand credit *  '27' - demand debit  *  '32' - savings credit *  '37' - savings debit *  '42' - general ledger credit *  '47' - general ledger debit *  '52' - loan account credit *  '55' - loan account debit (reversals only)        \n","enum":[22,27,32,37,42,47,52,55]}}},"error-400":{"title":"Error 400 - Bad Request","description":"The request could not be understood or required parameters were missing","type":"object","properties":{"detail":{"description":"error details","type":"array","items":{"$ref":"#/definitions/errorDetails-400"}}}},"errorDetails-400":{"title":"Error 400 - Bad Request - Details","type":"object","properties":{"errorCode":{"description":"A programmatic error code:\n  * `2000` - Invalid JSON structure.\n  * `2001` - '[Field name] is missing or invalid.'\n  * `2002` - Invalid date.\n  * `2003` - Invalid combination of fields submitted. Check the API specification for eligible combinations. \n  * `2004` - '[Field name] cannot be more than [max number] characters.'\n","example":2000,"type":"number","enum":[2000,2001,2002,2003,2004]},"message":{"description":"A human readable description of the problem","example":"Invalid JSON structure.","type":"string"}}},"error-401":{"title":"Error 401 - Unauthorized","description":"Authentication failed or user doesn’t have permissions for requested operation","type":"object","properties":{"detail":{"description":"error details","type":"array","items":{"$ref":"#/definitions/errorDetails-401"}}}},"errorDetails-401":{"title":"Error 401 - Unauthorized - Details","type":"object","properties":{"errorCode":{"example":1000,"type":"number","enum":[1000,1001],"description":"A programmatic error code:\n  * `1000` - API key is missing, invalid or expired. \n  * `1001` - API token is invalid, expired, or account associated with key does not have access to that API.\n"},"message":{"description":"A human readable description of the problem","example":"API key is missing, invalid or expired.","type":"string"}},"required":["errorcode","message"]},"error-404":{"title":"Error 404 - Not Found","description":"Resource was not found.","type":"object","required":["errorCode","message"],"properties":{"errorCode":{"example":404,"type":"number","enum":[404],"description":"A programmatic error code:\n  * `404` - Resource was not found.\n"},"message":{"description":"A human readable description of the problem","example":"Resource was not found.","type":"string"}}},"error-503":{"title":"Error 503 - Service Unavailable","description":"Service is temporarily unavailable","type":"object","required":["errorCode","message"],"properties":{"errorCode":{"example":503,"type":"number","enum":[503],"description":"A programmatic error code:\n  * `503` - Service Unavailable\n"},"message":{"description":"A human readable description of the problem","example":"Service is temporarily unavailable.","type":"string"}}},"error-500":{"title":"Error 500 - Internal server error","type":"object","properties":{"detail":{"description":"error details","type":"array","items":{"$ref":"#/definitions/errorDetails-500"}}}},"errorDetails-500":{"title":"Error 500 - Internal server error - Details","type":"object","properties":{"errorcode":{"description":"A programmatic error code","example":3001,"type":"number"},"message":{"description":"A human readable description of the problem","example":"Internal Server error","type":"string"}},"required":["errorcode","message"]}}}