Appearance
Deposit
A Deposit (also called off-ramp — moving from crypto to fiat) lets a user send tokens from their connected wallet and receive EUR on a Holyheld card. The user signs one blockchain transaction; BRRR handles conversion, routing across chains, and crediting the recipient's card.
Deposits are the most common flow on the platform. Reach for them whenever your application needs to turn on-chain assets into spendable fiat — payouts to creators, customer cash-out, agent operating budgets, or simply letting a user move funds out of a wallet.
How a Deposit works
- Your application proposes a Deposit: source wallet, token, amount, and recipient (a
$holytagfor sending to anyone, or the wallet's own card). - BRRR returns a live conversion quote — token amount in, EUR amount out — together with the routing data that describes how the transaction will execute on-chain.
- The user signs in their wallet. If the token needs an allowance approval or supports an EIP-2612 permit, the SDK handles that transparently in the same flow.
- BRRR receives the tokens, converts at the quoted rate, and credits EUR to the recipient's Holyheld card.
The user's private key never leaves their wallet. BRRR is non-custodial through the entire signing flow.
Choose your integration surface
| Surface | When to use | Auth |
|---|---|---|
| SDK | A user-facing app where the end user signs the transaction in their wallet | SDK API key |
| Card API | You already operate a card, custody, or payments product and want low-level building blocks | X-Api-Key |
| OTC API | Server-to-server quote and execution against a known recipient | X-Api-Key |
| Multi-tenant Settlement API | A regulated partner running settlement for its own customers | X-Api-Key |
If your end user controls the wallet and signs in the browser, choose the SDK. If you control the wallet and operate from a server, choose the API surface that matches your role.
Deposit with the SDK
The topup method (which executes a Deposit) is the primary entry point. A minimal end-to-end EVM example:
typescript
import HolyheldSDK, { Network } from '@holyheld/sdk';
const sdk = new HolyheldSDK({ apiKey: process.env.HOLYHELD_SDK_API_KEY });
await sdk.init();
const settings = await sdk.getServerSettings();
if (!settings.external.isTopupEnabled) {
throw new Error('Deposits unavailable');
}
const tag = await sdk.getTagInfo('RECIPIENT_HOLYTAG');
if (!tag.found) {
throw new Error('Recipient not found');
}
const quote = await sdk.evm.offRamp.convertTokenToEUR({
walletAddress: '0x...',
tokenAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC on Ethereum
tokenDecimals: 6,
amount: '100',
network: Network.ethereum,
});
await sdk.evm.offRamp.topup({
publicClient,
walletClient,
walletAddress: '0x...',
tokenAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
tokenNetwork: Network.ethereum,
tokenAmount: quote.tokenAmount,
transferData: quote.transferData,
holytag: 'RECIPIENT_HOLYTAG',
supportsSignTypedDataV4: true,
});Solana follows the same shape via sdk.solana.offRamp.topup with a Connection instead of a viem publicClient. See the topup reference for parameters and callbacks, and topupSelf when the destination is the connected wallet's own card.
Deposit through the APIs
Server-side Deposits skip the wallet-signing flow and instead rely on:
- A registered partner (Multi-tenant Settlement) or your own platform credentials (Card API, OTC API).
- An API-issued quote that locks the conversion rate.
- An execution call that posts the on-chain transfer from your custody system.
Endpoint inventories live in the API Sections page; the Multi-tenant Settlement section walks through the partner-specific quote → execute → status loop.
Recipient, currency, and assets
- Recipient. Any Holyheld user identified by
$holytag, or the connected wallet's own card viatopupSelf. The$prefix appears in code; in prose, refer to the value as a holytag. - Settlement currency. EUR. All Deposits credit a Holyheld card balance.
- Supported assets and networks. USDC, USDT, native gas tokens, and a curated set of EVM and Solana tokens. The canonical list is on the Supported Networks page — that page is the source of truth, not this hub.
Errors
The SDK throws typed errors via HolyheldSDKError with codes from HolyheldSDKErrorCode. Common Deposit codes include UnexpectedWalletNetwork, UserRejectedTransaction, UserRejectedSignature, and FailedTopUp. The full list — and how to catch them — lives in SDK error handling.
Where to next
topupandtopupSelfreferenceconvertTokenToEURandconvertEURToToken- Orchestrate — the routing layer that makes cross-chain Deposits work
- Webhooks — for server-side notification when a Deposit settles
