Intégrez PrivCards dans vos applications. Émettez, alimentez, gelez et gérez des cartes virtuelles via notre API REST.
https://api.privcards.com/v1Toutes les requêtes API nécessitent un token Bearer. Générez votre clé API depuis Tableau de bord → Paramètres → Clés API.
N'exposez jamais votre clé dans le code côté client. Utilisez des variables d'environnement. Les clés préfixées sk_live_ sont en production, sk_test_ en sandbox.
Authorization: Bearer sk_live_your_api_key_here Content-Type: application/json X-Idempotency-Key: optional-unique-key-for-safe-retries
{
"error": "insufficient_funds",
"message": "Your wallet balance is too low to fund this card.",
"code": 400,
"request_id": "req_7f8a9b2c3d4e"
}Créez, gérez et contrôlez les cartes virtuelles Visa et Mastercard. Chaque carte est isolée avec son propre solde, ses limites et son cycle de vie.
| Parameter | Type | Description | |
|---|---|---|---|
| bin_id | string | required | BIN identifier (e.g. 491653). Use GET /bins to list available BINs. |
| amount | number | required | Initial funding amount in USD. Min: $1.00, Max: $5,000.00 |
| label | string | optional | Custom label for the card (max 64 chars) |
| spending_limit | number | optional | Monthly spending limit in USD. Defaults to BIN maximum. |
| allowed_categories | string[] | optional | MCC categories to whitelist (e.g. ["advertising", "software"]) |
| auto_freeze_at | number | optional | Auto-freeze when balance drops below this amount |
| metadata | object | optional | Key-value pairs for your internal tracking (max 20 keys) |
curl -X POST https://api.privcards.com/v1/cards \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"bin_id": "491653",
"amount": 500,
"label": "Meta Ads Campaign #12",
"spending_limit": 2000,
"allowed_categories": ["advertising"],
"metadata": {"campaign": "spring_2026"}
}'{
"id": "card_8xK2m9Lp4q",
"bin_id": "491653",
"network": "visa",
"last4": "2039",
"status": "active",
"balance": 500.00,
"spending_limit": 2000.00,
"label": "Meta Ads Campaign #12",
"allowed_categories": ["advertising"],
"auto_freeze_at": null,
"metadata": { "campaign": "spring_2026" },
"created_at": "2026-04-15T12:00:00Z",
"expires_at": "2029-04-15T23:59:59Z"
}| Parameter | Type | Description | |
|---|---|---|---|
| status | string | optional | active, frozen, terminated |
| bin_id | string | optional | Filter by BIN |
| page | integer | optional | Page number. Default: 1 |
| per_page | integer | optional | Items per page (1-100). Default: 25 |
apiDocs.cards.getDesc
Renvoie PAN, CVV et expiration complets. Sensible PCI — ne jamais journaliser ni stocker non chiffré. Limité à 30 req/min.
Suspend toutes les transactions. Le solde est préservé. La carte peut être dégelée ultérieurement.
Réactive les transactions sur une carte gelée. Renvoie l'objet carte avec status: "active".
Résilier une carte est permanent. Le solde restant est retourné instantanément à votre portefeuille.
Ajoutez ou retirez des fonds des cartes individuelles. Les fonds proviennent du solde de votre portefeuille.
| Parameter | Type | Description | |
|---|---|---|---|
| amount | number | required | Amount in USD to add. Min: $1.00, Max: $5,000.00 |
Renvoie les soldes mis à jour de la carte et du portefeuille.
Visualisez toutes les transactions de vos cartes. Inclut autorisations, règlements, remboursements et refus.
| Parameter | Type | Description | |
|---|---|---|---|
| card_id | string | optional | Filter by card |
| type | string | optional | authorization, settlement, refund, decline |
| from | string | optional | Start date (ISO 8601) |
| to | string | optional | End date (ISO 8601) |
| page | integer | optional | Page number. Default: 1 |
Gérez le portefeuille de votre compte. Déposez de la crypto, consultez les soldes et suivez les dépôts entrants.
{
"balance": 1312.50,
"currency": "USD",
"pending_deposits": 500.00,
"total_deposited": 15000.00,
"total_spent": 13687.50,
"cards_active": 8,
"cards_total_balance": 2450.00
}| Parameter | Type | Description | |
|---|---|---|---|
| currency | string | optional | btc, eth, sol, usdt. Omit to get all. |
Liste les plages de BIN disponibles avec leurs capacités, limites et taux d'acceptation.
{
"data": [
{
"id": "491653",
"network": "visa",
"type": "advertising",
"3ds": true,
"apple_pay": true,
"google_pay": true,
"max_transaction": 5000.00,
"max_monthly": 50000.00,
"acceptance_rate": 97.2,
"best_for": ["meta_ads", "google_ads", "tiktok_ads"]
}
]
}Récupérez les défis 3DS et codes OTP. Toutes les cartes sont automatiquement inscrites en 3DS 2.0.
{
"data": [
{
"id": "3ds_m4n5o6p7",
"card_id": "card_8xK2m9Lp4q",
"merchant": "SPOTIFY",
"amount": 9.99,
"otp": "847291",
"status": "pending",
"expires_at": "2026-04-15T15:05:00Z"
}
]
}Recevez des notifications en temps réel lors d'événements. Les payloads sont signés avec HMAC-SHA256.
card.createdUne nouvelle carte a été émisecard.frozenUne carte a été geléecard.unfrozenUne carte a été dégeléecard.terminatedUne carte a été résiliéecard.fundedFonds ajoutés à une cartetransaction.authorizedTransaction autoriséetransaction.settledTransaction régléetransaction.declinedTransaction refuséetransaction.refundedRemboursement traité3ds.challengeVérification 3DS requisedeposit.pendingDépôt crypto détectédeposit.confirmedDépôt crypto confirméimport hmac, hashlib
def verify_webhook(payload, signature, secret):
expected = hmac.new(
secret.encode(),
payload.encode(),
hashlib.sha256
).hexdigest()
return hmac.compare_digest(expected, signature)| Parameter | Type | Description | |
|---|---|---|---|
| url | string | required | HTTPS endpoint URL to receive events |
| events | string[] | required | Event types to subscribe. Use ["*"] for all. |
| secret | string | optional | Custom signing secret. Auto-generated if omitted. |
Bibliothèques officielles client pour votre stack. Tous les SDKs supportent les environnements live et sandbox.
pip install privcards
npm i privcards
go get privcards
from privcards import Client
client = Client("sk_live_your_api_key")
# Create a card
card = client.cards.create(
bin_id="491653",
amount=500,
label="Ad Spend"
)
print(card.id, card.last4)
# Get full card details (PAN, CVV)
details = client.cards.details(card.id)
print(details.pan, details.cvv)
# Fund the card
client.cards.fund(card.id, amount=200)
# List transactions
txns = client.transactions.list(card_id=card.id)
for t in txns.data:
print(t.merchant.name, t.amount)const { privcards } = require('privcards');
const client = new privcards('sk_live_your_api_key');
// Create a card
const card = await client.cards.create({
binId: '491653',
amount: 500,
label: 'Ad Spend',
});
// Get 3DS OTPs
const challenges = await client.threeds.list({
cardId: card.id,
status: 'pending',
});
// Set up webhooks
await client.webhooks.create({
url: 'https://yourapp.com/hooks',
events: ['transaction.authorized', '3ds.challenge'],
});