Développeurs/Démarrer
API marchand CardV
CardV vend aux entreprises des produits numériques prépayés : cartes cadeaux, recharges de jeux, eSIM, etc. L'API marchand permet à votre serveur de les acheter automatiquement. Vous consultez votre solde, choisissez un produit, obtenez son prix, passez commande et récupérez les codes. Les commandes sont payées avec votre portefeuille CardV prépayé. Tout le reste, comme l'ajout de fonds ou l'historique des commandes, se fait dans le Portail marchand.
#Documentation
| Document | Contenu |
|---|---|
| Authentification | En-têtes, signature des requêtes, gestion des clés |
| Catalogue et commandes | Solde, taux de change, produits, prix, commandes, codes |
| Recharge mobile | Recharges de téléphones : opérateurs, prix, commandes de recharge |
| Conventions | Montants, dates, identifiants, limite de requêtes, erreurs |
| Webhooks | Notifications de commande envoyées à votre serveur |
| Sandbox | Tests et liste de contrôle avant la mise en production |
| Sécurité | Protéger vos clés et vos codes |
#Environnements
| Live | Sandbox | |
|---|---|---|
| URL de base de l'API | https://b2b.cardv.net/api/v1 | https://sandbox.cardv.net/api/v1 |
| Portail marchand | https://b2b.cardv.net/portal/ | Même Portail, passez en Sandbox |
La Sandbox est une copie de test séparée de CardV, avec de l'argent fictif. Les clés, les soldes, les commandes et les identifiants de produits diffèrent d'un environnement à l'autre.
#Démarrage rapide
Faites une demande de compte marchand dans le Portail et confirmez votre adresse e-mail.
Attendez la validation. CardV vérifie votre entreprise. Vous recevez ensuite un Merchant ID (votre identifiant marchand), par exemple
M00000001.Ouvrez la Sandbox. Connectez-vous au Portail et choisissez Sandbox dans l'en-tête. Vous disposez de 1 000 USD d'argent de test.
Créez une clé API. Dans le Portail, allez dans Integrations → API keys. Créez une clé. Le Portail affiche le key ID et le secret de signature une seule fois. Rangez le secret dans votre coffre à secrets.
Consultez votre solde :
export CARDV_BASE=https://sandbox.cardv.net export CARDV_KEY_ID=ck_test_... # shown in the Portal export CARDV_SIGNING_SECRET=cs_test_... # from your secret store cardv_get() { # every call is signed, see Authentication local ts nonce sig ts=$(date +%s); nonce=$(openssl rand -hex 16) sig=$(printf 'GET\n%s\n%s\n%s\n%s' "$1" "$ts" "$nonce" \ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 \ | openssl dgst -sha256 -hmac "$CARDV_SIGNING_SECRET" -hex | sed 's/^.*= //') curl -sS "$CARDV_BASE$1" -H "X-Key-Id: $CARDV_KEY_ID" \ -H "X-Timestamp: $ts" -H "X-Nonce: $nonce" -H "X-Signature: $sig" } cardv_get "/api/v1/balance"Trouvez un produit :
cardv_get "/api/v1/skus?search=steam&limit=20"Choisissez-en un avec
"availability": "available"et notez sonsku_id.Obtenez le prix :
cardv_get "/api/v1/skus/S000001/quote?quantity=1"Notez
merchant_price: c'est ce que vous payez par unité.Passez la commande. Signez-la comme tout appel. Reprenez un exemple de Authentification avec ce corps de requête :
{ "external_order_id": "TEST-0001", "items": [ {"sku_id": "S000001", "quantity": 1, "expected_unit_price": "9.25"} ] }Vous recevez un HTTP 201 avec un numéro de commande CardV, par exemple
O-00001234.Récupérez les codes. Appelez
GET/api/v1/orders/O-00001234jusqu'à ce que le statut soitsucceeded. Les codes se trouvent dansitems[].deliveries[]:card_number,pin_codeetredeem_url. Vous pouvez aussi recevoir un webhook quand la commande est terminée.Passez en production une fois la liste de contrôle Sandbox validée.
Les identifiants et les prix ci-dessus sont des exemples. Utilisez les valeurs renvoyées par votre propre catalogue.
#L'API en bref
L'API compte seize endpoints. Tous les chemins commencent par /api/v1.
| Endpoint | À quoi il sert | Signé |
|---|---|---|
GET/account | Informations sur votre entreprise et état de l'accès API | Non |
GET/balance | Montant que vous pouvez dépenser | Non |
GET/fx-rates | Taux de change depuis l'USD, pour les boutiques dans une autre devise | Non |
GET/products | Liste des produits, chacun avec tous ses SKU | Non |
GET/products/{product_id} | Un produit avec ses SKU et ses textes complets | Non |
GET/skus | Produits que vous pouvez acheter, avec votre prix | Non |
GET/skus/{sku_id} | Un produit | Non |
GET/skus/{sku_id}/quote | Prix actuel pour une quantité donnée | Non |
POST/orders | Passer une commande, payée avec votre portefeuille | Oui |
GET/orders/{order_id} | Statut de la commande et codes | Non |
GET/recharge/countries | Pays que vous pouvez recharger | Non |
GET/recharge/operators | Opérateurs téléphoniques et montants d'un pays | Non |
POST/recharge/quote | Prix d'une recharge mobile | Oui |
POST/recharge/orders | Recharger un téléphone, payé avec votre portefeuille | Oui |
GET/recharge/orders | Lister vos commandes de recharge | Non |
GET/recharge/orders/{order_id} | Statut d'une commande de recharge | Non |
Tout autre endpoint renvoie HTTP 403 s'il est appelé avec une clé API :
{"detail": "This operation is only available in the Merchant Portal."}La recharge mobile est décrite dans Recharge mobile.
#Identifiants
| Élément | Exemple | Remarques |
|---|---|---|
| Merchant ID | M00000001 | Le vôtre. Il ne change jamais. |
| SKU (un produit que vous pouvez acheter) | S000456 | Sert à obtenir le prix et à commander. |
| Numéro de commande CardV | O-00001234 | Enregistrez-le avec votre commande. |
| Votre numéro de commande | SHOP-10001 | C'est vous qui le choisissez (external_order_id). |
Enregistrez les identifiants sous forme de texte, sans chercher à les décomposer. Voir Conventions.
#Ce qui se fait dans le Portail marchand
- L'ajout de fonds au portefeuille et l'alerte e-mail en cas de solde bas
- L'historique des commandes, la recherche et les exports CSV
- Les factures des commandes
- Les mouvements du portefeuille et le rapprochement comptable
- La configuration des webhooks, l'historique des envois et les renvois
- Les clés API
- La liste d'IP autorisées
- Les membres de l'équipe et leurs rôles
- Le journal d'audit
- La validation en deux étapes (2FA)
- Le passage de Live à Sandbox et inversement
#Compatibilité et support
Nous pouvons ajouter de nouveaux champs de réponse et de nouveaux statuts sans préavis. Ignorez les champs que vous ne connaissez pas. Considérez un statut de commande inconnu comme « pas encore terminée ». Ne vous fiez pas au texte des messages d'erreur.
Écrivez à [email protected] en indiquant votre Merchant ID, l'environnement, les numéros de commande, l'heure (UTC) et le code HTTP.
N'envoyez jamais de clés API, de signatures, de secrets de webhook ni de codes de cartes.
Une question sur votre intégration ? Écrivez à [email protected] en indiquant votre Merchant ID et l’identifiant de commande ou de requête.