Skip to main content
A new product account is empty. Before the user can deposit into a vault, post collateral or buy an asset, move tokens from their wallet into the account with the product’s transfer endpoint and action: "DEPOSIT". This works the same way in Earn, Credit and Tokenized Assets. Perpetual Trading doesn’t use a product account: you fund it with a USDC deposit to Hyperliquid instead.

Request

Move 100 USDC from the user’s wallet into their Earn Account on Base:

Response

With gas_sponsorship: false, transaction is a standard token transfer from the user’s wallet to their account, and eip_712 is null. The user signs and sends the transaction.
Here to is the USDC contract on Base, and data encodes a transfer of 100 USDC to the account. The API checks the wallet first: if it holds less than amount, the call returns 400 Insufficient balance.
USDC on BNB Smart Chain has 18 decimals instead of 6. Amounts are always in token units, so "100" still means 100 USDC there.
With gas sponsorship, the user only signs messages. Your sponsor wallet sends the transactions and pays the gas. Each token needs a one-time approval first, so that later transfers can be authorized by signature alone.
1

Once per token: approve the token

Call POST /v2/gas_sponsorship/approve_transfer with gas_sponsorship: true. The user signs the returned eip_712, and you relay it as in step 3.
This works for tokens that support EIP-2612 permits, like USDC. For tokens that don’t, such as USDT and WETH, send gas_sponsorship: false instead: the user sends the approval transaction and pays its gas. If the allowance is already in place, the call returns 400 Token allowance already set and you can skip this step.
2

Request the deposit

Call transfer with gas_sponsorship: true and spender set to your sponsor wallet. Instead of a transaction, the response has eip_712: a transfer authorization for the user to sign, valid for 30 minutes.
3

Sign and relay

The user signs eip_712 as EIP-712 typed data (for example with eth_signTypedData_v4). Send the signature and the unchanged eip_712 to POST /v2/gas_sponsorship/prepare. It returns a transaction for your sponsor wallet to sign and send.
Two fields have to line up:
  • sender in prepare must be the spender from transfer. The signature only works for the wallet it names.
  • product in prepare picks the account that receives the tokens: earn, credit or tokenized_assets. It defaults to earn, so a Credit or Tokenized Assets deposit sent without it lands in the user’s Earn Account.
If you leave out spender, it defaults to the product account itself. That’s only for bundles, where the account pulls the tokens as one step of a larger transaction. Sponsored flows need the owner to be a regular wallet (EOA), since the API checks the signature against the owner’s address. See Gas Sponsorship for more.

Next

Balances and Positions

Read what the account holds and how it’s performing.