---
title: "Wallets and deposits"
description: "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](/recipes/accounts-v2/overview) |

## Which recipe

| Situation | Status | Recipe |
| :-- | :-- | :-- |
| USDC or USDT on Polygon, Ethereum or Avalanche | Available | [Give a customer a stablecoin address on an EVM network](/recipes/wallets-and-deposits/give-a-customer-a-stablecoin-address-on-an-evm-network) |
| USDC on Stellar or Solana | Available | [Receive USDC on Stellar or Solana](/recipes/wallets-and-deposits/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](/recipes/wallets-and-deposits/show-a-customer-their-wallets-and-balances) |
| "I sent 100 USDC and it is not there" | Available | [Find a missing stablecoin deposit](/recipes/wallets-and-deposits/find-a-missing-stablecoin-deposit) |
| A bank deposit into an account, and its fee | Available | [Know what a bank deposit costs](/recipes/wallets-and-deposits/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](/recipes/wallets-and-deposits/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 the `Api-Key` header. A `grvSec_sandbox_` key creates **test-network** wallets. Any other key creates main-network wallets.
- Every `POST /v1/wallets` needs its own new `Idempotency-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`, never `Polygon`.
- 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 carry `status` in upper case (`COMPLETED`, `FAILED`), unlike every other webhook. Deduplicate every webhook on the body's `event_id`, never on the `X-Event-ID` header.
- Amounts and balances are decimal strings. Add them as decimals, never as floats.
