BMO

BMO ACH Payments API

Initiates and manages U.S. ACH credit and debit payments (sending or collecting funds) with live status updates, for treasury and accounting system integrations. OAuth 2.0 plus client API key.

OpenAPI Specification

bmo-ach-payments-openapi.json Raw ↑
{
  "openapi": "3.0.3",
  "info": {
    "title": "ACH Payments",
    "description": "ACHPaymentAPI will act as a API routing the ACH payment requests Product Systems for execution. The TppPaymentInstruction generic API exposes three functionality of receiving sendPayment - ISO PAIN 001(Credit) and PAIN 008 (Debit) and PaymentStatus Enquiry ( CAMT005 ). The subsequent validation and processing of Payment messages received, would be performed by the downstream APIs",
    "contact": {
      "name": "ACH Payment Service - ACHAPI",
      "url": "https://bmo.atlassian.net/wiki/spaces/ACHBS/pages/1096549051/External+General+API+Swagger",
      "email": "ACHPSSupport@bmo.com"
    },
    "version": "1.1.3",
    "x-api-id": "NA",
    "x-audience": "company-external",
    "x-bmoservicedomain-name": "Payment Initiation",
    "x-bmo-api-type": "internal-api",
    "x-template-version": "2.0.0",
    "x-bmo-api-provider-id": 80613,
    "x-api-specification-compliant": true,
    "x-ibm-name": "achpaymentapi",
    "x-ibm-summary": ""
  },
  "servers": [
    {
      "url": "https://sandbox-open-api.bmo.com/open-banking/commercial-sb"
    }
  ],
  "tags": [
    {
      "name": "PaymentsService",
      "description": "This is a tag for Payment service for Payments which provides operation for both Payment Initiation and Payment Status Enquiry."
    },
    {
      "name": "PaymentInitiation",
      "description": "This is a tag for Payment Initiation - send Payments. receive PAIN001/PAIN008 (Debit/Credit) ISO request as input and return PAIN002 ISO as response after interacting with downstream Payment Rail System(s)."
    },
    {
      "name": "PaymentStatus",
      "description": "This is a tag for PaymentStatus which enquiry sends CAMT005 ISO JSON Request standard messages and enquires and responds back with PAIN002 message structure after querying matching backend."
    }
  ],
  "paths": {
    "/tpp/ach/payment-initiation/customer-credit-transfer-initiation": {
      "post": {
        "security": [
          {
            "api-key-1": [],
            "OAuth": [
              "bmo.tppach.payment-initiation.create"
            ]
          }
        ],
        "tags": [
          "PaymentInitiation"
        ],
        "summary": "Send Payment Credit",
        "description": "Payment Initiation - send Payments. receive PAIN001 (Credit) ISO JSON request as input and return PAIN002 ISO JSON as response after interacting with downstream Payment Rail System.",
        "operationId": "CreditPaymentInitiation",
        "x-dataclassification-code": "Confidential",
        "parameters": [
          {
            "name": "x-fapi-interaction-id",
            "in": "header",
            "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-fapi-customer-last-logged-time",
            "in": "header",
            "description": "The time when the Payment Services User last logged in with the Third Party Provider",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-fapi-customer-ip-address",
            "in": "header",
            "description": "The Payment Services User's IP address if the Payment Services User is currently logged in with the Third Party Provider.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-fapi-customer-user-agent",
            "in": "header",
            "description": "Indicates the user-agent that the Payment Services User is using https://www.computerhope.com/jargon/u/useragen.htm",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-fapi-financial-id",
            "in": "header",
            "description": "The unique id of the financial institution to which the request is issued.  BMO is 001",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-crypto-key",
            "in": "header",
            "description": "Crypto Key for payload decryption",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-request-id",
            "in": "header",
            "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-sourcesystem-id",
            "in": "header",
            "description": "Source System ID to identify source, use 'OPENGENAPI'",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-api-key",
            "in": "header",
            "description": "The unique id used to identify caller of the API. (For legacy, AppCatId value could be used)",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-app-cat-id",
            "in": "header",
            "description": "BMO Application Catalogue ID of the consumer of the API.  To be provided if API call is initiated by a BMO Application. BMO Application Catalogue https://appcat.bmogc.net/servlet/ApmServer",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-csrf-token",
            "in": "header",
            "description": "Applicable for cookie session based authentication. Applicable for UI layer to pass session value to support cookie session based authentication",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-content-type",
            "in": "header",
            "description": "pdf or csv",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-expires",
            "in": "header",
            "description": "valid value 0",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-cache-control",
            "in": "header",
            "description": "must-revalidate post-check=0 pre-check=0",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-content-disposition",
            "in": "header",
            "description": "attachment and fileName",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "SendPaymentRequest - Send PAIN001 and respond back with PAIN002 message",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RequestPayload"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsePayload"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request Exception",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the user is not authorized to use this resource",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "Unsupported Media Type",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "504": {
            "description": "Integration or Backend Timeout",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interanctioId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-codegen-request-body-name": "sendPaymentInitiationRequest"
      }
    },
    "/tpp/ach/payment-initiation/customer-direct-debit-initiation": {
      "post": {
        "tags": [
          "PaymentInitiation"
        ],
        "summary": "Send Payment Debit",
        "description": "Payment Initiation - send Payments. receive PAIN008 (Debit) ISO JSON request as input and return PAIN002 ISO JSON as response after interacting with downstream Payment Rail System.",
        "operationId": "DebitPaymentInitiation",
        "x-dataclassification-code": "Confidential",
        "parameters": [
          {
            "name": "x-fapi-interaction-id",
            "in": "header",
            "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-fapi-customer-last-logged-time",
            "in": "header",
            "description": "The time when the Payment Services User last logged in with the Third Party Provider",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-fapi-customer-ip-address",
            "in": "header",
            "description": "The Payment Services User's IP address if the Payment Services User is currently logged in with the Third Party Provider.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-fapi-customer-user-agent",
            "in": "header",
            "description": "Indicates the user-agent that the Payment Services User is using https://www.computerhope.com/jargon/u/useragen.htm",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-fapi-financial-id",
            "in": "header",
            "description": "The unique id of the financial institution to which the request is issued.  BMO is 001",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-crypto-key",
            "in": "header",
            "description": "Crypto Key for payload decryption",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-request-id",
            "in": "header",
            "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-sourcesystem-id",
            "in": "header",
            "description": "Source System ID to identify source, use 'OPENGENAPI'",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-api-key",
            "in": "header",
            "description": "The unique id used to identify caller of the API. (For legacy, AppCatId value could be used)",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-app-cat-id",
            "in": "header",
            "description": "BMO Application Catalogue ID of the consumer of the API.  To be provided if API call is initiated by a BMO Application. BMO Application Catalogue https://appcat.bmogc.net/servlet/ApmServer",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-csrf-token",
            "in": "header",
            "description": "Applicable for cookie session based authentication. Applicable for UI layer to pass session value to support cookie session based authentication",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-content-type",
            "in": "header",
            "description": "pdf or csv",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-expires",
            "in": "header",
            "description": "valid value 0",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-cache-control",
            "in": "header",
            "description": "must-revalidate post-check=0 pre-check=0",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "x-content-disposition",
            "in": "header",
            "description": "attachment and fileName",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "SendPaymentRequest - Send PAIN008 and respond back with PAIN002 message",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RequestPayload"
              }
            }
          },
          "required": true
        },
        "security": [
          {
            "api-key-1": [],
            "OAuth": [
              "bmo.tppach.payment-initiation.create"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResponsePayload"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request Exception",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden - the user is not authorized to use this resource",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "415": {
            "description": "Unsupported Media Type",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "504": {
            "description": "Integration or Backend Timeout",
            "headers": {
              "x-fapi-interaction-id": {
                "description": "If the FDX-interactionId is provided by the caller then APIC will populate the x-request-id with FDX-interactionId. If FDX-interactionId is not provided by the caller then APIC will generate the x-request-id to send it to downstream.",
                "schema": {
                  "type": "string"
                },
                "required": true
              },
              "x-request-id": {
                "description": "Correlates HTTP requests between a client and server. Uniquely identifies each API call.",
                "schema": {
                  "type": "string"
                },
                "required": true
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "x-codegen-request-body-name": "sendPaymentInitiationRequest"
      }
    },
    "/tpp/ach/payment-initiation/get-transaction-status/get": {
      "post": {
        "tags": [
          "PaymentStatus"
        ],
        "summary": "Obtain Payment Status",
        "description": "PaymentStatus which enquiry sends CAMT005 ISO JSON Request standard messages and enquires and responds back w

# --- truncated at 32 KB (70 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/bmo/refs/heads/main/openapi/bmo-ach-payments-openapi.json