openapi: 3.2.0 info: version: 1.0.6 title: Proof of Authorization API description: Nacha would like to provide a real time alternative message for a request for an ACH proof of authorization in order to increase automation and gain efficiencies, help with regulatory compliance and facilitate the exchange of this information in a secure fashion. contact: email: info@afinis.org url: https://www.afinis.org servers: - url: https://api.afinis.org/banks/v1 tags: - name: Proof of Authorization paths: /documents/proofofauth: post: description: The Receiving Depository Financial Institution (RDFI) wants to send an automated electronic request to the Originating Depository Financial Institution (ODFI). As the RDFI, I want to receive a real time acknowledgement when my request is received. I want to provide details on how I can receive the copy of the authorization back from the ODFI. operationId: Proof of Authorization - Request tags: - Proof of Authorization parameters: - name: apiVersion in: header required: false schema: type: string format: string responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/response-201' '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/error-400' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/error-401' '403': description: Forbidden content: application/json: schema: $ref: '#/components/schemas/error-403' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/error-404' '405': description: Method Not Allowed content: application/json: schema: $ref: '#/components/schemas/error-405' '406': description: Not Acceptable content: application/json: schema: $ref: '#/components/schemas/error-406' '415': description: Unsupported Media Type content: application/json: schema: $ref: '#/components/schemas/error-415' '422': description: Unprocessable request content: application/json: schema: $ref: '#/components/schemas/error-422' '500': description: Internal Server error content: application/json: schema: $ref: '#/components/schemas/error-500' '503': description: Service Unavailable content: application/json: schema: $ref: '#/components/schemas/error-503' security: - APIKeyQueryParam: [] requestBody: content: application/json: schema: type: object required: - initiatingParty - instructingAgent - instructedAgent - endToEndIdentification - amount - creditor - debtor - debtorAccount - entryDate - PoAMethod properties: messageIdentification: type: string minLength: 1 maxLength: 20 example: Id_ABC123 initiatingParty: $ref: '#/components/schemas/party' instructingAgent: $ref: '#/components/schemas/agent' instructedAgent: $ref: '#/components/schemas/agent' endToEndIdentification: type: string maxLength: 35 example: 061058941111111 localInstrument: type: string minLength: 3 maxLength: 3 example: WEB amount: $ref: '#/components/schemas/amount' creditor: $ref: '#/components/schemas/party' debtor: $ref: '#/components/schemas/party' debtorAccount: type: string description: Identification assigned by an institution example: '12345678' minLength: 1 maxLength: 17 entryDate: type: string maxLength: 10 example: '2019-03-01' PoAMethod: $ref: '#/components/schemas/PoAMethod' newRequest: type: string example: Y enum: - Y - N secondDocumentRequest: type: string example: N enum: - Y - N description: RDFI wants to send an automated electronic request to ODFI. RDFI provides details on how to receive the copy of the authorization back from the ODFI components: schemas: PoAMethod: type: object properties: preferredMethod: type: string enum: - EMAL - FAXI - POST postalAddress: $ref: '#/components/schemas/postalAddress' faxNumber: type: string minLength: 1 maxLength: 30 example: +1-302-515-7000 emailAddress: type: string minLength: 1 maxLength: 2048 example: zachary.westwood@ABCcorp.com status: title: Received type: object description: Information sent for Received statuses required: - amount - endToEndIdentification - entryDate properties: requestStatus: example: RCVD type: string enum: - RCVD - SENT - INPR - OKTR - UTCO description: "A programmatic code:\n * `RCVD` - Received \n * `SENT` - Sent\n * `INPR` - In Process\n * `OKTR` - Ok to Return \n * `UTCO` - Unable to Comply \n" messageIdentification: type: string minLength: 1 maxLength: 20 example: Id_CBA123 originalMessageIdentification: type: string minLength: 1 maxLength: 20 example: Id_ABC123 amount: $ref: '#/components/schemas/amount' endToEndIdentification: type: string minLength: 1 maxLength: 35 example: CBA321 entryDate: type: string minLength: 10 maxLength: 10 example: '2019-03-01' notificationDate: type: string description: Start date of the range example: '2020-04-29' minLength: 10 maxLength: 10 notificationTime: type: string description: Start date of the range example: '20:30' minLength: 5 initiatingParty: $ref: '#/components/schemas/party' PoAMethod: $ref: '#/components/schemas/PoAMethod' 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: details: description: error details type: array items: $ref: '#/components/schemas/errorDetails-401' party: required: - name type: object properties: name: type: string minLength: 1 maxLength: 70 example: John Edison identification: type: string minLength: 1 maxLength: 35 example: 8765434589 phoneNumber: type: string minLength: 1 maxLength: 30 example: +1-302-515-5000 emailAddress: type: string minLength: 1 maxLength: 2048 example: zachary.eastwood@ABCcorp.com postalAddress: description: Information that locates and identifies a specific address, as defined by postal services. type: object properties: streetName: description: Name of a street or throughfare type: string minLength: 1 maxLength: 70 example: Lexington Street postCode: description: Identifier consisting of a group of letters and/or numbers that is added to a postal address to assist the sorting of mail type: string minLength: 1 maxLength: 11 example: 19801 townName: description: Name of a built-up area, with defined boundaries, and a local government type: string minLength: 1 maxLength: 35 example: Wilmington countrySubDivision: description: Identifies a subdivision of a country such as state, region, county type: string minLength: 1 maxLength: 35 example: DE country: description: Nation with its own government type: string minLength: 2 maxLength: 2 example: US 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 unprocessableRequestErrorDetails: title: Unprocessable request Error Details type: object required: - errorCode - message properties: errorCode: example: 4001 type: number enum: - 4001 description: "A programmatic error code:\n * `4001` - Unprocessable request due to \"%%\"\n" message: description: A human readable description of the problem example: Unprocessable request due to "%%" type: string error-400: title: Error 400 - Bad Request description: The request could not be understood or required parameters were missing type: object properties: details: description: error details type: array items: $ref: '#/components/schemas/errorDetails-400' error-415: title: Error 415 - Unsupported Media Type description: The media format of the requested data is not supported by the server, so the server is rejecting the request. type: object required: - errorCode - message properties: errorCode: example: 415 type: number enum: - 415 description: "A programmatic error code:\n * `415` - Unsupported Media Type\n" message: description: A human readable description of the problem example: Unsupported Media Type type: string error-403: title: Error 403 - Forbidden description: The client does not have access rights to the content; that is, it is unauthorized, so the server is refusing to give the requested resource. Unlike 401, the client's identity is known to the server. type: object required: - errorCode - message properties: errorCode: example: 403 type: number enum: - 403 description: "A programmatic error code:\n * `403` - Forbidden\n" message: description: A human readable description of the problem example: Forbidden type: string error-500: title: Internal Server Error description: 500 - Internal Server Error type: object required: - details properties: details: description: error details type: array items: $ref: '#/components/schemas/internalServerErrorDetails' error-422: title: Unprocessable request description: 422 - Unprocessable request type: object required: - details properties: details: description: error details type: array items: $ref: '#/components/schemas/unprocessableRequestErrorDetails' 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 enum: - USD 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 internalServerErrorDetails: title: Internal Server Error Details type: object required: - errorCode - message properties: errorCode: example: 3001 type: number enum: - 3001 description: "A programmatic error code:\n * `3001` - Internal Server error.\n" message: description: A human readable description of the problem example: Internal Server error type: string error-406: title: Error 406 - Not Acceptable description: Web server doesn't find any content that conforms to the criteria given by the user agent. type: object required: - errorCode - message properties: errorCode: example: 406 type: number enum: - 406 description: "A programmatic error code:\n * `406` - Not Acceptable\n" message: description: A human readable description of the problem example: Not Acceptable type: string response-201: title: Response type: object description: 201 - Created properties: status: $ref: '#/components/schemas/status' agent: description: Identification of a financial institution. type: object required: - clearingSystemIdentification - memberIdentification 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 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-405: title: Error 405 - Method Not Allowed description: The request method is known by the server but has been disabled and cannot be used. type: object required: - errorCode - message properties: errorCode: example: 405 type: number enum: - 405 description: "A programmatic error code:\n * `405` - Method Not Allowed\n" message: description: A human readable description of the problem example: Method Not Allowed type: string securitySchemes: APIKeyQueryParam: type: apiKey in: query name: apikey