Gum is a stablecoin deposit gateway for merchants: create a deposit request through a small API, share its payer link, and let Gum bind the payer's attested wallet to a one-time stablecoin address (USDC or USDT), detect finalized transfers from that wallet, and settle exactly the requested amount to your wallet automatically. Partial deposits accumulate; overpayment remainders, expired balances, and late transfers go back to the payer's own wallet on-chain and are recorded per request; every observed transfer remains in an auditable PostgreSQL ledger; and every settled request yields an offline-verifiable Proof of Payment tying the document, the wallet, the address, and the transfers together.
With Docker, Rust, Foundry (anvil, cast, and forge), just, jq, and the PostgreSQL client installed, run the repository's end-to-end flow. The recipe provisions an isolated PostgreSQL container, builds the workspace, starts Anvil and the Gum services, deploys local contracts, signs in through the development identity provider, exercises deposit and recovery flows, and cleans everything up:
just e2eFor a live local stack with multiplexed logs, run just dev, then sign in at the dashboard or run just seed in another shell for an API key. See Local development for prerequisites and manual operation.
https://api.gum.money/v1 is the product: create deposit requests, read and list deposits, manage customers and attachments, download proofs, and register webhooks with one bearer API key (HTTP API reference). TypeScript applications can use the zero-dependency client in sdk/typescript. The key is minted in the dashboard, which signs in through Privy with an emailed one-time code and gives every account its own embedded wallet; see Authentication and API keys.
gum.money — the landing page, the hosted checkout at /pay/{id}, and the
merchant dashboard at /dashboard — lives in web/. It is a Next.js
app built on @gum/sdk: the checkout consumes the public payer API and is
where every deposit_url points; the dashboard signs in through Privy with an
emailed code — every account gets its own embedded wallet, where deposits
settle by default — and uses the same merchant API as the SDK with Privy's
identity token, so no API key ever reaches the browser (see
docs/dashboard.md). Run it beside the local stack:
npm ci
just webSee web/README.md.
Customer documentation is published at gum.money/docs
(web/app/docs): concepts, the dashboard, the hosted checkout, webhooks, the
SDK, the full API reference, and an architecture page for due diligence. The
Markdown below is the engineering record it draws on.
- Customer quickstart
- Deposit concepts and lifecycle
- HTTP API reference
- Customer FAQ
- Changelog
- Local development and configuration
- Staging: main, live, driven from your machine
- Deposit requests API
- Authentication and API keys
- Merchant dashboard
- Backend architecture: services, state ownership, messaging, recovery
- Deposit indexer architecture
- Load testing and benchmarking plan
- Production deployment runbook
- Operational runbook index
- End-to-end production smoke test
- Stuck deposit request diagnosis and recovery