# JPMC-PDP Documentation from https://developer.payments.jpmorgan.com # Blockchain Deposit Account (BDA) Balances API ```yaml openapi: 3.0.0 info: title: Blockchain Deposit Account Balances API description: Access real-time and historical balances for your eligible J.P. Morgan accounts, so you can easily track cash positions and reconcile transactions across up to 100 accounts per request. This API lets you retrieve both current-day and up to 45 days of balance history, helping you streamline your treasury operations and reporting. version: 2.0.7 servers: - url: https://api.payments.jpmorgan.com/account/v2 description: PRODUCTION - OAUTH - url: https://api-mock.payments.jpmorgan.com/account/v2 description: MOCK security: - BearerAuth: [] tags: - name: Balances description: Balance Information paths: /accounts/balances: get: summary: Retrieve Balances of All Eligible Accounts description: "Returns the current date balances of all eligible accounts\n\nThe following constraints apply when sending requests to this endpoint: \n- Supported J.P. Morgan account type(s) :BDA \n- The maximum number of accounts (pageSize) that can be returned in single API call is 100. If the pageSize is not provided, the default is 25 accounts." operationId: getAccountsBalances tags: - Balances parameters: - $ref: '#/components/parameters/RequestId' - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Cursor' responses: '200': description: Successful Account Balances Response content: application/json: schema: $ref: '#/components/schemas/AccountBalances' examples: Example-Account-Balances-Response-Current-Day-US: $ref: '#/components/examples/Account-Balances-Response-Current-Day-US' '400': description: "Bad Request \n\nList of error codes and usage descriptions\n | Error Code | Usage | \n |-------------------|-----------------------------|\n | `10001` | Mandatory field missing | \n | `10002` | Minimum length violation \t | \n | `10003` | Maximum length violation\t | \n | `10100` | Minimum value violation | \n | `10101` | Maximum value violation | \n | `10102` | Range violation | \n | `10103` | Bad format | \n | `10104` | Bad value | \n | `10105` | Unexpected field | \n | `10199` | Other | " content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: "Forbidden. \n| Error Code | Description |\n|---------------|--------------------------------------------|\n| 14000 | Security failure | " content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/Error' '503': description: Service Unavailable content: application/json: schema: $ref: '#/components/schemas/Error' /accounts/balances/inquiry: post: summary: Inquire Balances description: "Returns the historical day account balances that match valid request criteria. The following constraints apply when sending requests to this endpoint: \n- Supported J.P. Morgan account type(s) : BDA \n- The API supports the retrieval of account balances data for up to 45 days for BDA\n- When querying using date range (fromDate & toDate), the range can not exceed 45 days\n- The dates queried represent the current business day of the location of an account \n- The maximum number of accounts (pageSize) that can be returned in single API call is 100. If the pageSize is not provided, the default is 25 accounts." operationId: inquireAccountsBalances tags: - Balances parameters: - $ref: '#/components/parameters/PageSize' - $ref: '#/components/parameters/Cursor' - $ref: '#/components/parameters/RequestId' requestBody: content: application/json: schema: $ref: '#/components/schemas/BalanceInquiry' examples: BalanceInquiry-Current-Day-US: $ref: '#/components/examples/BalanceInquiry-Current-Day-Example-US' BalanceInquiry-Historical-Day-US: $ref: '#/components/examples/BalanceInquiry-Historical-Day-Example-US' responses: '200': description: Successful Account Balances Response content: application/json: schema: $ref: '#/components/schemas/AccountBalances' examples: Example-Account-Balances-Response-Current-Day-US: $ref: '#/components/examples/Account-Balances-Response-Current-Day-US' Example-Account-Balances-Response-Historical-Day-US: $ref: '#/components/examples/Account-Balances-Response-Historical-Day-US' Empty-Account-Balances-Response: $ref: '#/components/examples/Empty-Account-Balances-Response' '400': description: "Bad Request. \n List of error codes and usage descriptions\n \n | Error Code | Usage | \n |-------------------|-----------------------------|\n | `10001` | Mandatory field missing | \n | `10002` | Minimum length violation \t | \n | `10003` | Maximum length violation\t | \n | `10100` | Minimum value violation | \n | `10101` | Maximum value violation | \n | `10102` | Range violation | \n | `10103` | Bad format | \n | `10104` | Bad value | \n | `10105` | Unexpected field | \n | `10199` | Other | " content: application/json: schema: $ref: '#/components/schemas/Error' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: "Forbidden \n| Error Code | Description |\n|---------------|--------------------------------------------|\n| 14000 | Security failure | " content: application/json: schema: $ref: '#/components/schemas/Error' '500': description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/Error' '503': description: Service Unavailable content: application/json: schema: $ref: '#/components/schemas/Error' components: securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: JWT schemas: AccountsInquiry: type: object title: AccountsInquiry description: Accounts schema used to provide the inquiry criteria based on which account information is retrieved properties: accountIdentifiers: type: array description: List of account numbers and financial institutions items: $ref: '#/components/schemas/NumberAndFinancialInstitution' minItems: 1 maxItems: 100 required: - accountIdentifiers AccountsResponse: type: object title: AccountsResponse required: - accounts - metadata properties: accounts: type: array minItems: 0 maxItems: 100 items: $ref: '#/components/schemas/Account' metadata: type: object title: Account Metadata required: - cursor properties: cursor: $ref: '#/components/schemas/Cursor' Account: type: object title: Account description: An account object contains the customer account related properties required: - number - type - currency - financialInstitutionIds properties: number: type: string description: "JPMorgan account number\n\n**Maximum length supported for different accounts**:\n\n | Account Type \t| Maximum length limits |\n |-----------------------------|------------------------|\n | BDA | 10 |" minLength: 1 maxLength: 10 type: $ref: '#/components/schemas/AccountType' name: type: string description: Account legal name as provided by customer currency: $ref: '#/components/schemas/ISOCurrencyCode' financialInstitutionIds: type: array description: Bank or Financial Institution identifier items: $ref: '#/components/schemas/FinancialInstitution' minItems: 1 maxItems: 1 NumberAndFinancialInstitution: type: object title: NumberAndFinancialInstitution description: Customer account number and Financial Institution (Bank) information properties: number: type: string description: "JPMorgan account number\n\n**Maximum length supported for different accounts**:\n\n | Account Type \t| Maximum length limits |\n |-----------------------------|------------------------|\n | BDA | 10 |" minLength: 1 maxLength: 10 financialInstitutionId: $ref: '#/components/schemas/FinancialInstitution' required: - number - financialInstitutionId AlternateAccountIdentifier: type: object title: AlternateAccountIdentifier description: An alternate form of identifier that can be used to identify the customer account properties: id: type: string description: Alternate account identifier idType: type: string description: The identifier type enum: - IBAN required: - id - idType AccountType: type: string description: The type of account AccountIdentifier: type: object description: Contains account number and financial institution to uniquely identify a customer account properties: number: type: string description: Account number minLength: 1 maxLength: 10 financialInstitutionId: type: object title: FinancialInstitution description: Financial institution identifier required: - id - idType properties: id: type: string description: Bank or Financial institution identifier minLength: 8 maxLength: 11 idType: $ref: '#/components/schemas/IdType' required: - number - financialInstitutionId FinancialInstitution: type: object title: FinancialInstitution description: Financial Institution identifier required: - id - idType properties: id: type: string description: Bank or Financial Institution identifier minLength: 8 maxLength: 11 name: type: string description: Name of the Bank or Financial Institution idType: $ref: '#/components/schemas/IdType' IdType: type: string description: The Id type of the Bank or Financial Institution enum: - BIC BalanceInquiry: type: object title: BalanceInquiry description: Balance schema used to provide the inquiry criteria based on which balance information is retrieved properties: accountIdentifiers: type: array description: List of account numbers items: $ref: '#/components/schemas/AccountIdentifier' minItems: 1 maxItems: 25 balanceTypes: type: array description: "Optional list of balance types for filtering balances\n \n***Refer the section below for the supported balance types*** \n \n***Account Types: BDA***\n \n Applicable balance types for historical balance requests\n - CLOSING_AVAILABLE\n - CLOSING_BOOKED\n Applicable balance types for same day balance requests\n - INTERIM_AVAILABLE\n - INTERIM_BOOKED" items: type: string minItems: 1 maxItems: 4 fromDate: type: string format: date description: "The earliest date balances should be returned\n \n By default this will be the current business day of the location of an account\n \n***MUST be used in combination with toDate. Where only fromDate is provided the toDate will be fromDate + 45days. Must follow ISO 8601 date format e.g YYYY-MM-DD***" toDate: type: string format: date description: "Used to specify the latest date balances should be returned \n \n By default this will be the current business day of the location of an account \n \n***MUST be used in combination with fromDate. Where only toDate is provided the fromDate will be toDate - 45 days. Must follow ISO 8601 date format e.g YYYY-MM-DD***" required: - accountIdentifiers AccountBalances: type: object title: AccountBalances properties: accountBalances: type: array items: $ref: '#/components/schemas/AccountBalance' minItems: 0 maxItems: 99 metadata: type: object title: Metadata properties: cursor: $ref: '#/components/schemas/Cursor' required: - accountBalances - metadata AccountBalance: type: object title: AccountBalance description: Account balance information properties: account: $ref: '#/components/schemas/Account' balances: type: array description: List of balances captured based on posting dates items: $ref: '#/components/schemas/Balance' minItems: 1 maxItems: 100 required: - account - balances Balance: type: object title: Balance properties: type: type: string description: "Balance types\n \n***Refer the section below for the supported balance types*** \n ***Account Types: BDA*** \n \n Applicable balance types for historical balance requests\n - CLOSING_AVAILABLE\n - CLOSING_BOOKED\n Applicable balance types for same day balance requests\n \n- INTERIM_AVAILABLE\n \n- INTERIM_BOOKED\n" bookDate: type: string format: date description: This is the date when the balance will be booked. amount: $ref: '#/components/schemas/SignedDecimal' required: - type - bookDate - amount ISOCurrencyCode: description: ISO 4217 Alpha-3 Currency Code type: string minLength: 3 maxLength: 3 pattern: ^[A-Z]{3}$ example: USD SignedDecimal: description: "A String representation of a (potential) decimal number \n \n**Follows ISO 4217 standards to represent minor unit currencies**" type: string minLength: 1 maxLength: 100 pattern: ^[+-]?\d+(\.\d+)?$ example: '-123.45' Cursor: type: object title: Cursor required: - this - first properties: first: $ref: '#/components/schemas/CursorId' prev: $ref: '#/components/schemas/CursorId' this: $ref: '#/components/schemas/CursorId' next: $ref: '#/components/schemas/CursorId' goodUntil: type: string format: date-time CursorId: type: string description: For selecting a cursor when using pagination minLength: 1 maxLength: 50 PageSize: type: integer format: int32 minimum: 1 maximum: 100 default: 25 description: For pagination, the total number of results to return Error: type: object title: Error required: - title properties: title: type: string minLength: 1 maxLength: 99 description: Short human readable title of the error httpStatus: type: integer format: int32 description: Should be identical to the HTTP status code of the response traceId: type: string minLength: 1 maxLength: 99 description: JPMC assigned traced identifier requestId: type: string minLength: 1 maxLength: 99 description: Client generated identifier for the current request invocation context: type: array minItems: 1 maxItems: 99 items: $ref: '#/components/schemas/ErrorContext' ErrorContext: type: object title: ErrorContext description: |- The following is a list of error codes that may be returned and their associated rule definitions | Error Code | Definition | | --- | --- | | **10001** | Mandatory field is missing | | **10002** | Minimum length violation | | **10003** | Maximum length violation | | **10100** | Minimum value violation | | **10101** | Maximum value violation | | **10102** | Range violation | | **10103** | Bad Format | | **10104** | Bad Value | | **10105** | Unexpected Field | | **10199** | Other | required: - message properties: code: type: string minLength: 5 maxLength: 5 description: JPMC Short code that identifies the error - publicly cataloged and documented message: type: string minLength: 1 maxLength: 99 description: Human readable textual description of the error field: type: string minLength: 1 maxLength: 99 description: The field name causing the error location: type: string description: The part of the request the error is located enum: - BODY - PATH - QUERY - HEADER examples: AccountsList-Response-US: value: accounts: - number: '1234567890' type: BDA currency: USD name: Customer BDA Account financialInstitutionIds: - id: CHASUS33MCY idType: BIC metadata: cursor: first: 9c0af3e7-0375-4343-a8bb-a2fc9ee51621 this: 9c0af3e7-0375-4343-a8bb-a2fc9ee51621 AccountsListInquiryResponse: value: accounts: - number: '1234567890' type: BDA currency: USD name: Customer BDA Account financialInstitutionIds: - id: CHASUS33MCY idType: BIC metadata: cursor: first: 9c0af3e7-0375-4343-a8bb-a2fc9ee51621 this: 9c0af3e7-0375-4343-a8bb-a2fc9ee51621 Account-Balances-Response-Current-Day-US: value: accountBalances: - account: number: '1234567890' type: BDA currency: USD name: Customer BDA Account financialInstitutionIds: - id: CHASUS33MCY idType: BIC balances: - type: INTERIM_AVAILABLE amount: '5000.00' bookDate: '2024-10-06' - type: INTERIM_BOOKED amount: '5000.00' bookDate: '2024-10-06' metadata: cursor: first: 9c0af3e7-0375-4343-a8bb-a2fc9ee51621 this: 9c0af3e7-0375-4343-a8bb-a2fc9ee51621 goodUntil: '2024-10-06T00:00:00.000Z' Account-Balances-Response-Historical-Day-US: value: accountBalances: - account: number: '1234567890' type: BDA currency: USD name: Customer BDA Account financialInstitutionIds: - id: CHASUS33MCY idType: BIC balances: - type: CLOSING_AVAILABLE amount: '5000.00' bookDate: '2024-10-05' - type: CLOSING_BOOKED amount: '5000.00' bookDate: '2024-10-05' - type: CLOSING_AVAILABLE amount: '5000.00' bookDate: '2024-10-04' - type: CLOSING_BOOKED amount: '5000.00' bookDate: '2024-10-04' metadata: cursor: first: 9c0af3e7-0375-4343-a8bb-a2fc9ee51621 this: 9c0af3e7-0375-4343-a8bb-a2fc9ee51621 goodUntil: '2024-10-05T00:00:00.000Z' Empty-Accounts-Response: value: accounts: [] metadata: cursor: first: 00000000-0000-0000-0000-000000000000 this: 00000000-0000-0000-0000-000000000000 Empty-Account-Balances-Response: value: accountBalances: [] metadata: cursor: first: 00000000-0000-0000-0000-000000000000 this: 00000000-0000-0000-0000-000000000000 AccountsInquiry-Example: value: accountIdentifiers: - number: '1234567890' financialInstitutionId: id: CHASUS33MCY idType: BIC BalanceInquiry-Current-Day-Example-US: value: accountIdentifiers: - number: '1234567890' financialInstitutionId: id: CHASUS33MCY idType: BIC BalanceInquiry-Historical-Day-Example-US: value: accountIdentifiers: - number: '1234567890' financialInstitutionId: id: CHASUS33MCY idType: BIC fromDate: '2024-10-04' toDate: '2024-10-05' parameters: PageSize: name: pageSize in: query description: For pagination, the total number of results to return required: false schema: $ref: '#/components/schemas/PageSize' Cursor: name: cursor in: query description: For selecting a cursor when using pagination required: false schema: type: string format: uuid RequestId: name: Request-Id in: header description: "Client provided identifier used to distinguish and track individual requests. \n***When provided in the request, the id is also returned in the response during error cases for troubleshooting. Our recommendation is to use UUIDv4***" required: false schema: type: string minLength: 1 maxLength: 36 x-jpmc-securityDefinitions: JPMC-OAuth2: {} x-jpmc-security: {} ```