This page documents our automatic reconciliation processes for both debit and credit requests that have failed during processing.
Depending on the operator implementation, when a debit transaction fails due to network issues, timeouts, or server errors, it can leave a transaction in a "hanging" or inconsistent state. It’s important to distinguish that on the Splash side, transactions are consistent and marked failed should a debit failure happen, but the operator side may be more complicated due to round and other game play mechanics.
To resolve this, we run automated reconciliation scripts multiple times a day. These scripts sweep for failed requests and attempt to gracefully reconcile them.
Our scripts handle failures differently depending on whether the debit request itself failed, or if the debit succeeded but the subsequent credit failed.
Triggers: Debit requests that fail on our side due to read timeouts or other 5xx server errors but succeed on client side.
Reconciliation Action: The script attempts to reconcile these by sending a debit cancellation request (url provided by client in the contribution callbacks field) to reconcile the hanging debit transaction.
POST <client_base_url>/debit/cancel
Content-Type: application/json
Authorization: Bearer <jwt-token>
Cancel Debit
| Field | Type | Required | Description |
|---|---|---|---|
sessionId |
string | Yes | SessionId used in request to contribute |
roundId |
string | Yes | Unique transactionId used in request to contribute |
transactionId |
string | Yes | Unique id of this debit request |
amount |
number | Yes | Amount to withdraw from user wallet |
jackpotId |
uuid (string) | Yes | Unique identifier of jackpot user has contributed to |
userId |
string | Yes | The JWT token’s sub field from the original contribution call. |
[POST] <client_base_url>/debit/cancel
{
"sessionId": "SESS-992834",
"roundId": "RND-110022",
"transactionId": "TX-556677",
"amount": 120.50,
"jackpotId": "JP_GOLD_001",
"userId": "ext-1234"
}
To prevent infinite loops and reduce unnecessary load on our systems and clients, we enforce a strict retry cap on our reconciliation scripts: