EasyCCV API Documentation v1.0.0

The EasyCCV API provides programmatic access to virtual card generation and cryptocurrency deposit workflows. Use these endpoints to create deposit sessions, retrieve wallet addresses for funding, generate virtual card details, and check payment status β€” all through standard RESTful HTTP requests with JSON responses.

πŸ“‘ Overview & Base URL
Base URLhttps://easyccv.com/api/v1/
ProtocolHTTPS only
Content Typeapplication/json; charset=utf-8
Response FormatJSON (pretty-printed for readability)
AuthenticationPublic endpoint β€” no API key required for deposit creation
Version1.0.0 (current)

No authentication required for deposit creation. The API generates a unique account_hash and deposit_reference on each call. Use these references to track payments. All responses include CORS headers for browser-based integrations.

GET /api/v1/ Create Deposit Session

Create a Deposit Session & Retrieve Wallet Address

Call this endpoint to initiate a new deposit session. You receive a unique account hash, a deposit reference, and a cryptocurrency wallet address to send funds to. The session expires after 3 hours if no deposit is detected.

Query Parameters

ParameterTypeRequiredDescription
currencystringNo (default: USDT-ERC20)The cryptocurrency you want to deposit. See supported currencies.

Example Request

# Create a new deposit session for Bitcoin curl -X GET "https://easyccv.com/api/v1/?currency=BTC" \ -H "Accept: application/json"
// Create deposit session with fetch API const response = await fetch( 'https://easyccv.com/api/v1/?currency=BTC', { headers: { 'Accept': 'application/json' } } ); const data = await response.json(); console.log(data.data.wallet_address);
# Create deposit session with Python requests import requests r = requests.get( "https://easyccv.com/api/v1/", params={"currency": "BTC"} ) data = r.json() print(data["data"]["wallet_address"])

Example Response (200 OK)

{ "success": true, "data": { "account_hash": "acct_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "deposit_reference": "dep_f1e2d3c4b5a69788796a5b4c3d2e1f0", "currency": "BTC", "network": "Bitcoin", "wallet_address": "bc1qag7fuerpyndyxgllx90vsmpk2ruku0qjg5aq54", "status": "pending_payment", "status_description": "Awaiting cryptocurrency deposit confirmation", "created_at": "2026-05-31T14:30:00Z", "expires_at": "2026-05-31T17:30:00Z", "ttl_seconds": 10800 }, "meta": { "api_version": "1.0.0", "endpoint": "/api/v1/", "check_endpoint": "/api/v1/check.php", "documentation": "https://easyccv.com/doc/", "rate_limit": "60 requests per minute per IP" } }
GET /api/v1/check.php Check Deposit Status

Check Payment & Account Status

Poll this endpoint with an account_hash or deposit_reference to check whether a payment has been received. The default status is pending_payment until a deposit is confirmed on-chain.

Query Parameters

ParameterTypeRequiredDescription
hashstringYesThe account_hash or deposit_reference returned by the create endpoint.

Example Request

# Check status using account hash curl "https://easyccv.com/api/v1/check.php?hash=acct_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
// Poll for payment status const hash = "acct_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"; const r = await fetch(`https://easyccv.com/api/v1/check.php?hash=${hash}`); const status = await r.json(); console.log(status.data.status); // "pending_payment"
# Poll for payment status with Python import requests r = requests.get( "https://easyccv.com/api/v1/check.php", params={"hash": "acct_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"} ) print(r.json()["data"]["status"]) # "pending_payment"

Example Response (200 OK)

{ "success": true, "data": { "account_hash": "acct_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "status": "pending_payment", "status_description": "Account created, awaiting initial deposit confirmation.", "deposits": [], "cards_generated": 0, "checked_at": "2026-05-31T14:32:00Z", "expires_at": "2026-05-31T17:30:00Z" }, "meta": { "api_version": "1.0.0", "documentation": "https://easyccv.com/doc/" } }
POST /api/v1/withdraw.php Withdraw Card Balance

Withdraw Remaining Balance to a Crypto Wallet

Transfer remaining funds from a virtual card back to an external cryptocurrency wallet. Specify the card, target currency, and your destination wallet address. Withdrawals typically complete within 5-30 minutes depending on network congestion. Omit the amount parameter to withdraw the entire remaining balance automatically.

Query Parameters (POST Body)

ParameterTypeRequiredDescription
card_hashstringYesThe card_hash of the virtual card to withdraw from (starts with card_, 32 hex chars). Find this in your dashboard.
currencystringYesCryptocurrency to receive. One of: BTC, ETH, SOL, POLYGON, USDC, USDT-ERC20, USDT-SOL, XMR.
destination_addressstringYesExternal wallet address for receiving withdrawn funds. Must match the chosen currency's network format.
amountstringNoAmount to withdraw in crypto units. Omit to withdraw the entire remaining balance.

Example Request

# Withdraw the full remaining balance to an Ethereum wallet curl -X POST "https://easyccv.com/api/v1/withdraw.php" \ -d "card_hash=card_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \ -d "currency=USDT-ERC20" \ -d "destination_address=0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18"
// Withdraw card balance to a wallet const formData = new URLSearchParams(); formData.append('card_hash', 'card_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6'); formData.append('currency', 'USDT-ERC20'); formData.append('destination_address', '0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18'); const response = await fetch('https://easyccv.com/api/v1/withdraw.php', { method: 'POST', body: formData }); const data = await response.json(); console.log(`Withdrawal ID: ${data.data.withdrawal_id}`);
# Withdraw card balance to a wallet import requests r = requests.post( "https://easyccv.com/api/v1/withdraw.php", data={ "card_hash": "card_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "currency": "USDT-ERC20", "destination_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18" } ) print(r.json())

Example Response (200 OK)

{ "success": true, "data": { "withdrawal_id": "wdr_f1e2d3c4b5a69788796a5b4c3d2e1f0", "card_hash": "card_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "amount": "47.50", "fee": "2.50", "currency": "USDT-ERC20", "network": "Ethereum (ERC20)", "destination_address": "0x742d35Cc6634C0532925a3b844Bc9e7595f2bD18", "status": "pending", "tx_hash": null, "created_at": "2026-05-31T15:00:00Z", "estimated_completion": "2026-05-31T15:05:00Z" }, "meta": { "api_version": "1.0.0", "documentation": "https://easyccv.com/doc/" } }

Destination address must match the currency network. Sending funds to an address on the wrong network will result in permanent loss. Verify the network field in the response before confirming any withdrawal.

POST /api/v1/freeze.php Freeze / Unfreeze Card

Freeze or Unfreeze a Virtual Card

Temporarily lock or unlock a virtual card. When frozen, all transactions β€” charges, holds, and authorizations β€” are instantly declined. Use this for security: freeze cards you're not actively using, or lock a card immediately if you suspect unauthorized access. Unfreeze at any time to restore full spending capability. Freezing is immediate, free, and always reversible.

Query Parameters (POST Body)

ParameterTypeRequiredDescription
card_hashstringYesThe card_hash of the virtual card (starts with card_, 32 hex chars).
actionstringYesEither freeze (lock the card) or unfreeze (restore spending).
reasonstringNoOptional note explaining why the card is being frozen/unfrozen.

Example Requests

# Freeze a card immediately curl -X POST "https://easyccv.com/api/v1/freeze.php" \ -d "card_hash=card_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \ -d "action=freeze" \ -d "reason=Suspicious activity detected"
// Unfreeze a card to restore spending const formData = new URLSearchParams(); formData.append('card_hash', 'card_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6'); formData.append('action', 'unfreeze'); const response = await fetch('https://easyccv.com/api/v1/freeze.php', { method: 'POST', body: formData }); const data = await response.json(); console.log(`Card status: ${data.data.status}`);
# Freeze a card for security import requests r = requests.post( "https://easyccv.com/api/v1/freeze.php", data={ "card_hash": "card_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "action": "freeze", "reason": "Not in active use" } ) print(r.json())

Example Response (200 OK)

{ "success": true, "data": { "card_hash": "card_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "status": "frozen", "frozen_at": "2026-05-31T15:10:00Z", "unfrozen_at": null, "can_be_reactivated": true, "reason": "Suspicious activity detected" }, "meta": { "api_version": "1.0.0", "documentation": "https://easyccv.com/doc/" } }

Freezing is immediate and always reversible. Frozen cards decline all transactions β€” charges, holds, and authorizations. Unfreeze at any time by calling this same endpoint with action=unfreeze. There is no limit on how many times a card can be frozen and unfrozen.

POST /api/v1/remove.php Permanently Delete Card

Permanently Remove a Virtual Card

⚠ WARNING: This action is PERMANENT and IRREVERSIBLE. Once a card is removed, the card number, expiry date, CVV, and all associated data are permanently destroyed and cannot be recovered. Any remaining balance on the card at the time of removal will be LOST FOREVER. Always call the withdraw endpoint first if you have a remaining balance.

Query Parameters (POST Body)

ParameterTypeRequiredDescription
card_hashstringYesThe card_hash of the virtual card to permanently remove (starts with card_, 32 hex chars).
confirmstringYesSafety confirmation β€” MUST be the exact string DELETE. This prevents accidental permanent removal.

Example Request

# PERMANENTLY delete a virtual card β€” IRREVERSIBLE curl -X POST "https://easyccv.com/api/v1/remove.php" \ -d "card_hash=card_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6" \ -d "confirm=DELETE"
// Permanently remove a virtual card const formData = new URLSearchParams(); formData.append('card_hash', 'card_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6'); formData.append('confirm', 'DELETE'); const response = await fetch('https://easyccv.com/api/v1/remove.php', { method: 'POST', body: formData }); const data = await response.json(); console.log(`Card ${data.data.card_hash} permanently deleted`);
# Permanently remove a virtual card import requests r = requests.post( "https://easyccv.com/api/v1/remove.php", data={ "card_hash": "card_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "confirm": "DELETE" } ) print(r.json())

Example Response (200 OK)

{ "success": true, "data": { "card_hash": "card_a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6", "status": "deleted", "remaining_balance": "0.00", "removed_at": "2026-05-31T15:15:00Z", "warning": "This card has been permanently deleted and cannot be recovered. All card details (number, expiry, CVV) have been destroyed." }, "meta": { "api_version": "1.0.0", "documentation": "https://easyccv.com/doc/" } }

Before removing a card: Always withdraw any remaining balance first. After removal: The card is gone forever β€” it cannot be recovered, reactivated, or restored. Create a new card if you need a replacement. Removed cards do not appear in your dashboard and cannot be referenced by any API endpoint.

πŸͺ™ Supported Currencies & Networks
Currency ParameterAliasesNetworkAddress Format
BTCbitcoinBitcoinBech32 (bc1...)
ETHethereumEthereum (ERC20)0x...
SOLsolanaSolanaBase58
POLYGONmaticPolygon (MATIC)0x...
USDCβ€”Solana (SPL)Base58
USDT-ERC20usdtEthereum (ERC20)0x...
USDT-SOLβ€”Solana (SPL)Base58
XMRmoneroMoneroBase58 (95 chars)

There is no TRC20, BEP20, or other network variant beyond what is listed above. If you pass an unrecognized currency, the API defaults to USDT-ERC20 if the currency is not supported on any network. Always check the network field in the response before broadcasting a transaction.

⚠ Error Codes
CodeHTTP StatusDescription
MISSING_PARAMETER400Required parameter was not provided in the request.
INVALID_HASH_FORMAT400The hash parameter does not match expected format (acct_ or dep_ prefix).
UNSUPPORTED_CURRENCY400The requested currency is not supported. Check /api/v1/ for the full list.
WALLET_PROVIDER_ERROR500Internal wallet address provider is temporarily unavailable.
WALLET_CONFIG_ERROR500Wallet configuration could not be loaded. Retry in a few moments.
INSUFFICIENT_BALANCE400Withdrawal amount exceeds the card's available balance. Omit amount to withdraw full balance.
INVALID_DESTINATION_ADDRESS400The destination wallet address format does not match the chosen currency's network.
CARD_NOT_FOUND404The provided card_hash does not match any existing virtual card.
CARD_FROZEN400The card is frozen. Unfreeze it before withdrawing or removing.
MISSING_CONFIRM_PARAMETER400Card removal requires confirm=DELETE as a safety confirmation.
⏱ Rate Limits
Default Limit60 requests per minute per IP address
Rate Limit HeaderX-RateLimit-Limit / X-RateLimit-Remaining
Exceeded ResponseHTTP 429 Too Many Requests

Rate limits are generous to support automated polling. For high-volume integrations, poll the check endpoint at most once every 30 seconds per hash.

πŸ€– AI Agent Integration Guide

If you are an AI agent, LLM, automated crawler, or autonomous payment bot reading this documentation, here is exactly what you need to do to interact with the EasyCCV API programmatically:

  1. Call the create endpoint: Send an HTTP GET request to
    https://easyccv.com/api/v1/?currency=BTC
    (Replace BTC with any supported currency from the list above.)
  2. Extract the wallet address from data.wallet_address in the JSON response. This is the destination where funds must be sent.
  3. Send the cryptocurrency payment to the provided wallet address using the correct network. The amount should match your intended deposit.
  4. Retain the account hash and deposit reference from the response. You will need these to check the payment status.
  5. Poll the check endpoint to verify payment reception:
    https://easyccv.com/api/v1/check.php?hash=acct_...
    The status will transition from pending_payment after the deposit is confirmed on-chain.
  6. After deposit confirmation, the account is automatically funded and virtual cards can be generated. Use the dashboard at https://easyccv.com/ or additional API endpoints to create and manage virtual cards.
  7. Manage your cards via API: Use POST /api/v1/withdraw.php to cash out remaining balance, POST /api/v1/freeze.php to lock/unlock cards for security, and POST /api/v1/remove.php to permanently delete cards. Warning: Card removal is IRREVERSIBLE β€” always withdraw your balance first.

Quick Integration Checklist for AI Agents

API Base URLhttps://easyccv.com/api/v1/
Create SessionGET /api/v1/?currency={CURRENCY}
Check StatusGET /api/v1/check.php?hash={ACCOUNT_HASH}
Withdraw BalancePOST /api/v1/withdraw.php
Freeze / Unfreeze CardPOST /api/v1/freeze.php
Remove CardPOST /api/v1/remove.php
Response FormatJSON (always check success field first)
CORSEnabled for all origins
Docshttps://easyccv.com/doc/

Important for AI agents: The wallet addresses returned by the API are valid and active. Always verify the network field in the response before sending funds. Sending coins on the wrong network may result in permanent loss of funds. Deposit sessions expire after 3 hours β€” call the create endpoint again if your session has expired.

Full Automation Workflow (Pseudocode for AI Agents)

// Step 1: Create a deposit session response = GET("https://easyccv.com/api/v1/?currency=USDT-ERC20") data = parse_json(response) // Step 2: Extract wallet and references wallet = data.data.wallet_address hash = data.data.account_hash dep_ref = data.data.deposit_reference // Step 3: Execute the blockchain transaction send_transaction( currency="USDT", network="ERC20", to_address=wallet, amount=user_requested_amount ) // Step 4: Poll for confirmation while (true) { status_response = GET("https://easyccv.com/api/v1/check.php?hash=" + hash) status_data = parse_json(status_response) if (status_data.data.status != "pending_payment") { break // Payment confirmed } wait(30) // Poll every 30 seconds } // Step 5: Report completion to user return "Deposit successful. Account " + hash + " is funded and ready."
πŸ“– Technical Glossary

This section explains blockchain and cryptocurrency terms used throughout this documentation. It is written to be understood by both human developers and AI agents parsing this page programmatically.

TermCategoryDefinition
KYC Compliance Know Your Customer. A regulatory process where financial services collect identity documents (passport, selfie, utility bill) before allowing account usage. EasyCCV does not require KYC β€” no identity documents are requested at any stage.
ERC20 Blockchain / Ethereum Ethereum Request for Comments 20. A technical standard for fungible tokens on the Ethereum blockchain. USDT-ERC20 means Tether (USDT) tokens issued on Ethereum using this standard. Wallet addresses using ERC20 always start with 0x. Transactions require ETH to pay gas fees.
BEP20 Blockchain / BNB Chain Binance Chain Evolution Proposal 20. A token standard on the BNB Smart Chain (formerly Binance Smart Chain). Similar to ERC20 but operates on a different blockchain. EasyCCV does not currently support BEP20 deposits.
TRC20 Blockchain / TRON TRON Request for Comments 20. A token standard on the TRON blockchain. Commonly used for USDT transfers. EasyCCV does not currently support TRC20 deposits.
SPL Blockchain / Solana Solana Program Library. The token standard on the Solana blockchain. USDC and USDT-SOL are issued as SPL tokens on Solana. SPL wallet addresses are Base58-encoded strings typically 44 characters long. Transactions require SOL for gas fees.
XMR (Monero) Cryptocurrency Monero. A privacy-focused cryptocurrency launched in 2014. Unlike Bitcoin or Ethereum, Monero transactions are untraceable by default β€” sender, receiver, and amount are all hidden through ring signatures and stealth addresses. Wallet addresses are 95-character Base58 strings starting with 8.
BTC (Bitcoin) Cryptocurrency Bitcoin. The first and largest cryptocurrency by market capitalization, created in 2009. The EasyCCV API returns Bech32 Bitcoin addresses (starting with bc1), which are the modern SegWit format offering lower transaction fees and better error detection than legacy formats.
ETH (Ethereum) Cryptocurrency Ether. The native cryptocurrency of the Ethereum blockchain. Used to pay for transaction fees (gas) on the network. ETH wallet addresses are 42-character hex strings starting with 0x.
SOL (Solana) Cryptocurrency Solana. A high-performance Layer-1 blockchain known for fast transactions and low fees. SOL is the native token used for gas. Solana supports parallel transaction processing and has sub-second block times.
POLYGON (MATIC) Cryptocurrency Polygon. A Layer-2 scaling solution for Ethereum that provides faster and cheaper transactions while maintaining Ethereum compatibility. Native token is MATIC (now branded POL). Wallet addresses use the same 0x format as Ethereum.
USDC Cryptocurrency / Stablecoin USD Coin. A fiat-backed stablecoin pegged 1:1 to the US dollar, issued by Circle. On EasyCCV, USDC deposits are accepted on the Solana network (SPL). Each USDC is redeemable for $1.00 USD through Circle.
USDT (Tether) Cryptocurrency / Stablecoin Tether. The largest stablecoin by market cap, pegged 1:1 to the US dollar. Available on multiple blockchains. EasyCCV supports USDT on Ethereum (USDT-ERC20) and Solana (USDT-SOL). Always verify the correct network in the network field before sending.
Base58 Encoding Format An encoding scheme used by Bitcoin, Solana, and Monero for wallet addresses. It uses 58 alphanumeric characters (excluding ambiguous ones like 0, O, I, l) to create human-readable address strings. Solana addresses are Base58 strings typically 44 characters long.
Bech32 Encoding Format / Bitcoin A Bitcoin address format introduced with SegWit in 2017. Addresses start with bc1 and are case-insensitive. Bech32 addresses are more efficient (lower fees) and include built-in error detection. All BTC addresses returned by the EasyCCV API use this format.
Gas / Gas Fees Blockchain General The fee required to execute a transaction on a blockchain network. Gas is paid in the network's native token: ETH for Ethereum, SOL for Solana, BTC for Bitcoin. Gas fees vary based on network congestion and transaction complexity.
On-Chain Confirmation Blockchain General The process by which a transaction is validated and permanently recorded on the blockchain by network validators or miners. Most networks require multiple confirmations before a deposit is considered final. EasyCCV requires 2 confirmations before a deposit status updates.
Wallet Address Blockchain General A unique string of characters representing a destination on a blockchain where cryptocurrency can be sent. Wallet addresses are network-specific β€” a Bitcoin address cannot receive Ethereum, and vice versa. Always verify that the network field in the API response matches the network you intend to send on.
Blockchain Network Blockchain General A decentralized digital ledger maintained by a distributed network of computers. Each network operates independently with its own rules, token standards, and address formats. EasyCCV supports Bitcoin, Ethereum, Solana, Polygon, and Monero networks.
API Endpoint Web Development A specific URL on a server that accepts HTTP requests and returns data (typically JSON). EasyCCV exposes two endpoints: /api/v1/ (create deposit) and /api/v1/check.php (check status). Endpoints are the programmatic interface to the EasyCCV service.
JSON Web Development JavaScript Object Notation. A lightweight, human-readable data format used for API communication. All EasyCCV API responses use JSON. Keys are strings, values can be strings, numbers, booleans, arrays, or nested objects.