Aller au contenu principal

POST - Créer une facture

Créer une facture de paiement crypto. Le marchand envoie le montant (USD), les informations de commande et l'URL de callback ; le système retourne trans_id et url_payment pour rediriger le client vers la page de paiement.

Endpoint

POST https://api.payerscan.com/payment/crypto

En-têtes

En-têteRequisDescription
Content-TypeOuiapplication/json
x-api-keyOuiClé API de la boutique

Corps de la requête (JSON)

ChampTypeRequisContraintesDescription
merchant_idstringOuiNon videCode marchand de la boutique (doit correspondre à la clé API).
amountnumber | stringOui> 0 et ≤ 1 000 000Montant du paiement (USD). Exemple : 100, "100".
callback_urlstringRecommandéMax 500 caractères, URL valideURL pour recevoir le webhook à l'état completed ou expired.
completed_urlstringNonMax 500 caractères, URL valideURL de redirection après paiement réussi.
expired_urlstringNonMax 500 caractères, URL valideURL de redirection quand la facture expire.
namestringNonMax 255 caractèresNom/titre de la facture.
descriptionstringNonMax 1000 caractèresDescription de la facture.
request_idstringNonMax 255 caractèresID de commande du marchand pour référence croisée (retourné dans la réponse et le webhook). Aussi utilisé pour l'idempotence — voir notes ci-dessous.

Exemple de requête

{
"merchant_id": "MID-XXXXXXXXXX",
"amount": 100,
"name": "Top-up balance",
"description": "Top-up the balance for username: [USERNAME]",
"callback_url": "https://your-server.com/webhook/payment",
"completed_url": "https://your-website.com/thank-you",
"expired_url": "https://your-website.com/",
"request_id": "ORDER_123456"
}

Réponse

Succès (HTTP 200)

{
"status": "success",
"data": {
"request_id": "ORDER_123456",
"trans_id": "TID-ABC123DEF4567890",
"status": "waiting",
"amount": "100",
"url_payment": "https://app.payerscan.com/bill/TID-ABC123DEF4567890",
"expires_in_minutes": 15
}
}
ChampDescription
request_idLa valeur que vous avez envoyée dans la requête.
trans_idCode unique de la facture, utilisé pour la consultation et la référence croisée webhook.
statusToujours "waiting" à la création.
amountMontant USD (chaîne).
url_paymentURL de la page de paiement — redirigez le client ici.
expires_in_minutesDélai d'expiration de la facture (minutes).

Erreurs (4xx / 5xx)

Toutes les erreurs suivent ce format :

{
"status": "error",
"message": "Description de l'erreur",
"error_code": "ERROR_CODE",
"request_id": "ORDER_123456",
"details": { }
}
HTTPerror_codeDescription
400VALIDATION_ERRORCorps invalide (champs requis manquants, mauvais type, contraintes dépassées). details.errors contient les détails.
400INVALID_MERCHANT_IDmerchant_id ne correspond pas à la clé API de la boutique.
400NO_PAYMENT_METHODAucune méthode de paiement configurée. Ajoutez au moins un portefeuille ou configurez une plateforme d'échange avant de créer des factures.
401MISSING_API_KEYAucun en-tête x-api-key fourni.
401INVALID_API_KEYLa clé API est invalide ou n'existe pas.
403ACCOUNT_INACTIVELe compte associé à cette clé API est désactivé.
403STORE_INACTIVELa boutique associée à cette clé API est désactivée.
402INSUFFICIENT_BALANCESolde de la boutique insuffisant pour les frais. details contient current_balance, required_fee, shortage, fee_rate_percent, discount_percent, invoice_amount.
429RATE_LIMIT_EXCEEDEDLimite de débit dépassée (burst ou soutenu). Contient limit_type, retry_after_seconds.
500INTERNAL_ERRORErreur serveur.

Détails des codes d'erreur : Codes d'erreur API.

Limite de débit

  • Burst : 5 requêtes/seconde (par clé API ou IP).
  • Soutenu : 60 requêtes/minute (par clé API ou IP).

Dépassement → HTTP 429, corps contient error_code: "RATE_LIMIT_EXCEEDED", retry_after_seconds.

Notes

  • Méthode de paiement : La boutique doit configurer au moins une adresse de portefeuille ou une plateforme d'échange (Binance Pay, OKX, Bybit, MEXC, Gate.io, Bitget, etc.) avant de créer des factures. Si non configurée, l'API retourne l'erreur NO_PAYMENT_METHOD.
  • Idempotence : Si vous envoyez un request_id qui existe déjà pour la même boutique, l'API retourne la facture existante au lieu d'en créer une nouvelle. La réponse inclura idempotent: true pour l'indiquer. Cela empêche la création de factures en double lors de la relance de requêtes échouées.
  • Frais : Les frais sont calculés sur le amount (USD) et déduits du solde de la boutique. Assurez un solde suffisant avant de créer des factures. Pendant la période d'essai gratuit, les frais sont supprimés.
  • Callback : Envoyez toujours callback_url pour recevoir les webhooks completed/expired ; sinon, vous ne pouvez vérifier que via GET https://api.payerscan.com/invoice/:trans_id.
  • request_id : Recommandé pour faciliter la correspondance webhook-commande et le support de l'idempotence.