Cage USDC cashier
Cage · by Appently Gaming

USDC in. USDC out. Never in our hands.

The non-custodial USDC cashier for fantasy, contest, and sweepstakes operators. Players deposit to an address that is theirs, the money lands in your treasury, and every payout leaves from a wallet only you hold. Cage keeps the books, screens the wallets, and tells your backend what happened.

appentlygaming.com/cage/portal
The Cage operator portal: treasury balance, deposits waiting, payouts to approve, and books that balance

Every operator gets a portal. Approve payouts, sweep deposits into the treasury, and watch the books balance against the chain.

USDC on BaseNetwork fees are pennies.
No keysOn our server. Cage cannot move a cent.
Every walletScreened against the sanctions list.
To the centBooks balanced against the chain.
HostedOr installed on your server. You can own it.
How it works

Deposit. Sweep. Pay out.

Three moves, and the money is never anywhere but a player's own address or your treasury. Cage watches the chain and does the checking. Your wallet does the signing.

01

Deposit

Your backend asks Cage for the player's address and shows it. The player sends USDC from any wallet or exchange. Cage sees it land, re-reads the transfer from the chain, screens the sender, and tells your backend to credit the balance.

  • The address is the player's for good
  • Credited about a minute after it lands
  • HeldUnder the minimum, or a sanctioned sender: held for a person
02

Sweep

Player addresses are small contracts with one power: forward to your treasury. Press Sweep in the portal and one transaction moves everything in. Not to us, not to an attacker, not to anyone else.

  • Up to forty addresses in one transaction
  • Any wallet can pay the gas
  • Treasury fixed in the contract. Nobody can redirect it
03

Pay out

Your backend asks for a payout. Cage screens the destination and queues it, and your wallet signs it from the portal. It counts as paid when the chain confirms it arrived, not when the wallet says so.

  • New wallets and large amounts wait for a person
  • Pay all in one go, or export a batch for Safe
  • RefusedSanctioned destination
Fails closed

If anything does not match, the money waits. A stale sanctions list, a node that will not answer, or a transfer that does not match the chain all stop the flow. Cage never guesses.

What you get

Built for real money, not a demo.

The details that matter once the first real deposit lands.

01Non-custodial

There is no key on the server. Cage cannot move a cent, and neither can anyone who breaks into it.

02Verified before credit

Every deposit is re-read from the chain: right token, real transaction, enough confirmations. Large deposits wait for finality.

03Sanctions screening

Every sending and receiving wallet is checked against the OFAC list, refreshed nightly. A match is held. It is never credited and never paid.

04Nothing twice

A deposit cannot be credited twice and a withdrawal cannot be paid twice. The database itself refuses.

05Books that balance

Ledger against chain, to the unit, on demand. One number tells you everything is accounted for.

06Signed webhooks

Your backend hears about every deposit and payout, signed so it can trust the message. Test it from the portal before any money moves.

07Location gate

Switch off the states where USDC funding is not allowed. Massachusetts is off by default. Plugs straight into Entry Check.

08Hosted, or on your server

We run it, or you do. Same code, same portal, same nightly screening.

09Drop-in clients

PHP and Node clients, plus a complete webhook receiver with signature checks and once-only crediting built in.

Who holds what

Your money. Your keys. Our books.

Custody is the main question with crypto. Here is the plain answer for every dollar that moves through Cage.

Player addressForwards only

A contract with one power: send to your treasury. It cannot pay anyone else, and the address is the player's for good.

Your treasuryYour keys

Every deposit ends up here. Your wallet, or a Safe multisig. Fixed in the contract on day one and never changed.

Your walletSigns every payout

Cage builds the transaction. A person approves it in a wallet you hold. Nothing leaves the treasury any other way.

CageNo funds, no keys

The addresses, the watching, the screening, the books, and the messages to your backend. Never the money.

Player wallet→Player address→Your treasury→Player wallet Cage sits to the side, watching and writing it down.
The portal

Your portal, not a ticket queue.

Sign in and your cashier is in front of you. Approve what is waiting, press Pay all, press Sweep, and open the books. Appently sees the same screen when you need a hand.

Operator sign in →
  • Payouts in review, with the reason each one is there
  • Pay all from your wallet, or export one batch for Safe
  • Sweep deposits into the treasury in one transaction
  • Books, sanctions list, chain watcher, and webhook health at a glance
Where it plugs in

Three things to build. Server side.

Your balance ledger stays yours. Cage tells you what arrived and what left. A developer wires it in a day or two with the drop-in clients.

One call

Deposit screen

Ask for the player's address and show it with a QR code and three facts: USDC, on Base, and the minimum amount.

Drop-in file

Webhook receiver

Credit on deposit, close on payout. Signature checked, and each event applied once.

One call

Withdrawal call

Hold the balance, ask Cage, show the status. A retry can never pay twice.

Included

The portal

Approve, pay, sweep, and check the books. Nothing to build.

Four rules to follow
  • Call from your server, never from the browser. The key stays out of your app and your pages.
  • Credit a deposit once per deposit id, even if the message arrives twice.
  • Tell players plainly: USDC on Base only. Another token or network sent to the address is not credited.
  • Cage screens wallets. It does not verify identity. Know who a player is before money goes out.
The API

Two calls that matter.

A bearer key, JSON in, JSON out. Amounts come as decimal strings and as whole units, so nothing is ever rounded.

Deposit address
# POST /v1/deposit-address, from your server
{ "player_id": "player-1", "ip": "152.2.10.1" }

# 200
{
  "allowed":     true,
  "address":     "0x4B2c…9aF1",
  "chain":       "Base",
  "token":       "USDC",
  "min_deposit": "1.00"
}
Payout
# POST /v1/payouts. request_id is yours; a retry returns the same payout.
{ "request_id": "wd-1001", "player_id": "player-1",
  "to": "0x8fA3…c02D", "amount": "100.00" }

# 201
{
  "accepted": true,
  "payout":   { "id": "pay_7c…", "status": "approved" }
}

# Then, on your webhook
"type": "payout.confirmed"  # the chain shows it arrived
200Answer, or a refusal with reasons
401Bad key
409Same request id, different details
503Not ready, or the chain is unreachable

Full docs, every event type, and the drop-in clients are on the portal's Integration page.

Pricing

Flat monthly. Not a cut of your deposits.

Crypto processors take 0.5% to 2% of every deposit and hold your money while they do it. Card processors take more and keep a reserve for months. Cage is a flat monthly rate, the money is never in anyone's hands but yours, and you can buy the license outright and pay nothing after.

Install

One-time, on the monthly plans

$3,500
One-time
  • Hosted by Appently, or installed on your server
  • Live the day you paste your treasury address. Nothing to sign
  • Webhook wired and tested with your developer
  • Sanctions screening and chain watcher scheduled
  • Test deposits and payouts round-tripped before go-live
  • Your portal login and first API key
Start install

Standard

For one brand getting started

$499
Per month
  • Up to $100,000 in deposits a month
  • No percentage. No per-transaction fee
  • Sanctions list refreshed nightly
  • Signed webhooks and the event feed
  • Operator portal: approve, pay, sweep, books
  • Email support, next business day
Get started

One-time license

Own it. Nothing monthly.

$25,000
One-time, install included
  • Install included. No monthly fee, ever
  • Perpetual license for one operator brand
  • Full source, runs on your server
  • Unlimited volume. Your node, your gas
  • Sanctions refresh and chain watcher set up on your cron
  • Ongoing updates optional, $2,500 a year
Buy the license

Higher volumes and additional brands are quoted. Network fees are pennies and are paid by the wallet that sends. On the monthly plans, pay annually and get twelve months for the price of ten. Prices in U.S. dollars.

The cashier that never holds your money.

Your stack, your treasury, your states. Tell us your stack and your treasury wallet, and you will have a portal login and an API key this week. Send a note, or book a call and we will walk through it together.

Already running Cage? Operator sign in →

Built for
  • Daily fantasy operators
  • Sweepstakes and social casinos
  • Pick'em and contest sites
  • Skill gaming platforms