Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.yativo.com/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The Yativo Card Issuer Program lets businesses issue virtual and physical payment cards to their own customers under their platform. As an issuer you manage the full card lifecycle — from customer onboarding to card creation, balance funding, and transaction monitoring — through a single API. Typical use cases:
  • Fintech apps offering spending cards to users
  • Corporate expense management platforms
  • Digital banking services for underserved markets
  • Wallets that want to add a card spending layer
Access to the Card Issuer Program is by invitation only. Contact your Yativo account manager or support@yativo.com to request access. The program section will not appear in your dashboard until your account manager enables it for your account.

How It Works

1

Your account manager grants eligibility

Yativo’s team reviews your use case and enables the Card Issuer Program on your account. Nothing is visible in your dashboard until this step is complete.
2

You submit an application

Once eligible, the Card Issuer section appears in your dashboard. Choose your funding structure (master_wallet or non_master) and an optional IBAN add-on, then submit.
3

Yativo approves your program

Our compliance team reviews and approves the application, typically within 2–5 business days. On approval, your settlement wallets are auto-provisioned.
4

Fund your master wallet and issue cards

Deposit USDC to your SOL address to top up your USD balance, swap to EUR or GBP as needed, onboard customers, issue cards, and fund them by customer email, ID, or your own external reference.

Funding Structures

Choose your funding structure at application time. It cannot be changed after approval.
StructureSource ChainBest For
master_walletSolana (SOL) or XDCYou hold the source funds and push them to customer cards on demand
non_masterPer-customerEach customer deposits to their own collateral wallet — you do not hold a shared balance

Apply for the Program

Once your account manager has granted eligibility, submit your application.
curl -X POST 'https://crypto-api.yativo.com/api/v1/card-issuer/apply' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "funding_structure": "master_wallet",
    "iban_enabled": false
  }'
FieldRequiredDescription
funding_structureYesmaster_wallet or non_master
iban_enabledNoSet to true to enable EUR IBAN issuance. Requires additional regulatory review. Default: false
Response
{
  "success": true,
  "message": "Application submitted. An admin will review your request.",
  "data": {
    "id": "6634abc...",
    "status": "pending",
    "funding_structure": "master_wallet",
    "iban_enabled": false
  }
}

Check Program Status

curl 'https://crypto-api.yativo.com/api/v1/card-issuer/status' \
  -H 'Authorization: Bearer YOUR_TOKEN'
Response (approved, master_wallet)
{
  "success": true,
  "data": {
    "enrolled": true,
    "status": "approved",
    "funding_structure": "master_wallet",
    "enabled_chains": ["SOL"],
    "iban_enabled": false,
    "card_reissue_enabled": false,
    "master_wallets": {
      "sol": {
        "address": "9gHp7qLmKv3xFjNw4aBcYhUeT8sGkZoP2iMnDuWr5Cx",
        "balance": 0.012
      },
      "usdc": { "balance": 5420.00 },
      "eur": { "balance": 3100.00 },
      "gbp": { "balance": 800.00 }
    },
    "stats": {
      "total_cards_issued": 47,
      "total_funded_amount": 12840.00,
      "total_bridge_fees_paid": 12.40
    },
    "limits": {
      "max_cards": 1000,
      "daily_funding_limit": 50000,
      "monthly_funding_limit": 500000
    }
  }
}

Master Wallet & Balances

Master wallet issuers (funding_structure: master_wallet) have two types of wallets:

Source wallets (SOL and/or XDC)

These are the wallets you deposit USDC into. SOL deposits are bridged automatically to your settlement wallet. XDC deposits are bridged manually on your own schedule (XDC deposits accrue yield while held).
ChainToken depositedBridgeTime
SOLUSDC_SOLAutomatic~2–5 min
XDCUSDC_XDCManual~20 min

Settlement wallets

These are auto-provisioned on approval. All three currency balances share the same underlying on-chain address.
BalanceFunded byUsed for
USDUSDC bridge from SOL/XDCFunding cards in USD regions
EURSwap from USDFunding cards in EUR regions
GBPSwap from USDFunding cards in GBP regions
All three balances are managed internally by Yativo. To move from USD balance to EUR balance, use the swap endpoint below.

Get master wallet balances

curl 'https://crypto-api.yativo.com/api/v1/card-issuer/master-wallets' \
  -H 'Authorization: Bearer YOUR_TOKEN'
Response
{
  "success": true,
  "data": {
    "wallets": {
      "sol": {
        "address": "9gHp7qLmKv3xFjNw4aBcYhUeT8sGkZoP2iMnDuWr5Cx",
        "balance": 0.012
      },
      "xdc": null,
      "usdc": { "balance": 5420.00, "last_balance_check": "2026-04-22T09:00:00Z" },
      "eur": { "balance": 3100.00, "last_balance_check": "2026-04-22T09:00:00Z" },
      "gbp": { "balance": 800.00, "last_balance_check": "2026-04-22T09:00:00Z" }
    }
  }
}
xdc is null if XDC is not enabled for your program.

Get funding deposit addresses

curl 'https://crypto-api.yativo.com/api/v1/card-issuer/funding-addresses' \
  -H 'Authorization: Bearer YOUR_TOKEN'
Returns your SOL and XDC deposit addresses to send USDC to. For non_master programs, pass ?customer_id=... to get the per-customer address.

Swap Between Currency Balances

Swap USD ↔ EUR ↔ GBP within your master wallet balances.
curl -X POST 'https://crypto-api.yativo.com/api/v1/card-issuer/master-wallets/swap' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "from_token": "USDC",
    "to_token": "EUR",
    "amount": 1000
  }'
FieldRequiredDescription
from_tokenYesUSDC, EUR, or GBP
to_tokenYesUSDC, EUR, or GBP (must differ from from_token)
amountYesAmount to sell, in the from_token currency
Response
{
  "success": true,
  "message": "Swap initiated: 1000 USD → EUR",
  "data": {
    "swap_id": "0x7abc...",
    "status": "submitted",
    "from_token": "USD",
    "to_token": "EUR",
    "amount": 1000,
    "expected_output": "923.45",
    "fee_amount": "1.20",
    "estimated_time": "1-3 minutes"
  }
}

Fund a Customer’s Card

Transfer from your master wallet to a customer’s card wallet. The destination currency is automatically detected from the customer’s card region (e.g. UK customers receive GBP, EU customers receive EUR).
curl -X POST 'https://crypto-api.yativo.com/api/v1/card-issuer/fund-customer' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "customer_id": "cust_abc123",
    "amount": 100,
    "source_chain": "SOL",
    "pricing_mode": "receive_x"
  }'
FieldRequiredDescription
customer_idOne ofCustomer’s Yativo customer ID
card_idOne ofCard’s unique ID
external_idOne ofYour own external reference
emailOne ofCustomer’s email address
amountYesAmount to send (interpretation depends on pricing_mode)
source_chainYesSOL or XDC — which master wallet to send from
pricing_modeNosend_x (default) or receive_x — see below
destination_tokenNoOverride the auto-detected destination token. Must match the customer’s card region currency or an error is returned

Pricing modes

ModeYou specifyCustomer receives
send_xThe amount you send from your master walletLess than amount (bridge fees deducted)
receive_xThe amount the customer should receiveMore than amount is sent from your master wallet (you absorb fees)
The currency mismatch check is enforced at the API level. For example, if a customer’s card is in a EUR region, you cannot fund them with a USD destination — the API returns TOKEN_MISMATCH and tells you the required currency. Swap your USD balance to EUR first, then fund.
Response
{
  "success": true,
  "data": {
    "bridge_id": "bridge_1745123456_abc123",
    "status": "pending",
    "source": { "chain": "SOL", "amount": 102.50, "wallet": "9gHp7q..." },
    "destination": { "token": "EUR" },
    "pricing_mode": "receive_x",
    "estimated_output": "100.00",
    "estimated_time": "2-5 minutes"
  }
}

Look Up a Customer

Find a customer by any of their identifiers. The underlying wallet address is never returned.
curl 'https://crypto-api.yativo.com/api/v1/card-issuer/lookup-customer?email=customer@example.com' \
  -H 'Authorization: Bearer YOUR_TOKEN'
Query parameters (one required): customer_id, card_id, external_id, or email.
Response
{
  "success": true,
  "data": {
    "customer_id": "cust_abc123",
    "external_id": "user_9821",
    "email": "customer@example.com",
    "currency": "GBP",
    "token": "GBP",
    "safe_deployed": true,
    "cards_count": 1,
    "created_at": "2026-03-15T10:00:00Z"
  }
}

List & Manage Customers

# List all customers
GET /card-issuer/customers?page=1&limit=20

# List customers filtered by KYC stage
GET /card-issuer/customers?status=kyc_approved

Deposit History (XDC)

XDC deposits are tracked individually so you can choose when to bridge each one.
# List deposits
curl 'https://crypto-api.yativo.com/api/v1/card-issuer/deposits' \
  -H 'Authorization: Bearer YOUR_TOKEN'

# Manually trigger bridge for a specific XDC deposit
curl -X POST 'https://crypto-api.yativo.com/api/v1/card-issuer/deposits/{depositId}/fund' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{ "destination_token": "USDC" }'
Deposits in awaiting_manual status can be manually triggered. SOL deposits are bridged automatically.

Funding History

curl 'https://crypto-api.yativo.com/api/v1/card-issuer/funding-history?page=1&limit=20' \
  -H 'Authorization: Bearer YOUR_TOKEN'
Returns all bridge transactions initiated from your master wallet, with status, amounts, and chain details.

Card Reissue

When card reissue is enabled for your program (admin-toggled), your customers can request a card reissue from the card management screen. This feature is off by default and is enabled per-program by Yativo’s compliance team. Check whether it’s enabled:
curl 'https://crypto-api.yativo.com/api/v1/card-issuer/status' \
  -H 'Authorization: Bearer YOUR_TOKEN'
# → data.card_reissue_enabled: true/false

Rate Limits & Program Limits

ResourceDefaultAdjustable
Max customer accounts1,000Yes — contact your account manager
Daily funding cap$50,000Yes — admin-configurable per program
Monthly funding cap$500,000Yes — admin-configurable per program
Your current limits are always visible in GET /card-issuer/status under limits.

Webhooks

Subscribe to issuer events using the Webhooks API:
EventDescription
issuer.program.approvedYour program application was approved
issuer.customer.kyc_approvedA customer’s KYC was approved
issuer.customer.card_createdA card was issued for a customer
issuer.funding.completedA card funding bridge settled successfully
issuer.funding.failedA card funding attempt failed