Balance and wallets¶
You hold one USDC balance. It lives in your home wallet, a wallet JET provisions for you at onboarding on your home network. Payments, batches, withdrawals and off-ramps are all funded from it, and deposits land in it.
Every field is in the API reference.
You never pick a network¶
USDC on one network is not the same asset as USDC on another, so JET keeps
your balance on one: your home network. You do not name a wallet or a network
when you pay. If a payment request does name a wallet, it must be the home wallet
(422 not_home_wallet otherwise), because USDC anywhere else is on its way home.
USDC can still arrive on other networks: when you or a payer
send USDC on chain, you choose the network. Anything
that lands on a network other than your home one is moved home automatically,
and shows as settling until it gets there.
GET /balance¶
| Field | Notes |
|---|---|
available |
On your home network. What a payment, withdrawal or off-ramp can spend now |
settling |
On other networks, on its way home. Not spendable yet |
total |
available + settling |
complete |
false if a wallet could not be read. The figures are then a floor, never a claim that the unread wallet is empty |
reportedAt |
When the figures were read |
Amounts are integer minor units at scale: 2500000000 is 2,500 USDC. See
Amounts and currencies.
501 means no wallet provider is configured on this environment, which is not
the same answer as an empty balance.
Why listings carry no balances¶
JET's ledger is the source of truth for value. What a wallet provider reports is a report, reconciled against the ledger, never treated as authoritative. So account listings carry no balances, and every balance JET returns is stamped with when it was read.
GET /wallets¶
Your wallets.
| Field | Notes |
|---|---|
id |
JET's ID for the registration |
externalId |
The wallet's ID at its provider. Either ID works wherever a wallet ID is accepted |
address |
The on-chain address |
chain |
The network the wallet is on. null means it is not recorded, and is never guessed |
status |
active when usable |
You may hold a wallet on every network JET supports, at the same address. Only the one on your home network is your spendable balance.
GET /wallets/:walletId¶
One wallet, by id or externalId. Same shape as a listing entry. A wallet you
do not own returns 404, not 403; see
Conventions.
GET /wallets/:walletId/balances¶
What the wallet provider reports one of your wallets holds, per asset, with
reportedAt. 501 when no wallet provider is configured.
For "how much can I spend", use GET /balance; this endpoint is
for looking at one wallet.
Issuer accounts¶
Issuer accounts held for you, in the same shape as a wallet listing with a
different kind:
Issuer directory¶
The stablecoin issuers this environment supports:
Returns 501 where no issuer is configured.
Endpoints that are not available¶
These exist in the contract and answer 501 with a reason on every environment
today. Check /capabilities rather than calling
them speculatively.
| Endpoint | Instead |
|---|---|
POST /wallets/:walletId/transfers |
Not needed: your balance is one wallet |
POST /issuers/:issuerId/mint |
Deposit fiat: it is converted to USDC for you. See Deposits |
POST /banking/wire-transfers |
Pay fiat out with an off-ramp |
Removed¶
These no longer exist. Each now answers 404.
| Endpoint | Why, and what to use |
|---|---|
POST /wallets |
Wallets are provisioned by JET at onboarding. You never register one |
GET /issuers/:issuerId/assets, GET /issuers/:issuerId/balances |
They reported JET's own position at the issuer, not yours |
GET /banking/accounts, GET /banking/accounts/:id/balances |
JET holds no bank account for you. Where to send money is GET /treasury/deposit-instructions |
Redemption (POST /issuers/:issuerId/redeem) is closed to integrators and answers
501: to turn USDC into fiat, use an off-ramp.