Open Banking - Third-Party Providers API (TPP)

Tribe Payments Open Banking Third-Party Providers (TPP) API (v2) - the TPP-facing side of Tribe's Open Banking product for initiating account-to-account payments (PIS) and retrieving account information (AIS) from connected banks, authenticated with a bearer token plus X-Client-ID, with a Payment Webhooks interface. Harvested verbatim from the Tribe developer portal.

OpenAPI Specification

tribe-payments-obb-tpp-api-openapi.json Raw ↑
{
  "openapi": "3.0.0",
  "info": {
    "title": "Open Banking: TPP API v2",
    "description": "Endpoints for interacting with ASPSPs accounts.",
    "version": "2.0.0"
  },
  "servers": [
    {
      "url": "%tpp_api_url%/tpp/v2"
    }
  ],
  "tags": [
    {
      "name": "Account",
      "description": "Endpoints for confirming funds in the account."
    },
    {
      "name": "Payment",
      "description": "Endpoints for executing payments."
    },
    {
      "name": "Bulk payments",
      "description": "Endpoints for executing bulk payments."
    },
    {
      "name": "General",
      "description": "Endpoints for interacting with the general data."
    },
    {
      "name": "Funds confirmation",
      "description": "Endpoints for confirming funds in the account."
    },
    {
      "name": "Direct payments",
      "description": "Some supported ASPSPs provide a more direct approach to some actions. Instead of retrieving prior user consent, actions can be executed directly,\nfollowed by an SCA confirmation in the next step. [Direct action security](#security--direct-security) is also different from the usual action [security](#security)."
    },
    {
      "name": "Direct payments without Bank",
      "description": "Endpoints for executing direct payments (without acquiring previous consent)."
    }
  ],
  "components": {
    "securitySchemes": {
      "tokenAuth": {
        "type": "http",
        "scheme": "bearer"
      },
      "clientId": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Client-ID"
      }
    },
    "schemas": {
      "Account": {
        "type": "object",
        "required": [
          "resourceId",
          "currency"
        ],
        "properties": {
          "resourceId": {
            "type": "string",
            "description": "The account ID.",
            "example": "123",
            "maxLength": 255
          },
          "iban": {
            "description": "The IBAN of the account. For some providers, certain accounts might not have this information (e.g., an account for a credit card).",
            "type": "string",
            "example": "GB29NWBK60161331926819",
            "maxLength": 34
          },
          "bban": {
            "type": "string",
            "description": "The local ASPSP identifier of the account.",
            "example": "29823529",
            "maxLength": 30
          },
          "accountNumber": {
            "type": "string",
            "description": "The account number. Used to identify the account in the United Kingdom.",
            "minLength": 8,
            "maxLength": 8,
            "example": "29823529"
          },
          "sortCode": {
            "type": "string",
            "description": "The sort code. Used to identify the account in the United Kingdom.",
            "minLength": 6,
            "maxLength": 6,
            "example": "902127"
          },
          "currency": {
            "type": "string",
            "description": "The account currency in ISO 4217 alpha-3 currency code.",
            "example": "EUR",
            "maxLength": 3,
            "minLength": 3
          },
          "paymentSchemes": {
            "type": "array",
            "description": "A list of possible [Payment Schemes](#appendix--enum--payment-schemes) when the account is used as debtor during the payment.",
            "items": {
              "type": "string",
              "example": "SCT",
              "description": "Describes which payment scheme is used. See [Payment Schemes](#appendix--enum--payment-schemes) for possible values.",
              "enum": [
                "FPS",
                "BACS",
                "CHAPS",
                "SCT",
                "SCTI",
                "SWIFT"
              ]
            }
          },
          "name": {
            "type": "string",
            "description": "The name of the account.",
            "example": "Main checking account",
            "maxLength": 255
          }
        }
      },
      "AccountResponse": {
        "type": "object",
        "required": [
          "account"
        ],
        "properties": {
          "account": {
            "$ref": "#/components/schemas/Account"
          }
        }
      },
      "AccountListResponse": {
        "type": "object",
        "required": [
          "accounts"
        ],
        "properties": {
          "accounts": {
            "type": "array",
            "description": "The list of accounts.",
            "items": {
              "$ref": "#/components/schemas/Account"
            }
          }
        }
      },
      "AccountBalance": {
        "type": "object",
        "description": "The object with the balance amount and currency.",
        "required": [
          "balanceAmount",
          "balanceType"
        ],
        "properties": {
          "balanceAmount": {
            "$ref": "#/components/schemas/StructuredAmount"
          },
          "balanceType": {
            "type": "string",
            "description": "[Balance type](#appendix--enum--balance-type)",
            "example": "interimBooked",
            "enum": [
              "openingBooked",
              "interimAvailable",
              "interimBooked",
              "forwardAvailable",
              "nonInvoiced"
            ]
          }
        }
      },
      "AccountBalanceList": {
        "type": "object",
        "required": [
          "balances"
        ],
        "properties": {
          "balances": {
            "type": "array",
            "description": "The array containing a list of balances.",
            "items": {
              "$ref": "#/components/schemas/AccountBalance"
            }
          }
        }
      },
      "AccountTransaction": {
        "type": "object",
        "required": [
          "transactionAmount"
        ],
        "properties": {
          "transactionId": {
            "type": "string",
            "description": "The transaction ID.",
            "example": "123",
            "maxLength": 255
          },
          "creditorName": {
            "type": "string",
            "description": "The name of the creditor/receiver.",
            "example": "John Doe",
            "maxLength": 70
          },
          "creditorAccount": {
            "$ref": "#/components/schemas/AccountReference"
          },
          "debtorName": {
            "type": "string",
            "description": "The name of the debtor/sender.",
            "example": "John Doe",
            "maxLength": 70
          },
          "debtorAccount": {
            "$ref": "#/components/schemas/AccountReference"
          },
          "remittanceInformationUnstructured": {
            "type": "string",
            "description": "An unstructured reference of the transaction.",
            "example": "Ref1234",
            "maxLength": 140
          },
          "remittanceInformationStructured": {
            "$ref": "#/components/schemas/RemittanceInformationStructured"
          },
          "transactionAmount": {
            "$ref": "#/components/schemas/StructuredAmount"
          },
          "valueDate": {
            "type": "string",
            "description": "The date in the YYYY-MM-DD format at which assets become available.",
            "example": "2022-10-10",
            "maxLength": 10,
            "minLength": 10
          },
          "bookingDate": {
            "type": "string",
            "description": "The date when an entry is posted to an account in the YYYY-MM-DD format.",
            "example": "2022-10-10",
            "maxLength": 10,
            "minLength": 10
          }
        }
      },
      "AccountTransactionList": {
        "type": "object",
        "description": "The object containing a list of booked and pending transactions.",
        "properties": {
          "booked": {
            "type": "array",
            "description": "A list of booked transactions of the account.",
            "items": {
              "$ref": "#/components/schemas/AccountTransaction"
            }
          },
          "pending": {
            "type": "array",
            "description": "A list of pending transactions of the account.",
            "items": {
              "$ref": "#/components/schemas/AccountTransaction"
            }
          }
        }
      },
      "AccountTransactionsResponse": {
        "type": "object",
        "description": "The response object containing a list of transactions.",
        "properties": {
          "transactions": {
            "$ref": "#/components/schemas/AccountTransactionList"
          },
          "_links": {
            "$ref": "#/components/schemas/NextLinks"
          }
        }
      },
      "RemittanceInformationStructured": {
        "type": "object",
        "required": [
          "reference"
        ],
        "description": "The reference as contained in the structured remittance reference structure.",
        "properties": {
          "reference": {
            "type": "string",
            "description": "The actual reference.",
            "example": "ORD123",
            "maxLength": 35
          },
          "referenceType": {
            "type": "string",
            "description": "The remittance information type.",
            "example": "UNSTRUCTURED",
            "maxLength": 35
          }
        }
      },
      "StructuredAmount": {
        "description": "An amount with a currency.",
        "type": "object",
        "required": [
          "amount",
          "currency"
        ],
        "properties": {
          "amount": {
            "type": "string",
            "description": "The amount of funds in the balance. The decimal separator is dot.",
            "example": "123.22",
            "maxLength": 14
          },
          "currency": {
            "type": "string",
            "description": "The account currency in ISO 4217 alpha-3 currency code.",
            "example": "EUR",
            "maxLength": 3,
            "minLength": 3
          }
        }
      },
      "AccountReference": {
        "type": "object",
        "description": "The identifier of the addressed account.",
        "properties": {
          "iban": {
            "description": "The IBAN of the account.",
            "type": "string",
            "example": "GB29NWBK60161331926819",
            "maxLength": 34
          },
          "bban": {
            "type": "string",
            "description": "The local ASPSP identifier of the account.",
            "example": "29823529",
            "maxLength": 30
          },
          "accountNumber": {
            "type": "string",
            "description": "The account number. Used to identify the account in the United Kingdom.\n",
            "minLength": 8,
            "maxLength": 8,
            "example": "29823529"
          },
          "sortCode": {
            "type": "string",
            "description": "The sort code. Used to identify the account in the United Kingdom.",
            "minLength": 6,
            "maxLength": 6,
            "example": "902127"
          }
        }
      },
      "BankReference": {
        "type": "object",
        "description": "The information about the payment receiver's institution. Mandatory to use with the [SWIFT](#appendix--enum--payment-schemes) payment scheme.",
        "properties": {
          "name": {
            "type": "string",
            "description": "The name of the institution.",
            "example": "Example bank"
          },
          "bic": {
            "type": "string",
            "description": "The Business Identifier Code is an international standard for routing business transactions and identifying business parties.",
            "example": "FAKEBICX"
          },
          "country": {
            "type": "string",
            "description": "Two characters as defined by ISO 3166.",
            "maxLength": 2,
            "minLength": 2,
            "example": "GB"
          }
        }
      },
      "EmptyAdditionalErrors": {
        "type": "array",
        "example": [],
        "items": {
          "$ref": "#/components/schemas/AdditionalError"
        }
      },
      "UnauthorizedError": {
        "type": "object",
        "description": "The unauthorized error object example.",
        "required": [
          "code",
          "requestId",
          "timestamp"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "The message code to explain the nature of the underlying error.",
            "example": "TOKEN_INVALID"
          },
          "title": {
            "type": "string",
            "description": "The short, human-readable description of the error.",
            "example": "OAuth token not valid",
            "maxLength": 70
          },
          "timestamp": {
            "type": "string",
            "description": "ISO-8601 timestamp",
            "example": "2023-04-19T13:33:42+0000"
          },
          "requestId": {
            "type": "string",
            "description": "The request ID as communicated in the `X-Request-Id` header.",
            "example": "39c97edf-7469-42af-96ca-169a902fd8a6"
          },
          "additionalErrors": {
            "$ref": "#/components/schemas/EmptyAdditionalErrors"
          }
        }
      },
      "ForbiddenError": {
        "type": "object",
        "description": "The forbidden error object example.",
        "required": [
          "code",
          "requestId",
          "timestamp"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "The message code to explain the nature of the underlying error.",
            "example": "ROLE_INVALID"
          },
          "title": {
            "type": "string",
            "description": "The short, human-readable description of the error.",
            "example": "Role not valid for current resource",
            "maxLength": 70
          },
          "timestamp": {
            "type": "string",
            "description": "ISO-8601 timestamp",
            "example": "2023-04-19T13:33:42+0000"
          },
          "requestId": {
            "type": "string",
            "description": "The request ID as communicated in the `X-Request-Id` header.",
            "example": "39c97edf-7469-42af-96ca-169a902fd8a6"
          },
          "additionalErrors": {
            "$ref": "#/components/schemas/EmptyAdditionalErrors"
          }
        }
      },
      "NotFoundError": {
        "type": "object",
        "description": "Not found.",
        "required": [
          "code",
          "requestId",
          "timestamp"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "The message code to explain the nature of the underlying error.",
            "example": "RESOURCE_NOT_FOUND"
          },
          "title": {
            "type": "string",
            "description": "The short, human-readable description of the error.",
            "example": "Account not found",
            "maxLength": 70
          },
          "timestamp": {
            "type": "string",
            "description": "ISO-8601 timestamp",
            "example": "2023-04-19T13:33:42+0000"
          },
          "requestId": {
            "type": "string",
            "description": "The request ID as communicated in the `X-Request-Id` header.",
            "example": "39c97edf-7469-42af-96ca-169a902fd8a6"
          },
          "additionalErrors": {
            "$ref": "#/components/schemas/EmptyAdditionalErrors"
          }
        }
      },
      "AccessExceededError": {
        "type": "object",
        "description": "The forbidden error object example.",
        "required": [
          "code",
          "requestId",
          "timestamp"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "The message code to explain the nature of the underlying error.",
            "example": "ACCESS_EXCEEDED"
          },
          "title": {
            "type": "string",
            "description": "The short, human-readable description of the error.",
            "example": "Exceeded API limit",
            "maxLength": 70
          },
          "timestamp": {
            "type": "string",
            "description": "ISO-8601 timestamp",
            "example": "2023-04-19T13:33:42+0000"
          },
          "requestId": {
            "type": "string",
            "description": "The request ID as communicated in the `X-Request-Id` header.",
            "example": "39c97edf-7469-42af-96ca-169a902fd8a6"
          },
          "additionalErrors": {
            "$ref": "#/components/schemas/EmptyAdditionalErrors"
          }
        }
      },
      "InternalServerError": {
        "type": "object",
        "description": "The forbidden error object example.",
        "required": [
          "code",
          "requestId",
          "timestamp"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "The message code to explain the nature of the underlying error.",
            "example": "INTERNAL_ERROR"
          },
          "title": {
            "type": "string",
            "description": "The short, human-readable description of the error.",
            "example": "Internal Error",
            "maxLength": 70
          },
          "timestamp": {
            "type": "string",
            "description": "ISO-8601 timestamp",
            "example": "2023-04-19T13:33:42+0000"
          },
          "requestId": {
            "type": "string",
            "description": "The request ID as communicated in the `X-Request-Id` header.",
            "example": "39c97edf-7469-42af-96ca-169a902fd8a6"
          },
          "additionalErrors": {
            "$ref": "#/components/schemas/EmptyAdditionalErrors"
          }
        }
      },
      "NotAllowedError": {
        "type": "object",
        "description": "A forbidden HTTP method.",
        "required": [
          "code",
          "requestId",
          "timestamp"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "The message code to explain the nature of the underlying error.",
            "example": "SERVICE_INVALID"
          },
          "title": {
            "type": "string",
            "description": "The short, human-readable description of the error.",
            "example": "Used HTTP method not supported for current action",
            "maxLength": 70
          },
          "timestamp": {
            "type": "string",
            "description": "ISO-8601 timestamp",
            "example": "2023-04-19T13:33:42+0000"
          },
          "requestId": {
            "type": "string",
            "description": "The request ID as communicated in the `X-Request-Id` header.",
            "example": "39c97edf-7469-42af-96ca-169a902fd8a6"
          },
          "additionalErrors": {
            "$ref": "#/components/schemas/EmptyAdditionalErrors"
          }
        }
      },
      "NotAcceptableError": {
        "type": "object",
        "description": "An unsupported `Accept` header.",
        "required": [
          "code",
          "requestId",
          "timestamp"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "The message code to explain the nature of the underlying error.",
            "example": "REQUESTED_FORMATS_INVALID"
          },
          "title": {
            "type": "string",
            "description": "The short, human-readable description of the error.",
            "example": "Only application/json supported",
            "maxLength": 70
          },
          "timestamp": {
            "type": "string",
            "description": "ISO-8601 timestamp",
            "example": "2023-04-19T13:33:42+0000"
          },
          "requestId": {
            "type": "string",
            "description": "The request ID as communicated in the `X-Request-Id` header.",
            "example": "39c97edf-7469-42af-96ca-169a902fd8a6"
          },
          "additionalErrors": {
            "$ref": "#/components/schemas/EmptyAdditionalErrors"
          }
        }
      },
      "UnsupportedMediaTypeError": {
        "type": "object",
        "description": "An unsupported `Content-Type` header.",
        "required": [
          "code",
          "requestId",
          "timestamp"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "The message code to explain the nature of the underlying error.",
            "example": "REQUEST_FORMAT_INVALID"
          },
          "title": {
            "type": "string",
            "description": "The short, human-readable description of the error.",
            "example": "Only application/json supported",
            "maxLength": 70
          },
          "timestamp": {
            "type": "string",
            "description": "ISO-8601 timestamp",
            "example": "2023-04-19T13:33:42+0000"
          },
          "requestId": {
            "type": "string",
            "description": "The request ID as communicated in the `X-Request-Id` header.",
            "example": "39c97edf-7469-42af-96ca-169a902fd8a6"
          },
          "additionalErrors": {
            "$ref": "#/components/schemas/EmptyAdditionalErrors"
          }
        }
      },
      "AdditionalError": {
        "type": "object",
        "description": "The error object providing additional error information.",
        "required": [
          "code"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "The message code to explain the nature of the underlying error.",
            "example": "FORMAT_ERROR"
          },
          "title": {
            "type": "string",
            "description": "The short, human-readable description of the error.",
            "example": "Error in provided content",
            "maxLength": 70
          },
          "details": {
            "type": "string",
            "description": "The longer, human-readable description of the error.",
            "example": "Longer description of error",
            "maxLength": 500
          }
        }
      },
      "Error": {
        "type": "object",
        "description": "The generic error object example.",
        "required": [
          "code",
          "requestId",
          "timestamp"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "The message code to explain the nature of the underlying error.",
            "example": "FORMAT_ERROR"
          },
          "title": {
            "type": "string",
            "description": "The short, human-readable description of the error.",
            "example": "Error in provided content",
            "maxLength": 70
          },
          "timestamp": {
            "type": "string",
            "description": "ISO-8601 timestamp",
            "example": "2023-04-19T13:33:42+0000"
          },
          "requestId": {
            "type": "string",
            "description": "The request ID as communicated in the `X-Request-Id` header.",
            "example": "39c97edf-7469-42af-96ca-169a902fd8a6"
          },
          "additionalErrors": {
            "type": "array",
            "description": "Might be used if more than one error is to be communicated.",
            "items": {
              "$ref": "#/components/schemas/AdditionalError"
            }
          }
        }
      },
      "FundsConfirmationRequest": {
        "type": "object",
        "description": "Contains a reference of the account that is being queried and a queried amount.",
        "required": [
          "account",
          "instructedAmount"
        ],
        "properties": {
          "account": {
            "$ref": "#/components/schemas/AccountReference"
          },
          "instructedAmount": {
            "$ref": "#/components/schemas/StructuredAmount"
          }
        }
      },
      "FundsConfirmationResponse": {
        "type": "object",
        "description": "Contains an answer if amount of funds is available or not.",
        "required": [
          "fundsAvailable"
        ],
        "properties": {
          "fundsAvailable": {
            "type": "boolean",
            "description": "A boolean value: `true` if funds are available, `false` otherwise.",
            "example": true
          }
        }
      },
      "Bank": {
        "type": "object",
        "required": [
          "name",
          "identifier"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Name.",
            "example": "Swedbank"
          },
          "identifier": {
            "type": "string",
            "description": "Bank identifier.",
            "example": "SWED22LT"
          },
          "scopes": {
            "type": "array",
            "description": "Array of scopes.",
            "example": [
              "payments.single",
              "accounts",
              "accounts.balances",
              "accounts.transactions"
            ],
            "items": {
              "type": "string",
              "description": "Available scopes in consent.",
              "enum": [
                "accounts",
                "accounts.balances",
                "accounts.transactions",
                "payments.single",
                "payments.bulk",
                "funds_confirmations"
              ]
            }
          },
          "paymentSchemes": {
            "type": "array",
            "description": "Array of payment schemes.",
            "example": [
              "CHAPS",
              "SCT",
              "SCTI"
            ],
            "items": {
              "type": "string",
              "example": "SCT",
              "description": "Describes which payment scheme is used. See [Payment Schemes](#appendix--enum--payment-schemes) for possible values.",
              "enum": [
                "FPS",
                "BACS",
                "CHAPS",
                "SCT",
                "SCTI",
                "SWIFT"
              ]
            }
          },
          "country": {
            "type": "string",
            "description": "Country.",
            "example": "LT"
          },
          "directPaymentSupport": {
            "type": "boolean",
            "description": "Indicates whether the bank supports direct API payments.",
            "example": false
          }
        }
      },
      "NextLinks": {
        "type": "object",
        "description": "Links pointing to other pages.",
        "properties": {
          "next": {
            "$ref": "#/components/schemas/NextLink"
          }
        }
      },
      "PaymentLinks": {
        "type": "object",
        "description": "Contains redirect information for a payment confirmation.",
        "properties": {
          "scaRedirect": {
            "$ref": "#/components/schemas/ScaRedirect"
          }
        }
      },
      "NextLink": {
        "type": "object",
        "description": "The link pointing to the following page.",
        "properties": {
          "href": {
            "type": "string",
            "description": "The URL of the following page.",
            "example": "/tpp/v2/banks?page=4&limit=5"
          }
        }
      },
      "ScaRedirect": {
        "type": "object",
        "description": "The link to which to redirect the PSU browser for a SCA confirmation of the payment.",
        "properties": {
          "href": {
            "type": "string",
            "description": "A URL of the scaRedirect.",
            "example": "https://www.testbank.com/asdfasdfasdf"
          }
        }
      },
      "TransactionStatus": {
        "type": "object",
        "description": "Contains status of the payment.",
        "properties": {
          "transactionStatus": {
            "type": "string",
            "description": "The transaction status is filled with codes of ISO 20022. See [Payment status](#appendix--enum--payment-statuses).",
            "example": "RCVD",
            "minLength": 4,
            "maxLength": 4
          }
        }
      },
      "CreditorAddress": {
        "type": "object",
        "description": "An address of the account holder.",
        "required": [
          "country"
        ],
        "properties": {
          "streetName": {
            "type": "string",
            "description": "Street name.",
            "example": "Random st.",
            "maxLength": 70
          },
          "buildingNumber": {
            "type": "string",
            "description": "Building number.",
            "example": "22"
          },
          "townName": {
            "type": "string",
            "description": "Name of a town/city.",
            "example": "London"
          },
          "postCode": {
            "type": "string",
            "description": "Postal code.",
            "example": "LE5 2QF"
          },
          "country": {
            "type": "string",
            "description": "Two characters as defined by ISO 3166.",
            "maxLength": 2,
            "minLength": 2,
            "example": "GB"
          }
        }
      },
      "SinglePayment": {
        "type": "object",
        "description": "A JSON structure initiating a single payment.",
        "required": [
          "instructedAmount",
          "creditorAccount",
          "creditorName"
        ],
        "properties": {
          "paymentScheme": {
            "type": "string",
            "example": "SCT",
            "description": "Describes which payment scheme is used. See [Payment Schemes](#appendix--enum--payment-schemes) for possible values.",
            "enum": [
              "FPS",
              "BACS",
              "CHAPS",
              "SCT",
              "SCTI",
              "SWIFT"
            ]
          },
          "debtorAccount": {
            "$ref": "#/components/schemas/AccountReference"
          },
          "debtorName": {
            "type": "string",
            "description": "The name of debtor/sender.",
            "example": "John Doe",
            "maxLength": 70
          },
          "creditorAccount": {
            "$ref": "#/components/schemas/AccountReference"
          },
          "creditorName": {
            "type": "string",
            "description": "The name of creditor/receiver.",
            "example": "John Doe",
            "maxLength": 70
          },
          "remittanceInformationUnstructured": {
            "type": "string",
            "description": "An unstructured reference of the transaction.",
            "example": "Ref1234",
            "maxLength": 140
          },
          "remittanceInformationStructured": {
            "$ref": "#/components/schemas/RemittanceInformationStructured"
          },
          "creditorAddress": {
            "$ref": "#/components/schemas/CreditorAddress"
          },
          "instructedAmount": {
            "$ref": "#/components/schemas/StructuredAmount"
          },
          "creditorBank": {
            "$ref": "#/components/schemas/BankReference"
          }
        }
      },
      "BulkSinglePayment": {
        "type": "object",
        "description": "A JSON structure of a single payment inside a bulk payment.",
        "required": [
          "instructedAmount",
          "creditorAccount",
          "creditorName"
        ],
        "properties": {
          "creditorAccount": {
            "$ref": "#/components/schemas/AccountReference"
          },
          "creditorName": {
            "type": "string",
            "description": "The name of creditor/receiver.",
            "example": "John Doe",
            "maxLength": 70
          },
          "remittanceInformationUnstructured": {
            "type": "string",
            "description": "An unstructured reference of the transaction.",
            "example": "Ref1234",
            "maxLength": 140
          },
          "remittanceInformationStructured": {
            "$ref": "#/components/schemas/RemittanceInformationStructured"
          },
          "creditorAddress": {
            "$ref": "#/components/schemas/CreditorAddress"
          },
          "instructedAmount": {
            "$ref": "#/components/schemas/StructuredAmount"
          }
        }
      },
      "BulkPayment

# --- truncated at 32 KB (184 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/tribe-payments/refs/heads/main/openapi/tribe-payments-obb-tpp-api-openapi.json