openapi: 3.2.0 info: title: External Trans ACH Debit Webhook API description: '# Overview External Trans API is a webhook that allows clients to participate in the decisioning for: * Approving/denying bill payments * Approving/denying ACH debits It''s similar to Auth API, but for bill pay and ACH debits.' version: 1.0.0 servers: - url: https://client.domain.com description: Clients will provide the URLs they would like to use for External Trans API. The URLs should use HTTPS. tags: - name: ACH Debit Webhook paths: /achdebit: post: summary: ACH Debit Webhook description: Use the ACH Debit webhook to approve or deny incoming ACH debits. Use the `response_code` field in the response to communicate your decision to SoFi Tech Solutions. operationId: webhook_ach_debit_post tags: - ACH Debit Webhook parameters: - name: X-Request-ID in: header description: A unique identifier for the HTTP request. schema: type: string format: uuid required: true requestBody: description: Information about the ACH debit transaction. required: true content: application/json: schema: type: object properties: account_number: type: string minLength: 12 maxLength: 12 description: 'Payment reference number for the account Example: `"999200002022"`' example: '999200002022' account_status: type: string description: 'Account status code. See the possible values in the Account Statuses enumeration. Example: `"N"`' transaction_amount: type: number format: float description: 'The amount of the ACH debit. Example: `150.00`' example: 150 currency: type: string minLength: 3 maxLength: 3 description: 'The three-digit currency code for the amounts. ISO 4217 Numeric Currency Code. 3 digits. Example: `"840"`' example: '840' available_funds: type: number format: float description: 'Amount of funds available to the account holder. Example: `500.00`' example: 500 ach_name: type: string maxLength: 30 description: 'Name of the ACH account holder. Example: `"John Doe"`' example: John Doe recipient: type: string maxLength: 35 description: 'Name of the <> that receives the debited funds. Example: `"Widgets Incorporated"`' example: Widgets Incorporated sec: type: string minLength: 3 maxLength: 3 description: 'The three-character standard entry class (SEC) code. Example: `"WEB"`' example: WEB is_international: type: boolean description: 'Whether this is an international transaction. Example: `"false"`' example: false description: type: string maxLength: 10 description: 'Description from the ACH header. Example: `"PAYROLL "`' example: 'PAYROLL ' timestamp: type: string description: 'Timestamp when this webhook message was sent. Format is `` where `timestamp` is `YYYYmmdd:HHMMSS` and `timezone` is always `MST`. Example: `"20270315:121504MST"`' example: 20270315:121504MST transaction_id: type: integer maxLength: 18 description: 'The unique identifier of the ACH transaction. Also called `ach_trans_id` and `deposit_transaction_id` in the Program API. Example: `32146803`' example: 32146803 version: type: string maxLength: 16 description: The version of this API. Hard-coded to `"1.0"`. enum: - '1.0' batch_header: type: string maxLength: 94 description: 'The batch header for the <> that contained this ACH debit entry detail record. Example: `"5225WIDGET INC DISCRETIONARY DATA 1234567890POSPAYROLL 2027052003070642123456780000001"`' example: 5225WIDGET INC DISCRETIONARY DATA 1234567890POSPAYROLL 2027052003070642123456780000001 source_trace: type: string maxLength: 20 description: 'The source trace number from the ACH record. Example: `"123456781234567"`' example: '123456781234567' jwt: type: string description: The JSON web token (JWT) that authenticates the HTTP request from SoFi Tech Solutions. See the security overview for more information and an example. example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnYWxpbGVvIiwiaWF0IjoxNTM0Mjc0ODgxLCJleHAiOjE1MzQyNzQ4ODZ9.1xUk4iNFGWLo01MyJUHXRlyrNlzwPvDMSXpN38TrblU required: - account_number - account_status - transaction_amount - currency - available_funds - ach_name - recipient - sec - is_international - description - timestamp - transaction_id - version - batch_header - source_trace responses: '200': description: Your decision and instructions for SoFi Tech Solutions. content: application/json: schema: type: object properties: response_code: type: string description: "Response code indicating how to process the ACH debit transaction. Possible response codes:\n\n- `00` — Approve\n\n- `R01` — Reject; Insufficient funds\n\n- `R07` — Reject; Authorization revoked by customer\n\n- `R08` — Reject; Payment stopped\n\n- `R10` — Reject; Customer advises not authorized\n\n- `R16` — Reject; Bank account frozen\n\n- `R20` — Reject; Non-payment bank account\n\n- `98` — System Error; Reject and do not retry\n\n- `99` — System Error; Retry later\n\n\nYou can use `99` to tell SoFi Tech Solutions to retry later if your product is configured for retries. \n" required: - response_code examples: response: value: "{\n \"response_code\": \"00\"\n}\n" x-explorer-enabled: false x-samples-enabled: false x-readme: proxy-enabled: true