Skip to main content
This guide covers the full lifecycle of a virtual card: from issuance and funding, through per-card configuration and spending controls, to fraud protection and transaction visibility. All operations are available both via the API (API key auth) and the CryptoMate Portal.

Overview

Cards is a virtual prepaid card product powered by cryptocurrency collateral. Designed for businesses, it uses stablecoins on Polygon as the backing asset: each card is linked to a stablecoin wallet, and funds are automatically converted to dollars at a 1:1 ratio, making integration with conventional payment networks seamless.

Card specifications

  • Brand: Visa
  • Acceptance: Google Wallet and e-commerce platforms
  • Security: Protected by 3DS to mitigate fraud

Operational models

Top Up

Users load funds directly onto the card through a dedicated deposit wallet created exclusively for this purpose.

External authorization

Your systems integrate via webhooks: for each transaction you have 1,200 ms to authorize or reject it based on your own approval logic.

How it works

Each virtual card is a prepaid Visa card backed by stablecoin collateral. At the account level, a single holding wallet on the Polygon network holds all funds. When a purchase is made, the holding wallet balance is verified and the appropriate amount is debited.
Cards are issued against a card pack. Each company has a maximum number of active cards based on their contracted product. You can check available capacity via Get contracted product.

Creating a card

Use Create virtual card to issue a new card. The two required decisions at creation time are:

Approval method

The approval_method cannot be changed after card creation. If the wrong method is set, delete the card and reissue.

Spending limits

Set daily_limit, weekly_limit, and monthly_limit (in USD) at creation. These are enforced per card independently. You can update them at any time — see Spending limits below. Omitting a limit means no limit is applied for that time window.

Funding the account

All cards draw from a shared holding wallet. Before cards can transact you must fund this wallet with USDC on Polygon. Retrieve the holding wallet deposit address via Get holding balance. The minimum deposit is 10 USD.
A minimum balance is always locked in the holding wallet to preserve capacity for at least one transaction. Withdrawals that would breach this floor are rejected.
To return funds to your treasury, use Withdraw from holding. For cards using TOPUP approval, each card also has a personal deposit wallet. Fetch those addresses with Get card top-up wallets. Deposits sent to these wallets are attributed to that specific card and used to settle its purchases.

Fees wallet

The commissions charged on card activity — the fees applied to deposits and transactions — accumulate in a dedicated fees wallet on Polygon, separate from the holding wallet that funds card spending.
You can both view the balances and make withdrawals from the CryptoMate Portal (Cards → Summary → Accumulated fees), as well as through the API described below.

Pending vs. available balance

The fees wallet tracks two balances, visible in the Portal (Cards → Summary → Accumulated fees):

Withdrawing fees

Use Withdraw fees to send accumulated fees to one of your wallets. Withdrawals draw only from the available on-chain balance and are made per token (token_symbol). The destination must be a whitelisted address enabled for at least 24 hours:
A newly whitelisted address cannot receive a fees withdrawal until 24 hours after it was added. This delay is a security measure against unauthorized address changes.
Fees withdrawals are also available from the Portal (Cards → Summary → Accumulated fees → Withdraw fees). Each withdrawal is recorded in the transaction history as a CLIENT_FEES_WITHDRAW movement.

Managing cards

Spending limits

Update per-card daily, weekly, and monthly limits independently with Update card limits. Changes take effect immediately on the next authorization.

Freeze and unfreeze

Use Freeze or unfreeze card to temporarily block a card. A frozen card declines all purchase attempts until unfrozen. The card state moves between ACTIVE and FROZEN without losing its configuration. Useful for: temporary employee suspension, suspicious activity hold, cardholder request.

Unblocking after a velocity block

If a velocity rule triggers, the card is automatically moved to BLOCKED. Manually unblock it with Unblock card. Unblocking also resets the authorization counter so the card can transact immediately.

Reissuing a card

Reissue card generates a new card number and CVV while keeping the same cardholder configuration, limits, and approval method. Use this when a card number is compromised. The old card is deactivated.

Updating contact information

Rotating the deposit wallet

If a TOPUP card’s deposit wallet address needs to be rotated (e.g. for compliance or security), use Rotate deposit wallet. A new address is generated and associated with the card. The old address stops accepting deposits.

Deleting a card

Delete card permanently deactivates the card. Any remaining balance in the card’s individual wallet is returned to the holding wallet. This action is irreversible.

3DS authentication

3DS adds cardholder verification to e-commerce purchases. Two modes are available per card: Configure the mode with Set 3DS configuration. When a 3DS challenge fires, a notification_3ds_authorization webhook is delivered to your endpoint. For webhook mode, use Respond to 3DS authorization to submit the OTP entered by the cardholder.

Fraud protection

Velocity rules

Velocity rules define rate limits at the account level, applied per individual card. They protect against card probing and rapid fraudulent use. Each rule specifies:
  • max_authorizations — the maximum number of approved authorizations allowed
  • time_window_seconds — the sliding window over which the count is measured
You can configure up to 5 rules. When any rule is breached, the transaction is declined and the card is automatically blocked. Unblocking the card also resets its authorization counter, ensuring the card can resume normal operation immediately. Manage rules with: Example ruleset — no more than 3 purchases per minute, or 20 per hour:
When a velocity block fires, a card_blocked_by_velocity webhook is sent to your endpoint so your systems can react in real time (alert the cardholder, open a fraud investigation, etc.).

Risk score engine

The risk score engine evaluates every purchase in real time. It assigns a numeric score by combining up to six signals, each weighted independently. If the score reaches or exceeds a configurable threshold, the transaction is declined.

How the score is calculated

Each signal is binary (0 or 1). The final score is the weighted sum:
A transaction is rejected when score ≥ threshold.

Signals

Signals that require a minimum history return 0 (no contribution) until the card has enough approved transactions. A brand-new card is only evaluated by geo_distance, decline_rate, and merchant_country.

Configuration

The engine is configured at the account level from the Portal (Cards → Configuration → Risk Score). Each weight can be set to 0 to disable that signal entirely. Setting all weights to 0 disables the engine for the whole account.

Examples

Conservative setup — only block clear anomalies, high threshold:
In this configuration a transaction is rejected only if, for example, both impossible travel (0.5) and high decline rate (0.4) fire simultaneously (score = 0.9 ≥ 0.8). A single signal is not enough to reach the threshold. Strict setup — any single anomaly blocks the transaction:
Here, impossible travel alone (1.0) exceeds the threshold. Even an unusual hour (0.3) is enough to reject. Disabled engine — all weights set to 0, no transaction is ever rejected by risk score:

Fail-safe behavior

The engine is designed to fail open: if the transaction history cannot be fetched, or if the configuration cannot be loaded, the risk score check is skipped and the transaction proceeds normally. This ensures that a Redis or database hiccup never causes unexpected declines.

Risk score fuse

The risk score engine evaluates each purchase and may decline transactions that appear high-risk. When a trusted cardholder is incorrectly blocked (false positive), you can arm a one-shot fuse that bypasses risk evaluation for the next single purchase on that card. After that purchase fires, the fuse is automatically consumed and normal validation resumes.
The fuse bypasses only the risk score check. All other controls (spending limits, velocity rules, frozen status, holding balance) still apply.

Blocked merchant categories

Block purchases based on the type of business the merchant runs — its merchant category. You keep a blocklist of categories, and any purchase from a merchant in one of those categories is automatically declined. Use it to keep company spending away from business types you never want your cards used for — for example, gambling and casinos, or cash advances and ATM withdrawals.
This control applies to company cards only. It is set once at the account level and enforced across every card your company issues. It does not apply to individual cards.
Manage the blocklist from the Portal (Cards → Configuration), the same place where you manage country blocking. You choose categories by name from a standard catalog — there are no codes to type in. On top of your own list, CryptoMate maintains a platform-wide list of blocked categories that always applies to every company. These platform categories are shown in the Portal for reference and cannot be removed — your list is added on top of them, never replacing them. How the block behaves:
  • If a purchase comes from a merchant whose category is on your blocklist — or on the platform-wide list — it is declined.
  • A category blocked by the platform stays blocked even when it is not on your own list.

Blocked merchant countries

Block purchases based on the country where the merchant is located. You keep a blocklist of countries, and any purchase from a merchant in one of those countries is automatically declined. Use it as a geographic fraud and security control — for example, to keep spending inside the regions where your business actually operates and shut out purchases from countries you never expect to transact in.
This control applies to company cards only. It is set once at the account level and enforced across every card your company issues. It does not apply to individual cards.
Manage the blocklist from the Portal (Cards → Configuration), the same place where you manage merchant category (MCC) blocking. Add or remove countries at any time; changes take effect on the next purchase. Countries are identified by their standard two-letter country codes (for example, US or AR). How the block behaves:
  • If a purchase comes from a merchant whose country is on your blocklist, it is declined — the reason reported is “merchant country blocked”.
  • If a purchase does not carry a merchant country, it cannot be evaluated against the list and is not blocked by this control.
Blocked countries and blocked merchant categories (MCC) are independent, additive controls. A purchase is declined if it matches either list — neither one overrides the other.

Transactions

Searching transactions

Search transactions returns the transaction history for your account with filtering by card, date range, status, and more. Get transaction returns the full detail of a single transaction by ID.

Accumulated spending

Get accumulated spending returns the total amount spent within a given period, useful for dashboards and limit management.

PDF statements

Export transactions PDF generates a downloadable statement for a date range.

Webhooks

Cards is the most event-heavy product. Register your webhook URL and webhook_key from the Portal (Settings → Webhooks) or via Subscribe webhook URL and Subscribe webhook key. All card events arrive with "product": "cards" in the envelope. See Webhooks for the full envelope format, authentication via X-Webhook-Key, and payload examples.

Quick reference

Cards API reference

Explore endpoints for virtual cards, transactions, holding, and account configuration.