Wallets and deposits
Choose the recipe for receiving money: a stablecoin address on an EVM network, on Stellar or Solana, a balances screen, a missing deposit, what a bank deposit costs, and the webhooks that announce deposits.
These recipes cover money coming in, as stablecoins sent to a customer's wallet or as bank transfers into a customer's account. Use this page to pick the recipe for your case.
A money example to keep in mind. Ada withdraws 250 USDC from her exchange to her Gravv Polygon address. Gravv sees it arrive, sends inflow.onchain.completed, records a crypto_funding row of 250, and her wallet shows USDC 250.000000. If she had picked Ethereum in her exchange instead, Gravv would credit nothing, because it watches the address on Polygon only.
Wallet or account
| Wallet | Account | |
|---|---|---|
| What it is | A stablecoin address only | A financial account, with bank details where the option has them |
| Receives | Stablecoins from wallets and exchanges | Bank transfers, and stablecoins on the account's own wallet |
| How you get one | POST /v1/wallets, one wallet per call |
Through the account flows. See Accounts v2 |
Which recipe
| Situation | Status | Recipe |
|---|---|---|
| USDC or USDT on Polygon, Ethereum or Avalanche | Available | Give a customer a stablecoin address on an EVM network |
| USDC on Stellar or Solana | Available | Receive USDC on Stellar or Solana |
| USDT on Solana or Stellar | Not supported | No recipe |
| Wallets on any other network | Not supported | No recipe |
| A "My balances" screen | Available | Show a customer their wallets and balances |
| "I sent 100 USDC and it is not there" | Available | Find a missing stablecoin deposit |
| A bank deposit into an account, and its fee | Available | Know what a bank deposit costs |
| Webhooks for deposits, and catching up on the ones your server missed | Available | Set up webhooks and catch up on missed events |
| Charging a payer by local bank transfer or card | Not yet available in these recipes | No recipe |
Rules every recipe relies on
- Every request goes to one host,
https://api.gravv.xyz, with theApi-Keyheader. AgrvSec_sandbox_key creates test-network wallets. Any other key creates main-network wallets. - Every
POST /v1/walletsneeds its own newIdempotency-Key, and each new key creates a new wallet. Reuse a key only to retry after a timeout or a 5xx. After a 4xx, use a new key, because Gravv replays the 4xx under the old key for 24 hours. - Network values are lower case, such as
polygon, neverPolygon. - Always show the network next to an address. The same
0x…address exists on every EVM network, but Gravv watches only the wallet's own network. inflow.onchain.*events carrystatusin upper case (COMPLETED,FAILED), unlike every other webhook. Deduplicate every webhook on the body'sevent_id, never on theX-Event-IDheader.- Amounts and balances are decimal strings. Add them as decimals, never as floats.