AKITSORA GAMING

Technology

Technology & integration

This page is about what happens when things break. On a good day every supplier looks the same.

01

Get credentials

We issue an API key, a signing secret and a sandbox. Keys rotate on demand with no downtime.

02

Exchange for a token

When a player opens the game, your backend calls launch once with the player id, currency and game code, and receives a single-use token.

03

Send the player in

Append the token to the game URL. Pure HTML5, no plugins, one build for desktop and mobile.

04

We call your wallet

Every bet and every payout hits your wallet API in real time with an idempotency key. The money never leaves your system.

Wallet calls have three outcomes, not two

The most commonly mis-implemented part of any wallet integration is filing “don't know” under “failed.”

ok

Confirmed success

A 200 response with a matching amount. The round proceeds.

rejected

Confirmed rejection

Insufficient funds, locked player, currency mismatch. The player is told, no round is created, no money moved.

unknown

Outcome unknown

Timeout, dropped connection, 5xx, unparseable response. You may already have debited. Treating it as failure and retrying double-debits; treating it as success and dealing gives the money away. The round stops as pending and nothing is dealt.

The only safe evidence that a transaction did not happen is your wallet explicitly answering “not found.” Until then the reconciliation worker keeps asking with the same idempotency key.

The life of a round

Settling must be distinct from open: the two mean opposite things to the reconciliation worker. Open means “finish the remaining free spins.” Settling means “retry the credit with the same idempotency key.” Conflate them and a finished round gets dealt a second time.

pendingCreated; the debit outcome is not yet known. Nothing is dealt in this state.
openDebit confirmed, round in progress — including unfinished free spins.
settlingPlay is over, the payout is not yet confirmed.
settledPayout confirmed, ledger balanced.
voidedConfirmed not debited, so the round is void. No money moved.

Idempotency and retries

  • Re-sending the same round id replays the original result. It never debits twice.
  • Each free spin carries its own idempotency key, so a reconnect never skips or repeats a spin.
  • A failed payout is never retried on the original key — that key already holds a failed transaction, so re-sending merely replays the failure. Retries use an incrementing sequence, and only once your wallet explicitly answers “not found.”

What operators get

Back office

Round search, player history, single-round replay, daily reconciliation reports. An operator account sees only its own data — tenant isolation is enforced at the database layer, not by careful queries.

Daily reconciliation

The daily report ends with three preconditions that must all be zero: pending transactions, escalated transactions, unbalanced entries. If any is non-zero, that report is not fit to reconcile against.

Round replay

Given a round id, support can recompute the round and see every spin exactly as the player saw it.

Sandbox

Ships with a mock wallet so you can test timeouts, rejections and duplicate requests on your own schedule.

Data & retention

5-year retention

Rounds and ledger entries are kept for 5 years. The hot window defaults to 13 months; older partitions are archived to compressed files.

Archives are verified

Detach, export, read back and re-hash — and only then drop. Any failure mid-way re-attaches the partition.

Backups are restored

Backups are restored to a scratch database on a schedule and checked against the accounting invariants. An untested backup is not a backup.

Tenant isolation

Row-level security is enforced by the framework; the application's database role has no bypass privilege.

Deployment

Region

Tokyo — the lowest-latency option available for Taiwan and South-East Asia.

Game client

Pure HTML5, no plugins, one build for desktop and mobile. Player traffic served through a CDN.

Operator API

Its own domain, no CDN in front, server-to-server only.

Back office

Its own domain, cross-origin to the game. Same-origin makes strict cross-site request protection impossible to express.

Full documentation

The complete wallet API spec — endpoints, signing, error codes, retry semantics, sandbox — is a separate document. Ask and we'll send it with sandbox credentials.