For apps
Fewer bots, without holding your users' data.
You have a bot problem, and you don't want to collect IDs to fix it. That's who this is for.

The problem
A bot farm can pretend to be a crowd for almost nothing.
The usual fixes ask your real users for more: a phone number, a puzzle, an ID.
How it works
Ask for something a bot can't fake cheaply.
- 01
Sign one message
A user signs one message with their Bitcoin address. Nothing else to fill in. - 02
You set the bar
Your app checks the address held a minimum of sats, unspent, for a minimum number of days. - 03
Nothing moves
No sats change hands. Nobody holds them. Anyone can check the result against Bitcoin.
import { ocGate } from '@orangecheck/gate';
// Only addresses holding at least 100,000 sats,
// unspent for 30 days, may post.
app.post(
'/post',
ocGate({ minSats: 100_000, minDays: 30, address: { from: 'header' } }),
postHandler
);A thousand fake accounts means bitcoin parked across a thousand addresses. Honest users only wait.
What you get
Open packages for the stack you already run.
A drop-in gate
@orangecheck/gateMiddleware for Express, Next, Fastify, Hono and Workers.
A Nostr relay filter
@orangecheck/relay-filterFor strfry. Turns away events from npubs with no bitcoin behind them.
Sign in with Bitcoin
<OcSignInButton />A sign-in popup, and session checks for Next, Express and Hono.
Pay your users
@orangecheck/me-clientReport the events you value. Users get their share. You get a receipt.
All of it is open: MIT code, open specs, TypeScript and Python SDKs. github.com/orangecheck
What it costs
An afternoon of integration. The open layer is free.
The gate, the relay filter and the sign-in components are MIT-licensed. Paying your users is per event, with no minimum: you set each event's price, orangecheck keeps 20%, and you choose how much goes to your users, up to 80%.
We help you wire it up and answer technical questions directly.
For your users
Sign in. Earn. Own.
- 01
Sign inlive
The way they always do. Email or a wallet. Nothing new to learn. - 02
Earnin testing
Small amounts for things they already do online, shared by your app: up to 80% of each event. - 03
Ownon the path
Over time, it moves into a wallet they hold themselves.
The payout rail is in bring-up, so no sats move yet. OrangeCheck holds what accrues until a federation takes over. Who holds what
The honest version
What's true today.
- YesOpen source. Every receipt checks against Bitcoin, offline.
- YesNo token. No ads. No KYC.
- In testingEarning in sats. The payout rail is in bring-up, so no sats move yet.
- In testingCustody. OrangeCheck holds your accrued sats during bring-up — it is operating every role until independent operators take them. Federation custody and graduation to your own keys are what replace it.
- Not yetMoving sats to a wallet you hold. Graduation to your own keys is not live: no federation is bound yet.
| Status | What |
|---|---|
| Yes | Open source. Every receipt checks against Bitcoin, offline. |
| Yes | No token. No ads. No KYC. |
| In testing | Earning in sats. The payout rail is in bring-up, so no sats move yet. |
| In testing | Custody. OrangeCheck holds your accrued sats during bring-up — it is operating every role until independent operators take them. Federation custody and graduation to your own keys are what replace it. |
| Not yet | Moving sats to a wallet you hold. Graduation to your own keys is not live: no federation is bound yet. |
Who holds what, computed from the live state: ochk.app/custody
Why partner now
We're building it with a few apps before it opens up.
You shape it
What your integration needs gets built. Real needs, not guesses.A direct line
You talk to the person who built it. Not a sales team.Ready when it opens
Integrate during testing. Be live when it opens.
Start on your own
Everything is ready to try today.
Read the quickstart
Nine steps from a new project to your first receipt, with the real code.
Create a project
Your orangecheck sign-in is your developer account. The wizard has three steps.
A 20-minute call. Tell us about your spam problem.
Nothing more than a conversation. If it fits, we build the integration together during testing.
The open layer is supported by an OpenSats grant · github.com/orangecheck