Make a payment immediately and at any time
RTP Send Payment Endpoints
| Summary | Endpoint |
|---|---|
| Health check | get /rtp/v1/payment/healthCheck |
| Send a real-time payment or a wire transfer | post /rtp/v1/payment/initiate |
| Get a list of RTP participants | get /rtp/v1/payment/rtp/participant |
| Get information about one RTP participant | get /rtp/v1/payment/rtp/participant/{routingNumber} |
| Perform validation checks | post /rtp/v1/payment/validate |
Key notes
Before you begin
All KeyBank APIs require certificates, user credentials, and certain permissions. The RTP and wire payment APIs are a single API product with two service capabilities. You need specific permissions to access either the RTP Send Payment API or the Wires Transfer API.
Check out our Get Started Guide to learn more.
Requirements
KeyClientId
When you initiate or validate a payment, you are required to provide the KeyClientId in the request header. This is a 32-character string value provided by KeyBank during the onboarding process. The KeyClientId is not the same as your client credentials (part of your API keys needed to obtain an access token).
Reference IDs
Reference IDs are required with each request. These ID numbers reduce manual work and payment identification errors, helping recipients auto-reconcile incoming payments.
Setting reference IDs
| REFERENCE FIELD | WHO SETS IT | WHAT IT TRACKS | WHO SEES IT |
|---|---|---|---|
requestReferencerequired | You (API client) | Unique API request identifier for idempotency and retries. | Bank |
originatorReference | Payer (your customer or the system on their behalf) | Their reason for the payment, like an invoice number they are paying. | Payee |
sendersReferencerequired | You (API client) | Your internal transaction tracking number, like a PO number or system ID. | You and the bank |
receiversReference | You (API client) | Helps the payee's system reconcile the payment, like a order or case number for their system. | Payee |
Party information for payments
The party object is required for any payment or validation request. In each request, you must identify the participating parties in a payment chain.
- Payer (sender):
debitParty,debitPartyBank - Payee (receiver):
creditParty,creditPartyBank(which may be an individual, corporation, beneficiary, or financial institution) - Proxy parties:
intermediaryBankandultimateCreditPartyare available for certain payment scenarios that require additional parties, like a larger financial institution providing wire capabilities for a smaller bank or if you are submitting a payment on behalf of someone else.
Necessary fields can vary by payment type and scenario. In some cases, you must provide full address details; in others, an account number may be sufficient. Review the payment scenarios in the RTP and Wire User Guide for definitions and examples.
Party request structure
- Required means that the party must include the specified parameters.
- Conditional means that only certain payment scenarios require additional parameters to be defined.
- For domestic payments, an address is optional; however, providing one is recommended for improved validation when using an account number.
| Party type | Requirements and Conditions |
|---|---|
The debit party is the individual, company, or financial institution sending the money. | Required:
|
The financial institution who manages the debit account, typically a KeyBank account. | Required:
|
The financial institution who manages the credit account. Often referred to as the beneficiary bank. | Required:
Conditional:
|
The person or business who will receive the funds, as known as the beneficiary party. | Required:
Conditional:
|
A financial institution that helps transfer funds for smaller banks that are not directly connected to the same payment network. For domestic third-party payments, an intermediary bank must be defined. | Required:
Conditional:
|
This is for OBO payments where a payment process or similar financial service is being leverage to pay the funds. | Required:
|
Address structure
For domestic payments, an address is optional but recommended when using an account number as a party identifier, as it can improve validation.
If you choose to provide an address, any of the following formats are sufficient for validation:
- A three-line address provided in
adrLine - A city (
twnNm) and country (ctry) - A fully structured address (as defined below)
Domestic address example
| Normal address | Unstructured address format | Structured address format |
|---|---|---|
123 Main Street Cleveland, OH 44111 US | {
"postalAddress": {
"adrLine": [
"123 Main Street",
"Cleveland, OH 44111"
"US
]
}
} | {
"postalAddress": {
"strtNm": "MAIN STREET",
"bldgNb": 123,
"pstCd": 44111,
"twnNm": "CLEVELAND",
"ctrySubDvsn": "OH",
"ctry": "US"
}
} |
Correct characters for ISO messages
Use only the supported characters in ISO messages. If you use a character that isn't supported, an error message returns. Review the entered values to make sure you did not use a restricted character (like the pipe delimiter).
For KeyBank ISO-based messages only support the following characters:
- Alphabet characters, uppercase (A-Z) and lowercase (a-z)
- Numeric characters (0-9)
- Special characters limited to .,-()?+'=:?@-#{!"%&*;<>
- Single space, carriage return, and line feed
Duplicate payment prevention
All payments go through two levels of checks to avoid duplicate transactions. If a transaction is not unique, you receive an error.
Level 1: KeyBank evaluates requestReference . This value must be a unique for each originated transaction and remains associated with the transaction. This is used for idempotency, like for safe retries after network errors.
Level 2: KeyBank evaluates a combination of fields:
debitParty>accountNumbercreditPartyBank>abacreditParty>accountNumberrequestedValueDatetransferAmountreceiversReference(This is a critical field if you send similar or nearly identical payments.)
Send a real-time payment
post /rtp/v1/payment/initiate
Initiate a RTP payment. Use the requestedService parameter to define the transaction as RTP, in all capital letters. With the party object, you can define the receiver as an individual, corporation, or financial institution in the payment chain.
Request
| header FIELD | TYPE | DESCRIPTION |
|---|---|---|
| KeyClientIdrequired | string | Unique ID provided by KeyBank during onboarding. This is different from your client credentials. It is required for each call. |
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| requestedServicerequired | string | The type of payment transaction. The transaction request is valid only for the API products with granted access. This field is case-sensitive, and values must be provided in all capital letters. Valid values: RTP, WIRE. |
| requestReferencerequired | string | Unique API request identifier for idempotency and retries. The ID cannot exceed 32 characters. |
| typerequired | string | For both RTP and Wire, the value is always PAYMENT. |
| requestedValueDaterequired | string | Date (YYYY-MM-DD) the transfer will occur. |
| originatorReference | string | An additional reference value that is meaningful to the party originating the payment. |
| sendersReferencerequired | string | Unique reference value provided by the sender. The ID cannot exceed 32 characters. |
| receiversReference | string | A reference value for the beneficiary. This value cannot exceed 140 characters. |
| bankToBankInstructions | string | Area to share messages or instructions from one bank to another bank. This cannot exceed 140 characters. |
| ultimateDebitParty | Object | ultParty |
| debitPartyrequired | Object | party |
| debitPartyBank | Object | party |
| intermediaryBank1 | Object | party |
| intermediaryBank2 | Object | party |
| intermediaryBank3 | Object | party |
| creditPartyBankrequired | Object | party |
| creditPartyrequired | Object | party |
| transferAmountrequired | number | Amount of money to transfer in the correct currency format. |
| transferCurrencyrequired | string | Currency code for the transfer amount. Must be USD. |
| externalTemplateName | string | Name of the external template. Text cannot exceed 2048 characters. |
| customData | string | The values for custom data is defined by the client. This free-form text field can contain up to 500 alphanumeric characters. Custom information stays with the transaction through its lifecycle. |
Request example
{
"requestedService": "RTP",
"requestReference": "AZX01234567891011",
"type": "PAYMENT",
"sendersReference": "INVC0012345",
"receiversReference": "INVC0054321",
"requestedValueDate": "2025-12-15T00:00:00.000Z",
"debitParty": {
"name": "CLARK GABLE",
"accountNumber": "001122334455"
},
"creditPartyBank": {
"name": "CARY GRANT'S BANK",
"aba": "123456789"
},
"creditParty": {
"name": "CARY GRANT",
"accountNumber": "987654321",
"postalAddress": {
"dept": "Test Dept",
"subDept": "Test Sub Dept",
"strtNm": "Main Street",
"bldgNb": 123,
"pstCd": 12345,
"twnNm": "Central Town",
"ctrySubDvsn": "OH",
"ctry": "US"
}
},
"transferAmount": 10,
"transferCurrency": "USD"
} Responses
Successful response
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| statusrequired | Object | paymentStatus |
| transactionId | string | The unique ID number associated with the original payment request in KeyBank's payment system. |
| requestReference | string | A unique reference value for the original request that is useful for traceability and reporting. The ID cannot exceed 32 characters. |
| sendersReference | string | Unique reference value provided by the sender. The ID cannot exceed 32 characters. |
| receiversReference | string | A reference value for the beneficiary. This value cannot exceed 140 characters. |
| debitAccountNumber | string | Debit account number. This cannot exceed 34 digits. |
| creditAccountNumber | string | Credit account number. This cannot exceed 34 digits. |
| valueDate | string | The date (YYYY-MM-DD) the transfer occurred. |
| transferAmount | number | Amount of money to transfer in the correct currency format. |
| transferCurrency | string | Currency code for the transfer amount. Must be USD. |
| error | Object | paymentError |
| doddFrank | Object | noYesType |
| clearingSystemReference | string | A reference value for the beneficiary. This value cannot exceed 140 characters. |
Response example (200)
{
"status": "IN_PROCESS",
"transactionId": "US23050800214592",
"requestReference": "AZX01234567891011",
"sendersReference": "INVC0012345",
"receiversReference": "INVC0054321",
"debitAccountNumber": "001122334455",
"creditAccountNumber": "987654321",
"valueDate": "2023-05-08",
"transferAmount": 10,
"transferCurrency": "USD"
}Missing data in the request
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (400)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "US21052400000000",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/initiate",
"ServiceError": {
"status": "FAILED",
"transactionId": "rrt-770941720727587-2383364-1",
"requestReference": "RR-220818-01",
"sendersReference": "SR-220818-01",
"valueDate": 1683676800,
"error": {
"code": "KEY-1006",
"title": "Required field missing",
"description": "The object creditPartyBank is required in the request."
}
}
}Received request is unauthorized
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (401)
{
"ErrorMessage": "Error received from backend service.",
"TransactionId": "rrt-621075741872460927-c-gce-9129-15867185-4",
"X-CorrelationId": "80457bcb-2c3b-8c55-8cd6-3520c3157e8f",
"TransactionTime": "2022-04-04T11:41:13.754Z",
"Api-Url": "\/rtp\/v1\/payment\/initiate",
"ServiceError": {
"status": "ERROR",
"transactionId": "rrt-621075741872460927",
"requestReference": "REQUEST-REF-220314.1",
"sendersReference": "SENDER-REF-220314.1",
"valueDate": "06-10-2023",
"error": {
"code": "KEY-0006",
"title": "Not authorized for requested service",
"description": "Check your credentials."
}
}
}Request is forbidden to access the resource
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (403)
{
"ErrorMessage": "Access to requested resource is forbidden.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/initiate"
}Requested resource is not found
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (404)
{
"ErrorMessage": "Requested resource is not found, please verify the resource and resubmit the request.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/initiate"
}Requested method is not allowed.
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (405)
{
"ErrorMessage": "Requested method is not allowed, please verify the method and resubmit the request.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/initiate"
}Requested unsupported media type
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (415)
{
"ErrorMessage": "Requested media type is not allowed, please verify the media type and resubmit the request.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/initiate"
}Too many requests received
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (429)
{
"ErrorMessage": "Number requests threshold reached, please resubmit the request after sometime.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/initiate"
}Internal server error
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (500)
{
"ErrorMessage": "Error received from backend service.",
"TransactionId": "359681587523_SR-RMC-210729-11081",
"X-CorrelationId": "7ad7fdfb-2ade-a3ab-b97c-523dc5312688",
"TransactionTime": "2022-04-05T07:59:15.422Z",
"Api-Url": "\/rtp\/v1\/payment\/initiate",
"ServiceError": {
"status": "ERROR",
"transactionId": "rrt-621075741872460927",
"requestReference": "RR-RMC-210720-0123458981",
"sendersReference": "SR-RMC-210729-11081",
"valueDate": "06-10-2023",
"error": {
"code": "KEY-9999",
"title": "Unknown error",
"description": "Payment Initiation ServiceException: AUTHENTICATION_FAILURE Unable to logon with the supplied credentials."
},
"doddFrank": "NO"
}
}Bad Gateway
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (502)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/initiate",
"ServiceError": {
"ConnectError": "Connectivity error occurred with the downstream service (unexpected EOF at target). Please check with application support team before resubmitting the request"
}
}Service Unavailable
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (503)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/initiate",
"ServiceError": {
"ConnectError": "Service is currently unavailable (NoActiveTargets), please check with application support before resubmitting the request."
}
}Gateway timeout
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (504)
{
"ErrorMessage": "Error received from backend service",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/initiate",
"ServiceError": {
"ConnectError": "Request could not be processed on time (gateway timeout). Please wait a moment and resubmit the request."
}
}Get a list of RTP participants
get /rtp/v1/payment/rtp/participant
Retrieve a list of active, online RTP banks. Use the limit and offset fields to control how many records to return and what records to skip.
Request
| header FIELD | TYPE | DESCRIPTION |
|---|---|---|
| KeyClientIdrequired | string | Unique ID provided by KeyBank during onboarding. This is different from your client credentials. It is required for each call. |
| query FIELD | TYPE | DESCRIPTION |
|---|---|---|
| limitrequired | integer | Pagination parameter that indicates the maximum number of records to return in the response. |
| offsetrequired | integer | Pagination parameter that indicates the number of records skipped before generating the output. |
Request example
curl --location: '{host}/rtp/v1/payment/rtp/participant?limit=15&offset=0'
--header 'KeyClientId: testwUhSQADUD4DwYyZz2hZkwLqsoFGK'
--header 'Accept: application/json'
--header 'Bearer testZcKJDWnwDWmmf9qah6PJvPy8'
Responses
Successful response
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| countrequired | string | The count of records that match the initial query. |
| limitrequired | integer | The maximum number of records returned in the response. |
| offsetrequired | integer | The number of records skipped before the response is returned. |
| parties | object | party |
Response example (200)
{
"count": "65",
"limit": 10,
"offset": 0,
"parties": {
"name": "CITIZENS BANK, NA",
"accountNumber": "102258001",
"aba": "100001995",
"bic": "CITZUSL2XXX",
"txid": "fa1354bkg3153kj13b4h34",
"foreignBankSystemId": {
"type": "USABA"
},
"postalAddress": {
"adrLine": [
"BENEFICIARY ADDRESS LINE 1",
"BENEFICIARY ADDRESS LINE 2"
]
}
}
}Missing data in the request
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (400)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "US21052400000000",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant",
"ServiceError": {
"status": "FAILED",
"transactionId": "rrt-770941720727587-2383364-1",
"requestReference": "RR-220818-01",
"sendersReference": "SR-220818-01",
"valueDate": 1683676800,
"error": {
"code": "KEY-1006",
"title": "Required field missing",
"description": "The object creditPartyBank is required in the request."
}
}
}Received request is unauthorized
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (401)
{
"ErrorMessage": "Error received from backend service.",
"TransactionId": "rrt-621075741872460927-c-gce-9129-15867185-4",
"X-CorrelationId": "80457bcb-2c3b-8c55-8cd6-3520c3157e8f",
"TransactionTime": "2022-04-04T11:41:13.754Z",
"Api-Url": "/rtp/v1/payment/rtp/participant",
"ServiceError": {
"status": "ERROR",
"transactionId": "rrt-621075741872460927",
"requestReference": "REQUEST-REF-220314.1",
"sendersReference": "SENDER-REF-220314.1",
"valueDate": "06-10-2023",
"error": {
"code": "KEY-0006",
"title": "Not authorized for requested service",
"description": "Check your credentials."
},
"doddFrank": "NO"
}
}Request is forbidden to access the resource
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (403)
{
"ErrorMessage": "Access to requested resource is forbidden.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant"
}Resource not found
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (404)
{
"ErrorMessage": "Requested resource is not found, please verify the resource and resubmit the request.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant"
}Requested method is not allowed.
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (405)
{
"ErrorMessage": "Requested method is not allowed, please verify the method and resubmit the request.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant"
}Requested unsupported media type
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (415)
{
"ErrorMessage": "Requested media type is not allowed, please verify the media type and resubmit the request.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant"
}Too many requests received
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (429)
{
"ErrorMessage": "Number requests threshold reached, please resubmit the request after sometime.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant"
}Internal server error
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (500)
{
"ErrorMessage": "Error received from backend service.",
"TransactionId": "359681587523_SR-RMC-210729-11081",
"X-CorrelationId": "7ad7fdfb-2ade-a3ab-b97c-523dc5312688",
"TransactionTime": "2022-04-05T07:59:15.422Z",
"Api-Url": "/rtp/v1/payment/rtp/participant",
"ServiceError": {
"status": "ERROR",
"transactionId": "rrt-621075741872460927",
"requestReference": "RR-RMC-210720-0123458981",
"sendersReference": "SR-RMC-210729-11081",
"valueDate": "06-10-2023",
"error": {
"code": "KEY-9999",
"title": "Unknown error",
"description": "Payment Initiation ServiceException: AUTHENTICATION_FAILURE Unable to logon with the supplied credentials.",
"detail": {
"code": "KEY-9999",
"title": "Unknown error",
"description": "Additional information about error code."
}
},
"doddFrank": "NO"
}
}Bad Gateway
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (502)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant",
"ServiceError": {
"ConnectError": "Connectivity error occurred with the downstream service (unexpected EOF at target). Please check with application support team before resubmitting the request"
}
}Service Unavailable
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (503)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant",
"ServiceError": {
"ConnectError": "Service is currently unavailable (NoActiveTargets), please check with application support before resubmitting the request."
}
}Gateway timeout
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (504)
{
"ErrorMessage": "Your request took too long to process. Please try again.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant",
"ServiceError": {
"ConnectError": "Request could not be processed on time (gateway timeout). Please wait a moment and resubmit the request."
}
}Get information about one RTP participant
get /rtp/v1/payment/rtp/participant/{routingNumber}
This call returns information about a single RTP participant. Use the routing number of the financial institution to search for the RTP participant.
Request
| path FIELD | TYPE | DESCRIPTION |
|---|---|---|
| routingNumberrequired | string | Routing number of the participating RTP bank. |
| header FIELD | TYPE | DESCRIPTION |
|---|---|---|
| KeyClientIdrequired | string | Unique ID provided by KeyBank during onboarding. This is different from your client credentials. It is required for each call. |
Request example
curl --location: '{host}/rtp/v1/payment/rtp/participant/12345678
--header 'KeyClientId: testwUhSQADUD4DwYyZz2hZkwLqsoFGK'
--header 'Accept: application/json'
--header 'Authorization: Bearer testZcKJDWnwDWmmf9qah6PJvPy8'
Responses
Successful response
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| namerequired | string | Name of the party. This can be an individual, a financial institution, or a beneficiary. The name is required for the creditParty. This cannot exceed 140 characters. |
| accountNumber | string | Account number of the party. If this is a wire transfer, you must provide the name and address with the account number for all parties, except debitParty and debitPartyBank. This cannot exceed 34 digits. |
| aba | string | The ABA or routing number of the financial institution. If this is a wire transfer, you do not need to provide other account information like address or name, unless it is for debitParty or debitPartyBank. This cannot exceed 9 digits. |
| bic | string | The bank identifier code (BIC) for the party. This is a combination code that identifies the bank, country, location, and possibly the bank branch. |
| txid | string | The tax identification number for the party. |
| foreignBankSystemId | object | foreignBankSystemType |
| adrTp | string | Address type for the party that specifies if it is a home, business, or mailing address. Valid values: ADDR, PBOX, HOME, BIZZ, MLTO, DLVY |
| dept | string | Department of the party for the mailing address, if applicable. This field cannot exceed 70 characters. |
| subDept | string | Sub-department of the party, if applicable. This field cannot exceed 70 characters. |
| strtNm | string | Street address for the party. This field cannot exceed 70 characters. |
| bldgNb | string | Building number. This field cannot exceed 16 characters. |
| pstCd | string | The postal code or zip code for the address. This field cannot exceed 16 characters. |
| twnNm | string | Name of the town. This field cannot exceed 35 characters. |
| ctrySubDvsn | string | Name of subdivision of a country like a state, region, or county. This field cannot exceed 35 characters. |
| ctry | string | Country name or abbreviation. |
| adrLineoptional | array | An unstructured address line. You can have up to three lines of text. Each line can be 70 characters or less. |
Response example (200)
{
"name": "KeyBank National Association",
"accountNumber": "8756654",
"aba": "125200879",
"bic": "KEYUSL2XXX",
"txid": "fa125da513hj135j42b5",
"foreignBankSystemId": {
"type": "USABA"
},
"postalAddress": {
"adrLine": [
"123 Keybank Street",
"Cleveland, OH"
]
}
}Missing data in the request
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (400)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "US21052400000000",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant/{routingNumber}",
"ServiceError": {
"status": "FAILED",
"transactionId": "rrt-770941720727587-2383364-1",
"requestReference": "RR-220818-01",
"sendersReference": "SR-220818-01",
"valueDate": 1683676800,
"error": {
"code": "KEY-1006",
"title": "Required field missing",
"description": "The object creditPartyBank is required in the request."
}
}
}Received request is unauthorized
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (401)
{
"ErrorMessage": "Error received from backend service.",
"TransactionId": "rrt-621075741872460927-c-gce-9129-15867185-4",
"X-CorrelationId": "80457bcb-2c3b-8c55-8cd6-3520c3157e8f",
"TransactionTime": "2022-04-04T11:41:13.754Z",
"Api-Url": "/rtp/v1/payment/rtp/participant/{routingNumber}",
"ServiceError": {
"status": "ERROR",
"transactionId": "rrt-621075741872460927",
"requestReference": "REQUEST-REF-220314.1",
"sendersReference": "SENDER-REF-220314.1",
"valueDate": "06-10-2023",
"error": {
"code": "KEY-0006",
"title": "Not authorized for requested service",
"description": "Check your credentials."
},
"doddFrank": "NO"
}
}Request is forbidden to access the resource
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (403)
{
"ErrorMessage": "Access to requested resource is forbidden.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant/{routingNumber}"
}Requested resource is not found
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (404)
{
"ErrorMessage": "Requested resource is not found, please verify the resource and resubmit the request.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant/{routingNumber}"
}Requested method is not allowed.
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (405)
{
"ErrorMessage": "Requested method is not allowed, please verify the method and resubmit the request.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant/{routingNumber}"
}Requested unsupported media type
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (415)
{
"ErrorMessage": "Requested media type is not allowed, please verify the media type and resubmit the request.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant/{routingNumber}"
}Too many requests received
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (429)
{
"ErrorMessage": "Number requests threshold reached, please resubmit the request after sometime.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant/{routingNumber}"
}Internal server error
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (500)
{
"ErrorMessage": "Error received from backend service",
"TransactionId": "359681587523_SR-RMC-210729-11081",
"X-CorrelationId": "7ad7fdfb-2ade-a3ab-b97c-523dc5312688",
"TransactionTime": "2022-04-05T07:59:15.422Z",
"Api-Url": "/rtp/v1/payment/rtp/participant/{routingNumber}",
"ServiceError": {
"status": "ERROR",
"transactionId": "rrt-621075741872460927",
"requestReference": "REQUEST-REF-220314.1",
"sendersReference": "SENDER-REF-220314.1",
"valueDate": "06-10-2023",
"error": {
"code": "KEY-9999",
"title": "Unknown error",
"description": "Payment Initiation ServiceException: AUTHENTICATION_FAILURE Unable to logon with the supplied credentials."
},
"doddFrank": "NO"
}
}Bad Gateway
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (502)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant/{routingNumber}",
"ServiceError": {
"ConnectError": "Connectivity error occurred with the downstream service (unexpected EOF at target). Please check with application support team before resubmitting the request"
}
}Service Unavailable
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (503)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant/{routingNumber}",
"ServiceError": {
"ConnectError": "Service is currently unavailable (NoActiveTargets), please check with application support before resubmitting the request."
}
}Gateway timeout
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (504)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/rtp/participant/{routingNumber}",
"ServiceError": {
"ConnectError": "Request could not be processed on time (gateway timeout). Please wait a moment and resubmit the request."
}
}Perform validation checks
post /rtp/v1/payment/validate
This call performs all the validation checks needed to initiate a payment without creating a payment.
Request
| header FIELD | TYPE | DESCRIPTION |
|---|---|---|
| KeyClientIdrequired | string | Unique ID provided by KeyBank during onboarding. This is different from your client credentials. It is required for each call. |
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| requestedServicerequired | string | The type of payment transaction. The transaction request is valid only for the API products with granted access. This field is case-sensitive, and values must be provided in all capital letters. Valid values: RTP, WIRE. |
| requestReferencerequired | string | Unique API request identifier for idempotency and retries. The ID cannot exceed 32 characters. |
| typerequired | string | For both RTP and Wire, the value is always PAYMENT. |
| requestedValueDaterequired | string | Date (YYYY-MM-DD) the transfer will occur. |
| originatorReference | string | An additional reference value that is meaningful to the party originating the payment. |
| sendersReferencerequired | string | Unique reference value provided by the sender. The ID cannot exceed 32 characters. |
| receiversReference | string | A reference value for the beneficiary. This value cannot exceed 140 characters. |
| bankToBankInstructions | string | Area to share messages or instructions from one bank to another bank. This cannot exceed 140 characters. |
| ultimateDebitParty | Object | ultParty |
| debitPartyrequired | Object | party |
| debitPartyBank | Object | party |
| intermediaryBank1 | Object | party |
| intermediaryBank2 | Object | party |
| intermediaryBank3 | Object | party |
| creditPartyBankrequired | Object | party |
| creditPartyrequired | Object | party |
| transferAmountrequired | number | Amount of money to transfer in the correct currency format. |
| transferCurrencyrequired | string | Currency code for the transfer amount. Must be USD. |
| externalTemplateName | string | Name of the external template. Text cannot exceed 2048 characters. |
| customData | string | The values for custom data is defined by the client. This free-form text field can contain up to 500 alphanumeric characters. Custom information stays with the transaction through its lifecycle. |
Request example
{
"requestedService": "RTP",
"requestReference": "AZX01234567891011",
"type": "PAYMENT",
"requestedValueDate": 1765756800,
"originatorReference": null,
"sendersReference": "INVC0012345",
"receiversReference": "INVC0054321",
"ultimateDebitParty": {
"name": "CLARK GABLE"
},
"debitParty": {
"name": "CLARK GABLE",
"accountNumber": "001122334455"
},
"creditPartyBank": {
"name": "CARY GRANT'S BANK",
"aba": 123456789
},
"creditParty": {
"name": "CARY GRANT",
"accountNumber": 987654321,
"postalAddress": {
"adrTp": "HOME",
"dept": "Test Dept",
"subDept": "Test Sub Dept",
"strtNm": "123 Main Street",
"bldgNb": 10,
"pstCd": 12345,
"twnNm": "Central Town",
"ctrySubDvsn": "OH",
"ctry": "US"
}
},
"transferAmount": 10,
"transferCurrency": "USD",
"customData": ""
}Responses
Successful response
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| statusrequired | Object | paymentStatus |
| transactionId | string | The unique ID number associated with the original payment request in KeyBank's payment system. |
| requestReference | string | A unique reference value for the original request that is useful for traceability and reporting. The ID cannot exceed 32 characters. |
| sendersReference | string | Unique reference value provided by the sender. The ID cannot exceed 32 characters. |
| receiversReference | string | A reference value for the beneficiary. This value cannot exceed 140 characters. |
| debitAccountNumber | string | Debit account number. This cannot exceed 34 digits. |
| creditAccountNumber | string | Credit account number. This cannot exceed 34 digits. |
| valueDate | string | The date (YYYY-MM-DD) the transfer occurred. |
| transferAmount | number | Amount of money to transfer in the correct currency format. |
| transferCurrency | string | Currency code for the transfer amount. Must be USD. |
| error | Object | paymentError |
| doddFrank | Object | noYesType |
| clearingSystemReference | string | A reference value for the beneficiary. This value cannot exceed 140 characters. |
Response example (200)
{
"status": "VALID",
"transactionId": "XZ23050714000000",
"requestReference": "testWBB25889710252",
"sendersReference": "INVC0012345",
"receiversReference": "INVC0054321",
"debitAccountNumber": "12345",
"creditAccountNumber": "987654321",
"transferAmount": 10,
"transferCurrency": "USD"
}Missing data in the request
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (400)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "US21052400000000",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/validate",
"ServiceError": {
"status": "FAILED",
"transactionId": "rrt-770941720727587-2383364-1",
"requestReference": "RR-220818-01",
"sendersReference": "SR-220818-01",
"valueDate": 1683676800,
"error": {
"code": "KEY-1006",
"title": "Required field missing",
"description": "The object creditPartyBank is required in the request."
}
}
}Received request is unauthorized
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (401)
{
"ErrorMessage": "Error received from backend service.",
"TransactionId": "rrt-621075741872460927-c-gce-9129-15867185-4",
"X-CorrelationId": "80457bcb-2c3b-8c55-8cd6-3520c3157e8f",
"TransactionTime": "2022-04-04T11:41:13.754Z",
"Api-Url": "\/rtp\/v1\/payment\/validate",
"ServiceError": {
"status": "ERROR",
"transactionId": "rrt-621075741872460927",
"requestReference": "REQUEST-REF-220314.1",
"sendersReference": "SENDER-REF-220314.1",
"valueDate": "06-10-2023",
"error": {
"code": "KEY-0006",
"title": "Not authorized for requested service",
"description": "Check your credentials."
},
"doddFrank": "NO"
}
}Request is forbidden to access the resource
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (403)
{
"ErrorMessage": "Access to requested resource is forbidden.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/validate"
}Requested resource is not found
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (404)
{
"ErrorMessage": "Requested resource is not found, please verify the resource and resubmit the request.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/validate"
}Requested method is not allowed
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (405)
{
"ErrorMessage": "Requested method is not allowed, please verify the method and resubmit the request.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/validate"
}Requested unsupported media type
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (415)
{
"ErrorMessage": "Requested media type is not allowed, please verify the media type and resubmit the request.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/validate"
}Too many requests received
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (429)
{
"ErrorMessage": "Number requests threshold reached, please resubmit the request after sometime.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/validate"
}Internal server error
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (500)
{
"ErrorMessage": "Error received from backend service.",
"TransactionId": "359681587523_SR-RMC-210729-11081",
"X-CorrelationId": "7ad7fdfb-2ade-a3ab-b97c-523dc5312688",
"TransactionTime": "2022-04-05T07:59:15.422Z",
"Api-Url": "\/rtp\/v1\/payment\/validate",
"ServiceError": {
"status": "ERROR",
"transactionId": "rrt-621075741872460927",
"requestReference": "REQUEST-REF-220314.1",
"sendersReference": "SENDER-REF-220314.1",
"valueDate": "06-10-2023",
"error": {
"code": "KEY-9999",
"title": "Unknown error",
"description": "Payment Initiation ServiceException: AUTHENTICATION_FAILURE Unable to logon with the supplied credentials.",
"detail": {
"code": "KEY-1005",
"title": "Error",
"description": "Additional information about error code."
}
},
"doddFrank": "NO"
}
}Bad Gateway
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (502)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/validate",
"ServiceError": {
"ConnectError": "Connectivity error occurred with the downstream service (unexpected EOF at target). Please check with application support team before resubmitting the request"
}
}Service Unavailable
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (503)
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/validate",
"ServiceError": {
"ConnectError": "Service is currently unavailable (NoActiveTargets), please check with application support before resubmitting the request."
}
}Gateway timeout
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
Response example (504)
{
"ErrorMessage": "Your request took too long to process. Please try again.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "rrt-7709400285867417207-b-gce-27587-2383364-1",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "\/rtp\/v1\/payment\/validate",
"ServiceError": {
"ConnectError": "Request could not be processed on time (gateway timeout). Please wait a moment and resubmit the request."
}
}Schemas
healthResponse
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| Status | string | The status of the health check response. |
| Source | string | The system that produces the health response. The origin of the response can be 'Gateway' or 'Roundtrip.' Roundtrip returns a response from the farthest system involved. |
| Timestamp | string | The date (YYYY-MM-DD) and time (HH:MM:SS) of response from the API service. |
| ClientIp | string | The client IP address the gateway receives from the request. |
| X-Forwarded-For | string | The sequence of the IP addresses for systems between the client and the gateway. Addresses are separated by a comma. |
exception
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ErrorMessage | string | A human-readable message that describes the type or source of the error. |
| TransactionId | string | A unique transaction ID returned with the response, useful for traceability. |
| TransactionTime | string | Date (YYYY-MM-DD) and time (HH:MM:SS) the error occurred. |
| Api-Url | string | The API URL path of the call that generated the response. |
| ServiceError | oneOf | serviceErrorData connectError |
connectError
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| ConnectError | string | API connectivity error information, if available. |
serviceErrorData
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| statusrequired | Object | paymentStatus |
| transactionId | string | The unique ID number associated with the original payment request in KeyBank's payment system. |
| requestReference | string | A unique reference value for the original request that is useful for traceability and reporting. The ID cannot exceed 32 characters. |
| sendersReference | string | Unique reference value provided by the sender. The ID cannot exceed 32 characters. |
| receiversReference | string | The sender reference value from the original request. This is useful for traceability and reporting. |
| debitAccountNumber | string | The sender reference value from the original request. This is useful for traceability and reporting. |
| creditAccountNumber | string | The sender reference value from the original request. This is useful for traceability and reporting. |
| valueDate | string | The date (YYYY-MM-DD) the transferred occurred. |
| error | Object | paymentError |
| doddFrank | Object | noYesType |
paymentTransactionRequestV1
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| requestedServicerequired | string | The type of payment transaction. The transaction request is valid only for the API products with granted access. This field is case-sensitive, and values must be provided in all capital letters. Valid values: RTP, WIRE. |
| requestReferencerequired | string | Unique API request identifier for idempotency and retries. The ID cannot exceed 32 characters. |
| typerequired | string | For both RTP and Wire, the value is always PAYMENT. |
| requestedValueDaterequired | string | Date (YYYY-MM-DD) the transfer will occur. |
| originatorReference | string | An additional reference value that is meaningful to the party originating the payment. |
| sendersReferencerequired | string | Unique reference value provided by the sender. The ID cannot exceed 32 characters. |
| receiversReference | string | A reference value for the beneficiary. This value cannot exceed 140 characters. |
| bankToBankInstructions | string | Area to share messages or instructions from one bank to another bank. This cannot exceed 140 characters. |
| ultimateDebitParty | Object | ultParty |
| debitPartyrequired | Object | party |
| debitPartyBank | Object | party |
| intermediaryBank1 | Object | party |
| intermediaryBank2 | Object | party |
| intermediaryBank3 | Object | party |
| creditPartyBankrequired | Object | party |
| creditPartyrequired | Object | party |
| transferAmountrequired | number | Amount of money to transfer in the correct currency format. |
| transferCurrencyrequired | string | Currency code for the transfer amount. Must be USD. |
| externalTemplateName | string | Name of the external template. Text cannot exceed 2048 characters. |
| customData | string | The values for custom data is defined by the client. This free-form text field can contain up to 500 alphanumeric characters. Custom information stays with the transaction through its lifecycle. |
party
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| namerequired | string | Name of the party. This can be an individual, a financial institution, or a beneficiary. The name is required for the creditParty. This cannot exceed 140 characters. |
| accountNumber | string | Account number of the party. If this is a wire transfer, you must provide the name and address with the account number for all parties, except debitParty and debitPartyBank. This cannot exceed 34 digits. |
| aba | string | The ABA or routing number of the financial institution. If this is a wire transfer, you do not need to provide other account information like address or name, unless it is for debitParty or debitPartyBank. This cannot exceed 9 digits. |
| bic | string | The bank identifier code (BIC) for the party. This is a combination code that identifies the bank, country, location, and possibly the bank branch. |
| txid | string | The tax identification number for the party. |
| foreignBankSystemId | Object | foreignBankSystemType |
| adrTp | string | Address type for the party that specifies if it is a home, business, or mailing address. Valid values: ADDR, PBOX, HOME, BIZZ, MLTO, DLVY |
| dept | string | Department of the party for the mailing address, if applicable. This field cannot exceed 70 characters. |
| subDept | string | Sub-department of the party, if applicable. This field cannot exceed 70 characters. |
| strtNm | string | Street address for the party. This field cannot exceed 70 characters. |
| bldgNb | string | Building number. This field cannot exceed 16 characters. |
| pstCd | string | The postal code or zip code for the address. This field cannot exceed 16 characters. |
| twnNm | string | Name of the town. This field cannot exceed 35 characters. |
| ctrySubDvsn | string | Name of subdivision of a country like a state, region, or county. This field cannot exceed 35 characters. |
| ctry | string | Two-character country abbreviation. |
| adrLineoptional | array | An unstructured address line. You can have up to three lines of text. Each line can be 70 characters or less. |
participantListResponse
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| countrequired | string | The count of records that match the initial query. |
| limitrequired | integer | The maximum number of records returned in the response. |
| offsetrequired | integer | The number of records skipped before the response is returned. |
| parties | Object | party |
foreignBankSystemType
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| type | string | The five-digit global routing code for a foreign financial institution. |
| id | string | The identification number associated with the foreign financial institution. |
paymentStatus
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| paymentStatusoptional | string | The status of the payment transaction. Valid values: IN_PROCESS, IN_REVIEW, COMPLETED, FAILED, RETURNED, ERROR, VALID |
paymentTransactionResponse
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| statusrequired | Object | paymentStatus |
| transactionId | string | The unique ID number associated with the original payment request in KeyBank's payment system. |
| requestReference | string | A unique reference value for the original request that is useful for traceability and reporting. The ID cannot exceed 32 characters. |
| sendersReference | string | Unique reference value provided by the sender. The ID cannot exceed 32 characters. |
| receiversReference | string | A reference value for the beneficiary. This value cannot exceed 140 characters. |
| debitAccountNumber | string | Debit account number. This cannot exceed 34 digits. |
| creditAccountNumber | string | Credit account number. This cannot exceed 34 digits. |
| valueDate | string | The date (YYYY-MM-DD) the transfer occurred. |
| transferAmount | number | Amount of money to transfer in the correct currency format. |
| transferCurrency | string | Currency code for the transfer amount. Must be USD. |
| error | Object | paymentError |
| doddFrank | Object | noYesType |
| clearingSystemReference | string | A reference value for the beneficiary. This value cannot exceed 140 characters. |
paymentError
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| coderequired | string | Status code assigned to each error type. |
| titlerequired | string | Brief title about the error associated with the status code. |
| description | string | Description of the error. |
| detail | object | detail |
detail
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| code | string | A static code assigned by the network or payment system. |
| title | string | Brief title about the error associated with the status code. |
| description | string | Description of the error |
noYesType
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| noYesTypeoptional | string | This field indicates whether the transaction qualifies for Dodd-Frank. |
ultParty
| NAME | TYPE | DESCRIPTION |
|---|---|---|
| name | string | Typically this is the name of the party that instructed the debit party to initiate a payment. This applies only to RTP transactions and the value cannot exceed 140 characters. |
Errors
This API varies from the KeyBank standard format as detailed in our error handling. With RTP and Wire APIs, the error message is returned in the paymentTransactionResponse object. This object returns with a paymentStatus of ERROR or FAILED.
It is important to note that certain violations report with an HTTP 200 response for issues where the API service successfully receives the request, but it encounters errors. Usually, issues signify a failed payment that could have been caused by account restrictions, network timeout, or invalid data in the request.
KeyBank codes
| CODE | MESSAGE |
|---|---|
| KEY-0001 | Not authorized |
| KEY-0002 | Not authorized for requested action |
| KEY-0003 | Request exceeds authorized limit |
| KEY-0004 | Unauthorized for account |
| KEY-0005 | Internal use only fields |
| KEY-0006 | Not authorized for requested service |
| KEY-1000 | Transformation Error |
| KEY-1001 | Invalid Data |
| KEY-1002 | Invalid Bank Identifier |
| KEY-1003 | Invalid or unknown template |
| KEY-1004 | Invalid account |
| KEY-1005 | Invalid Currency |
| KEY-1006 | Required field missing |
| KEY-1007 | Transaction Not Found |
| KEY-1008 | Insufficient Funds |
| KEY-1009 | Account has restrictions |
| KEY-1010 | Duplicate Request |
| KEY-1011 | Payor Account Restrictions |
| KEY-1012 | Payee Account Restrictions |
| KEY-2101 | Unable to construct wire from template |
| KEY-3001 | Exceeds transaction limit for RTP transactions |
| KEY-3002 | Field not usable for RTP transactions |
| KEY-3003 | Payment network timeout. Please retry. |
| KEY-3004 | Payment rejected by payment network |
| KEY-9000 | API disabled for maintenance |
| KEY-9997 | Failed payment review |
| KEY-9998 | Payment failed during processing |
| KEY-9999 | Unknown error |
Error example
{
"ErrorMessage": "Error received from backend service.",
"X-CorrelationId": "2ebd5c24-0e8d-5a70-0e91-ffd2727c1aab",
"TransactionId": "US21052400000000",
"TransactionTime": "2021-06-11T16:31:34.041Z",
"Api-Url": "/rtp/v1/payment/initiate",
"ServiceError": {
"status": "FAILED",
"transactionId": "rrt-770941720727587-2383364-1",
"requestReference": "RR-220818-01",
"sendersReference": "SR-220818-01",
"valueDate": "2023-05-10T00:00:00.000Z",
"error": {
"code": "KEY-1006",
"title": "Required field missing",
"description": "The object creditPartyBank is required in the request."
}
}
}
Changelog
1.3.2
October 2025 | LOW impact
The ultParty parameter is required for On Behalf Of (OBO) payments. This means if you send a RTP transaction for another person, you need to identify the payer in this field. If there is no ultimate debtor, this field is optional.
1.3.1
September 2025 | LOW impact
Added Api-Url parameter to all instances of the exception schema. This parameter is now a standard part of all error messages to help you identify which call triggered an unsuccessful response.
1.3.0
June 2025 | LOW impact
Deprecated the status endpoints with the recent RTP and Wire Inquiry API enhancements. We recommend you use the /list or /detail paths to get an accurate status report on your transactions.
The following endpoints were deprecated:
/rtp/v1/payment/status/debitAccount/{debitAccount}/reference/{reference}/rtp/v1/payment/status/transactionId/{transactionId}
1.2.6
April 2025 | MID impact
- Added details to the
partyobject foraccountNumberandabaparameters. This applies to all party object except fordebitPartyanddebitPartyBank.- If the
abais provided, the name and address are not required in the request. - If the
accountNumberis provided, you must also include the name and a complete address. What qualifies as a complete address is described in the/intiaterequest summary.
- If the
- Added Duplicate checks content to describe how the API checks for duplicate entries. We also identify what parameters must be unique to help prevent duplication issues.
1.2.5
December 2024 | LOW impact
Enhanced the requirements and responses for party addresses.
- Added the following fields to
postalAddressnested in thepartyobject:adrTp,dept,subDept,strtNm,bldgNb,pstCd,twnNm,ctrySubDvsn,ctry. - For requests, you are required to complete the
postalAddressfields for both thedebitPartyandcreditParty. - Address information returns in the response if available.
1.2.4
August 2024 | MID impact
- Change the name of the Wire Origination API to its more common name, Wire Transfer.
- Added clarification to
typefield. For RTP the type can be PAYMENT or DRAFT. For wire transfers, the type will always be DRAFT.
1.2.3
May 2024 | MID impact
KeyClientId is required for all endpoints, including GET calls.
1.2.1
March 2024 | HIGH impact
- Added 'IN_REVIEW' as a valid value for
statusin thepaymentStatusobject. - Added new parameters to
paymentTransactionRequestV1:bankToBankInstructionsdebitPartyInstructionsintermediaryBank1intermediaryBank2intermediaryBank3externalTemplateName
- Added the
clearingSystemReferencein thepaymentTransactionResponseobject. - Added the following parameters to
serviceErrorData:receiversReferencedebitAccountNumbercreditAccountNumber
- Changed min/max limits for the following parameters:
requestReferenceandsendersReferencechanged from maxLength 35 to 32 with a minLength of 1.- Added parameter limits for
originatorReferencewith a minLength of 1 and a maxLength of 35. - Added parameter limit for
transferAmountwith a maximum of 18 digits (which is like quintillion). - Added parameter limit for
accountNumberin thepartyto a minLength of 1. - Added parameter limit for
abato a maxLength of 9 digits. - Added parameter limit for
debitAccountNumberto a maxLength 34 characters.
1.1.5
September 2023 | LOW impact
Parameter description updates. This change is for technical content only. The code and operations of the API remain the same.
1.1.3
July 2023
Released on the Developer Portal.
Impact levels
- LOW: This is a minor change or enhancement that does not alter the operations of the API. Upgrading to the latest specifications is preferable but not required.
- MID: The previous API version is valid and operates, but does not contain latest enhancements. You need to update your specifications to get these enhancements.
- HIGH: The previous API version is no longer operable. You must upgrade to the latest specifications to access and use this API product.
YAML file