Idempotency + Error Handling Improvements
Status: live in sandbox (4/6/26), planned to production 4/18/26
Changes
1.) Error Numbers 🆕
Error respones now include number and subsystem_number for each error to help identify each error condition uniquely, which can be used to help streamline your error handling logic.
{
"code": 404,
"errors": [
{
"message": "Error getting object. Object does not exist.",
"number": 1725203,
"path": "hub.rtp_rfps",
"subsystem_number": null
}
]
}
See https://triceapi.readme.io/reference/trice-hub-api-error-codes for list of error numbers.
2.) Idempotency 🆕
Add idempotency safeguards for POST, PUT, and DELETE operations where the X-TRICE-IDEMPOTENCY-KEY header is included.
See https://triceapi.readme.io/reference/idempotency
3.) Improved error response: Insufficient funds
Return 402 with improved error response when a transaction cannot be created due to insufficient funds.
{
"code": 402,
"errors": [
{
"message": "Bank orchestrator bad response: Insufficient funds.",
"number": 3640269,
"path": "bank_orchestrator.system",
"subsystem_number": 141906
}
]
}
4.) Improved error response: Transaction limits exceeded
Return 402 with improved error response when a transaction cannot be created due to limits being exceeded.
{
"code": 402,
"errors": [
{
"message": "Bank orchestrator service error: Transaction limits exceeded. {\"daily_receiver_tx\":{\"limit\":\"30\",\"current\":\"1\",\"status\":\"pass\"},\"daily_volume\":{\"current\":\"2\",\"status\":\"pass\",\"limit\":\"50000000\"},\"weekly_receiver_volume\":{\"limit\":\"200000000\",\"status\":\"pass\",\"current\":\"2\"},\"monthly_volume\":{\"limit\":\"400000000\",\"status\":\"pass\",\"current\":\"2\"},\"status\":\"fail\",\"daily_receiver_failed_tx\":{\"current\":\"0\",\"status\":\"pass\",\"limit\":\"1\"},\"single_tx\":{\"limit\":\"1\",\"current\":\"2\",\"status\":\"fail\"},\"weekly_volume\":{\"limit\":\"200000000\",\"current\":\"2\",\"status\":\"pass\"},\"weekly_receiver_failed_tx\":{\"status\":\"pass\",\"current\":\"0\",\"limit\":\"4\"},\"weekly_receiver_tx\":{\"status\":\"pass\",\"current\":\"1\",\"limit\":\"100\"},\"daily_receiver_volume\":{\"status\":\"pass\",\"current\":\"2\",\"limit\":\"50000000\"}}",
"number": 15755912,
"path": "bank_orchestrator.system",
"subsystem_number": 2024401
}
]
}
5.) X-TRICE-WAIT-FOR in sandbox
When the X-TRICE-WAIT-FOR header is included when sending an RTP or FedNow payment instruction, the sandbox environment will wait up to the specified time. Previously the sandbox enviroment ignored this header.
6.) ACH Transfer: entry_description
When creating an ACH transfer, the entry_description can be set to describe what the payment is for. Previously this field was restricted to allowed enum values but now it can be set to any reasonable value (up to 10 characters) that the receiver and their bank would understand.
# POST /smart_transfer or /ach_transfer
{
"amount": 1000,
"enrollment": "{{enrollment_id}}",
"party": "{{party_id}}",
"entry_description": "PAYROLL"
}