Skip to main content
A funding wallet is the Safe smart account on a card’s chain that the card draws balance from. There is no credit line on the Sumvin side — value sitting in the funding wallet is what authorises a transaction.

Why this exists

Card-network rails expect an account to draw from. For a crypto-funded card that account is an on-chain wallet, but partners need a stable Sumvin handle on it: which wallet backs which card, what’s in it, how to top it up, where to look at recent activity. The funding wallet binding gives partners that handle without forcing them to track the relationship between an issued card and its on-chain backing themselves.

How it works

Every card record has a linked_wallet_id pointing at a UserWallet row. That wallet is a Safe (the user’s is_eoa=false wallet) on the same chain as the card. Sumvin returns the Safe’s address on every card response as linked_wallet_address, and exposes a dedicated funding endpoint for richer detail and updates.
Card (external_id, status, …)
  └─ linked_wallet_id ──▶ UserWallet (Safe, is_eoa=false)
                            └─ address ──▶ Safe contract on Sei

Launch chain

Sei (chain ID 1329) is the launch chain for cards. The Safe that backs a card is deployed on Sei, and balances surface in the card’s funding response from there. Multi-chain card backing is not exposed today — a card has exactly one funding wallet on one chain.

Funding the wallet

A partner funds a card by sending value to the funding wallet’s address. The wallet is a normal Safe — anything that can transfer to a Safe address (an on-ramp, a DEX, a transfer from another wallet) can fund the card. There is no Sumvin-side “deposit” call. Once value lands on-chain at the Safe address, it’s available as funding. The Meld ramps product is the supported on-ramp path for converting fiat into the funding wallet’s chain assets.
To surface what the funding wallet currently holds, with USD valuations, read its balance summary. The wallet ID returned from card responses is the same ID those wallet endpoints accept.GET /v0/wallets/{wallet_id}/balances

Endpoints

Two endpoints expose the funding binding directly. Both use standard Juno JWT auth (x-juno-jwt).

Get card funding

GET /v0/cards/{card_id}/funding Returns the funding configuration for a card — currently the linked wallet’s address and a configured flag indicating whether the card has a funding wallet linked at all.
curl https://api.sumvin.com/v0/cards/card-3f9c…/funding \
  -H "x-juno-jwt: <token>" \
  -H "x-juno-orgid: <your-org-id>"
Response200 OK
{
  "id": "card-3f9c…",
  "source_type": null,
  "wallet_address": "0xE23c…E992",
  "fiat_account_id": null,
  "configured": true,
  "_links": {
    "self": { "href": "/v0/cards/card-3f9c…/funding" },
    "card": { "href": "/v0/cards/card-3f9c…" },
    "wallet": { "href": "/v0/wallets/wallet-…" },
    "wallet-assets": { "href": "/v0/wallets/wallet-…/assets" },
    "wallet-transactions": { "href": "/v0/transactions?wallet_id=wallet-…" },
    "card-transactions": { "href": "/v0/transactions?card_id=card-3f9c…" },
    "user": { "href": "/v0/user/me" },
    "update": { "href": "/v0/cards/card-3f9c…/funding", "method": "PUT" }
  }
}
id
string
External card ID.
wallet_address
string | null
Address of the Safe backing the card. null if no wallet is linked.
configured
boolean
Whether a funding wallet is currently linked to the card.
source_type
string | null
Funding source type. Reserved — not yet populated by the read endpoint.
fiat_account_id
string | null
Linked fiat account ID. Reserved for future fiat funding sources.
The _links block is the canonical entry point for everything you’d want to do with the funding wallet — read its assets, list its transactions, or pull recent card transactions filtered to it.

Update card funding

PUT /v0/cards/{card_id}/funding Accepts a funding source declaration. The endpoint exists and validates the request, but the persistence and switching logic for changing a card’s funding source is not yet wired through. The response includes a message: "Funding configuration coming soon" indicator and configured: false.
This endpoint is a stub today. The route accepts and returns the payload shape so client integrations can be built against it, but the funding source change is not persisted. Treat the linked wallet returned by the card read (or its funding endpoint) as the authoritative funding source.PUT /v0/cards/{card_id}/funding — Stub; not persisted.GET /v0/cards/{card_id} — Authoritative card record.
The accepted request shape:
source_type
string
required
One of wallet or fiat.
wallet_address
string
Required when source_type is wallet. The address of an existing user wallet to use as the funding source.
wallet_chain_id
integer
Required when source_type is wallet. Must match the chain of the wallet at wallet_address.
fiat_account_id
string
Reserved for source_type=fiat.

Reading balance and activity

The funding response surfaces HAL links into the wallets and transactions APIs. The two most useful flows: Current balance
curl https://api.sumvin.com/v0/wallets/{wallet_id}/balances \
  -H "x-juno-jwt: <token>" \
  -H "x-juno-orgid: <your-org-id>"
Returns total assets held in the funding wallet with USD valuations. See the wallets guide for the full response shape. Card transactions
curl "https://api.sumvin.com/v0/transactions?card_id=card-3f9c…" \
  -H "x-juno-jwt: <token>" \
  -H "x-juno-orgid: <your-org-id>"
Returns transactions associated with the card. Pair with ?wallet_id={wallet_id} to filter by the funding wallet directly.

Errors

Funding endpoints reuse the card error codes. See Card management API → Errors for the full list. The two you’ll see at this surface:
CodeStatusMeaning
CRD-404-001404Card not found
CRD-403-001403Card belongs to a different user