Reading deposits
Two endpoints return deposits. Both return the same deposit object.
| Endpoint | Returns |
|---|---|
GET /casino/deposit/{id} | One deposit. |
GET /casino/deposits | A page of deposits for one casino, newest first. |
Webhooks tell you when a deposit changes. Use these endpoints to reconcile, to recover after downtime, or to check a deposit before acting on it.
Both single-deposit reads and deposits in the list carry late_payment: true after support
restores a late deposit. The boolean is present only when true and absent otherwise.
See Late payments before accepting one.
Get one deposit
GET https://quinix.byteconnect.us/casino/deposit/{id}
id is the deposit_id returned when the deposit was created.
curl https://quinix.byteconnect.us/casino/deposit/4821 \
-H "X-API-Key: $API_KEY"
{
"id": 4821,
"transaction_id": 90312,
"entity_id": 1234,
"gambler_ref": "sample-player-001",
"decision": "pending",
"decision_at": null,
"kyt_status": "passed",
"kyt_risk_score": "1.25",
"kyt_checked_at": "2026-09-25T15:21:40.000Z",
"return_address": null,
"currency": "BTC",
"wallet": "bc1qexampledepositaddress000000000000000",
"crypto_amount": 0.0017517,
"usd_amount": 103,
"player_amount": 100,
"entity_net_usd": 99,
"affiliate_net_usd": 99,
"charges": [
{
"beneficiary": "AFFILIATE",
"kind": "FEE",
"paid_by": "PLAYER",
"percent": 0.03,
"amount_usd": 3,
"amount_crypto": 0.00005102
},
{
"beneficiary": "BF",
"kind": "FEE",
"paid_by": "ENTITY",
"percent": 0.01,
"amount_usd": 1,
"amount_crypto": 0.00001701
},
{
"beneficiary": "BF",
"kind": "SPREAD",
"paid_by": "PLAYER",
"percent": 0.02,
"amount_usd": 2.10204,
"amount_crypto": 0.00003503
}
],
"fee": 0,
"fee_usd": 0,
"bf_fee_usd": 0,
"bf_spread_usd": 2.10204,
"affiliate_fee_usd": 3,
"crypto_rate": "58800.0000000000",
"market_rate": "60000.0000000000",
"status": "Confirmed",
"confirmed_crypto": 0.0017517,
"expires_at": "2026-09-25T15:30:00.000Z",
"created_at": "2026-09-25T15:00:00.000Z",
"updated_at": "2026-09-25T15:21:40.000Z",
"no_conf": false,
"no_conf_state": null,
"instant": false,
"instant_downgraded": false,
"instant_received_max_usd": null,
"machine_id": "kiosk-042",
"double_spent_at": null,
"double_spend_txid": null,
"ofac_status": "clear",
"acceptable": true
}
This is the deposit from the create example, paid in full, confirmed, and screened. It is ready to accept.
Errors
| Status | detail | Meaning |
|---|---|---|
| 400 | Invalid deposit ID | id is not a number. |
| 404 | Deposit not found | No deposit with this id under your affiliate. An entity-scoped key also gets this for a deposit of another casino. |
List deposits
GET https://quinix.byteconnect.us/casino/deposits?entity_id={entity_id}
| Query parameter | Required | Description |
|---|---|---|
entity_id | Yes | The casino's entity id. |
decision | No | Only deposits with this decision: pending, accepted, returned or frozen. The value is not validated: an unknown value returns an empty list. |
currency | No | Only deposits in this currency: BTC, LTC or ETH. An unknown value returns 400. |
limit | No | Page size. Default 50, maximum 100. Values above 100 are treated as 100. 0 or a non-numeric value is treated as 50. |
offset | No | Number of deposits to skip. Default 0. |
Deposits are ordered newest first. total is the number of deposits matching the filters,
across all pages. To page through, increase offset by limit until offset reaches
total.
curl "https://quinix.byteconnect.us/casino/deposits?entity_id=1234&decision=pending&limit=20" \
-H "X-API-Key: $API_KEY"
{
"deposits": [
{
"id": 4821,
"transaction_id": 90312,
"entity_id": 1234,
"gambler_ref": "sample-player-001",
"decision": "pending",
"...": "same fields as GET /casino/deposit/{id}"
}
],
"total": 1
}
Each element of deposits is a full deposit object, identical to the single-deposit
response.
Listing requires the casino to be enabled. If ByteFederal has disabled the casino, the
list returns 403 even though its deposits still exist and can still be decided. Read
them one at a time with GET /casino/deposit/{id}, which does not check the casino's
status.
Errors
| Status | detail | Meaning |
|---|---|---|
| 400 | entity_id is required | entity_id is missing. |
| 400 | Invalid entity_id | entity_id is not a number. |
| 403 | API key is scoped to a different entity | An entity-scoped key asked for another casino. |
| 403 | Entity status is 'disabled', must be 'active' or 'enabled' | The casino is disabled. See the note above. |
| 404 | Entity not found for this affiliate | The entity_id does not exist under your affiliate. |
An unknown currency value returns a 400 validation body, described on the
Errors page.
The deposit object
Identity
| Field | Type | Description |
|---|---|---|
id | integer | The deposit id. Same value as deposit_id in the create response and in webhooks. |
transaction_id | integer | The id of the underlying payment. |
entity_id | integer | The casino. |
gambler_ref | string | Your player reference, as sent at creation. |
machine_id | string or null | Your machine identifier, as sent at creation. |
created_at | string or null | When the deposit was created. |
updated_at | string or null | When the deposit record last changed. |
Payment
| Field | Type | Description |
|---|---|---|
currency | string | BTC, LTC or ETH. |
wallet | string | The deposit address. The create response calls it address. |
status | string | The payment status, set by ByteFederal's payment engine. Common values: Pending (waiting for payment), Succeed (paid in full, unconfirmed), Underpaid / Overpaid (paid a different amount, unconfirmed), Confirmed (one or more on-chain confirmations), ConfirmedKYTReview (confirmed, held by KYT for review or failure), Timedout (not paid in time), Refund (a return was sent). See Deposit lifecycle for every value and transition. |
late_payment | boolean | Present only when true on a restored late deposit; absent otherwise. Applies to both read endpoints. See Late payments. |
crypto_amount | number | The crypto amount quoted. After an accept with adjust_to_received, the final amount at the deposit's quote precision. |
confirmed_crypto | number or null | The crypto actually received on chain. Set as soon as the payment is seen, before confirmation. null until then. |
expires_at | string or null | When the quote expires, 30 minutes after creation. A payment seen before this time is honored. Players are shown a shorter 15-minute window. For a payment after expiry, see Expiry and late payments. |
double_spent_at | string or null | Fast deposits only. When a double-spend of the funding transaction was detected. |
double_spend_txid | string or null | Fast deposits only. The transaction that replaced the funding transaction. |
Money
| Field | Type | Description |
|---|---|---|
usd_amount | number | What the player pays in total, in USD, including player-paid fees. |
player_amount | number | The amount to credit the player, in USD. |
entity_net_usd | number or null | What the casino is settled for this deposit, after casino-paid fees. |
charges | array | Every fee and spread on this deposit. The fields are described in Charges. |
crypto_rate | string or null | The USD price per coin used for the deposit's current amounts, after spreads. A decimal string, not a number. |
market_rate | string or null | The market USD price per coin used for the deposit's current amounts, before spreads. A decimal string. A late accept updates it to the rate used at acceptance. |
affiliate_net_usd | number or null | Deprecated. Same value as entity_net_usd. |
fee, fee_usd, bf_fee_usd, bf_spread_usd, affiliate_fee_usd | number | Deprecated. Partial views of charges. Read charges instead. |
crypto_rate and market_rate are strings here and numbers in the create response. Parse
them as decimals.
When a deposit is accepted with adjust_to_received: true, crypto_amount, usd_amount,
player_amount, entity_net_usd, crypto_rate and every charge are replaced by the
re-priced values. For ordinary deposits, market_rate does not change. For a late deposit, market_rate is updated to the current rate used at acceptance. The original quote is preserved in ByteFederal's records.
Decision
| Field | Type | Description |
|---|---|---|
decision | string | pending, accepted, returned or frozen. Every deposit starts pending. See Accept, return, freeze. |
decision_at | string or null | When the decision was made. null while pending. |
return_address | string or null | The address sent with /return. null unless the deposit was returned. |
acceptable | boolean | A snapshot of decision, payment and screening readiness for acceptance. See the limits below. |
Screening
| Field | Type | Description |
|---|---|---|
kyt_status | string or null | Blockchain risk screening (KYT) result: pending, passed, review or failed. null before screening starts. |
kyt_risk_score | string or null | The KYT risk score, as a decimal string. |
kyt_checked_at | string or null | When KYT screening completed. |
ofac_status | string | Sanctions screening of the addresses that funded the deposit: pending, clear, hit or timed_out. See below. |
ofac_status values:
pending: screening has not finished. Accept and return are refused.clear: no match. Accept and return are allowed.timed_out: screening missed its deadline. Accept and return are allowed. Screening continues and can still turn intoclearorhit.hit: a funding address is sanctioned. Accept and return are refused permanently. A deposit stillpendingis frozen by ByteFederal. If you had already accepted it (possible aftertimed_out), the decision staysaccepted. Anofac_completewebhook reports the hit, and you are responsible for reversing the player's credit.
The ofac_complete webhook announces each change. See the
Webhook event reference.
Fast deposits
| Field | Type | Description |
|---|---|---|
no_conf | boolean | Created with no_conf or instant. |
no_conf_state | string or null | Pre-confirmation state of a fast deposit: pending_guards, eligible, fell_back or double_spent. null for standard deposits and before the payment is seen. Only eligible allows accept before confirmation. |
instant | boolean | Created with instant. |
instant_downgraded | boolean | The player sent more than the instant received ceiling, so the deposit now waits for KYT like a no-conf deposit. |
instant_received_max_usd | number or null | Instant deposits only: the received-value ceiling that applies to this deposit. |
Fast deposits are explained in Creating deposits.
All timestamps are ISO 8601 strings in UTC, for example 2026-09-25T15:00:00.000Z.
The acceptable flag
acceptable is a snapshot of decision, payment and screening readiness for acceptance.
It checks:
- the decision is
pending, - the payment status allows accepting (confirmed, or eligible before confirmation for a fast deposit, and not double-spent),
- OFAC screening is
clearortimed_out, - KYT has passed, or the deposit is instant, KYT has not finished, and the received value is within the instant ceiling.
The same flag is on casino deposit events, but not on generic transaction.<status>
events. Key your accept logic on it rather than re-implementing these readiness rules.
Three limits to know:
- It is a snapshot. A double-spend or a late KYT failure can turn it back to
falsebefore your accept call lands. Keep handling409from/accept. - It does not check amount adjustments or late-payment repricing. A deposit paid with the wrong amount can show
acceptable: true, and/acceptthen fails with400until you sendadjust_to_received: true. Compareconfirmed_cryptowithcrypto_amountbefore accepting. Every restored late deposit requires that flag even when the amounts match, and acceptance can still fail if it cannot be repriced. See Accept, return, freeze. - A late instant accept revalues the ceiling. Readiness uses the deposit's recorded
rate. A late accept uses the current market rate, which can put an instant deposit still
waiting for KYT over its ceiling. Accept then returns
409codeinstant_received_over_capeven ifacceptablewastrueand the deposit's state has not changed. Wait for KYT to pass.