Skip to content

API

Introduction

Pour offrir une expérience facile à utiliser, nous proposons des bibliothèques Python, Perl ou PHP, et nous continuerons d’étoffer ce catalogue.

Des exemples de code sont disponibles dans chaque section. Les onglets disponibles dans le menu vous permettent de basculer vers les différents languages de programmations.

L’API est disponible via https://api.stancer.com et supporte TLS 1.2, HTTP/1.1 et HTTP/2.

Notre documentation est également disponible au format Swagger ou Redoc.

INFO

Cette documentation utilise httpie pour les exemples en shell, et nos bibliothèques pour les exemples en PHP, Python & Perl.

Par simplification des exemples, l’authentification par votre clé d’API (--auth stest_xxx:) est omise dans les lignes de commande proposées, mais vous devez la fournir à chaque appel.

Concepts clés

La même API peut être utilisée pour accéder aux ressources live traitant les paiements réels et méthodes de paiement, mais aussi des ressources de test pour le développement de vos logiciels et le débogage. Notre service API utilise des clés d’API pour authentifier les requêtes.

Pour obtenir une clé API, vous pouvez vous inscrire sur notre site web. Les clés API sont sous la forme de sprod_xxx pour vos requêtes live et stest_xxx pour vos test.

L’authentification à l’API est effectuée via HTTP Basic Auth. Vous devez utiliser votre clé API comme nom d’utilisateur et ne renseignez pas de mot de passe.

Nous vous conseillons d’utiliser le mécanisme d’authentification de base de votre bibliothèque HTTP, mais si vous devez le gérer manuellement, comme spécifié dans HTTP Basic Auth RFC, vous devez encoder votre clé API en base64 avant d’envoyer le token d'authentification correspondante dans un en-tête HTTP Authorization. Par exemple, si votre clé API est sprod_xxx, vous devez encoder sprod_xxx: (rappelez-vous, le mot de passe doit être vide) en base64 puis envoyer une en-tête HTTP avec votre clé encodée. Ainsi, si votre clé encodée est c3Byb2RfeHh4Og== votre en-tête sera Autorisation: Basic c3Byb2RfeHh4Og==.

Pour une documentation technique, veuillez consulter nos documentation OpenAPI, Swagger ou Redoc.

Si vous avez besoin d’assistance technique sur l’intégration de notre API, vous pouvez rejoindre notre communauté Slack.

Créer des paiements

Avec la page de paiement de Stancer

Pour créer un paiement, utilisez la route POST /v2/payment_intents/. Vous devez fournir un montant et une devise (eur par défaut).

Si vous souhaitez associer le paiement à un client, vous pouvez utiliser le champ customer et transmettez l’ID cust_xxx correspondant.

shell
$ http --auth stest_xxx: https://api.stancer.com/v2/customers/ \
    name="Foo Bar" email=foo.bar@example.org
{
    "id": "cust_xxx",

}

$ http --auth stest_xxx: https://api.stancer.com/v2/payment_intents/ \
currency=eur amount=100 customer=cust_xxx description="Test payment"
{
    "id": "pi_xxx",
    "url" "https://payment.stancer.com/payment_intents/pi_xxx"

}

Vous pouvez maintenant envoyer votre client sur la page de paiement située sur https://payment.stancer.com/payment_intents/pi_xxx, pi_xxx sera remplacé par l'API par l'identifiant correspondant.

Vous pouvez trouver l'URL dans le champ url de votre payment intent, ou, avec les bibliothèques :

python
payment_page_url = payment.payment_page_url()

Capturer des paiements

Pour effectuer une capture manuelle d’un paiement via notre API.

Suivez ces étapes dans l’ordre pour éviter toute erreur:

1. Préparer votre environnement

Avant de commencer, assurez-vous d’avoir :

  • Un client pour l’API Si vous n’avez pas de client, vous pouvez utiliser Postman, un outil gratuit pour envoyer vos requêtes API.

  • Le package de l’API Téléchargez le package depuis notre Redoc, en cliquant sur le bouton "Download" en haut de la page.

Download Package API

  • Votre clé privée Vous devez posséder votre clé privée pour vous authentifier. Vous pourrez la retrouver dans la section Développeurs sur votre Espace Client (Ex : sprod_xxx).

2. Importer le package dans Postman

Pour importer le package téléchargé à l'étape précédente, veuillez suivre les instructions suivantes:

  • Ouvrez le logiciel Postman
  • Cliquez sur "Import"
  • Faites glisser le fichier téléchargé intitulé openapi.json sur la zone prévue à cet effet
  • Laissez "Postman Collection" selectionné par défaut puis cliquer sur "Import"

Vous verrez apparaître sur la gauche le package de l'API nommé Stancer API sur lequel vous retrouverez tous les objets disponibles.

Setup Postman

3. Authentification

Avant de faire la capture, vous devez vous authentifier avec votre clé privée.

Dans Postman :

  • Allez dans l’onglet Auth à la racine de la Collection Stancer API.
  • Choisissez Basic Auth.
  • Dans le champ "username", insérez votre clé privée sprod_xxx. Cela permet à l’API de savoir que vous êtes autorisé à effectuer cette action.
  • Ensuite, vous devez vouz rendre dans la section "Variables" puis vérifier dans le champ "baseUrl" que v2 soit renseigné.

Setup Postman

4. Effectuer la capture

Il faudra:

  • Cliquer sur la route payments puis id Vous apercevrez la requête déjà préremplie avec la variable qui reprend le domaine de l’API Stancer.
  • Remplacer ":id" par le paym_xxx que vous souhaitez capturer
  • Cliquer sur Send pour envoyer la requête.

Pour chacun de vos paiements encaissés en ligne, au statut "autorisé", devra être capturé de cette manière.

Statuts et codes de l'API

Statuts de paiement

Le champ status de l’objet payment indique dans quel état se trouve le paiement.

Champ statusSens
📋 authorizedLa banque a autorisé le paiement, mais la transaction ne sera traitée qu'après la demande de capture
📋 to_captureLa banque a autorisé le paiement, la capture sera traitée ce jour
📋 capture_sentL'opération de capture est en cours de traitement, Le paiement ne peut plus être annulé, un remboursement devra attendre la fin du processus de capture
📋 capturedLe montant du paiement a été crédité sur votre compte
📋 disputedLe client a décliné le paiement après qu'il ait été capturé sur votre compte
📋 expiredL'autorisation n'a pas été capturée, le paiement a expiré au bout de 7 jours
📋 failedLe paiement a échoué, se référer au champ response pour plus de détails
📋 refusedLe paiement a été refusé

Statuts de paiement authentifié

Le champ status de l'objet auth indique l'état d'autorisation pour une authentification.

Champ statusSens
📋 availableL'authentification forte du client est possible
📋 requestedL'authentification forte attend plus d'information
📋 attemptedLe client a été redirigé vers sa banque pour l'authentification
📋 successL'authentification a réussi, le processus peut continuer
📋 declinedL'authentification a été déclinée
📋 expiredLa session d'authentification a expiré après 6 heures.
📋 failedL'authentification a échoué
📋 unavailableL'authentification forte n'est pas disponible pour cette méthode de paiement

Statuts de reversement

Le champ status de l'objet payout (reversement) indique l'état du transfert de crédit entre Stancer et votre banque.

Champ statusSens
📋 pendingLe reversement a été créé et est en cours de validation
📋 to_payLe reversement est prêt à être transféré
📋 sentLe reversement a été envoyé et est en cours de traitement
📋 paidLe transfert du crédit a été traité : les fonds ont été reçus par votre banque
📋 failedLe transfert du crédit a échoué : se reporter à l'Espace Client pour plus d'information

Codes de réponse du paiement

Le champ response de l'objet payment indique la réponse à l'authentification de la transaction auprès de la banque du porteur (client).

Les codes et raisons sont des informations de flux bancaires, pour cette raison, ils ne sont pas traduits.

⚠️ = Le code et la raison réelles ne doivent pas être envoyés au client, remplacez les par un code générique: 05 do-not-honor.

Code (champ response)Raison
📋 00Successful approval/completion or that VIP PIN verification is valid
📋 01Refer to card issuer
📋 02Refer to card issuer, special condition
📋 03Invalid merchant or service provider
📋 04Pickup
📋 05Do not honor
📋 06General error
📋 07Pickup card, special condition (other than lost/stolen card)
📋 08Honor with identification
📋 09Request in progress
📋 10Partial approval
📋 11VIP approval
📋 12Invalid transaction
📋 13Invalid amount (currency conversion field overflow) or amount exceeds maximum for card program
📋 14Invalid account number (no such number)
📋 15No such issuer
📋 16Insufficient funds
📋 17Customer cancellation
📋 19Re-enter transaction
📋 20Invalid response
📋 21No action taken (unable to back out prior transaction)
📋 22Suspected Malfunction
📋 25Unable to locate record in file, or account number is missing from the inquiry
📋 28File is temporarily unavailable
📋 30Format error
📋 34⚠️Suspected fraud
📋 41⚠️Merchant should retain card (card reported lost)
📋 43⚠️Merchant should retain card (card reported stolen)
📋 51Insufficient funds
📋 52No checking account
📋 53No savings account
📋 54Expired card
📋 55Incorrect PIN
📋 56Card missing from file
📋 57Transaction not permitted to cardholder
📋 58Transaction not allowed at terminal
📋 59⚠️Suspected fraud
📋 61Activity amount limit exceeded
📋 62⚠️Restricted card (for example, in country exclusion table)
📋 63⚠️Security violation
📋 65⚠️Activity count limit exceeded
📋 68Response received too late
📋 75Allowable number of PIN-entry tries exceeded
📋 76Unable to locate previous message (no match on retrieval reference number)
📋 77Previous message located for a repeat or reversal, but repeat or reversal data are inconsistent with original message
📋 78’Blocked, first used’—The transaction is from a new cardholder, and the card has not been properly unblocked.
📋 80Visa transactions: credit issuer unavailable. Private label and check acceptance: Invalid date
📋 81PIN cryptographic error found (error found by VIC security module during PIN decryption)
📋 82Negative CAM, dCVV, iCVV, or CVV results
📋 83Unable to verify PIN
📋 85No reason to decline a request for account number verification, address verification, CVV2 verification; or a credit voucher or merchandise return
📋 91Issuer unavailable or switch inoperative (STIP not applicable or available for this transaction)
📋 92Destination cannot be found for routing
📋 93⚠️Transaction cannot be completed, violation of law
📋 94Duplicate transmission
📋 95Reconcile error
📋 96System malfunction, System malfunction or certain field error conditions
📋 98Server inaccessible
📋 A0Authentication Required, you must do a card inserted payment with PIN code
📋 A1Authentication Required, you must do a 3-D Secure authentication
📋 A2Pin request in Single TAP mode
📋 B1Surcharge amount not permitted on Visa cards (U.S. acquirers only)
📋 N0Force STIP
📋 N3Cash service not available
📋 N4Cashback request exceeds issuer limit
📋 N7Decline for CVV2 failure
📋 P2Invalid biller information
📋 P5PIN change/unblock request declined
📋 P6Unsafe PIN
📋 Q1Card authentication failed
📋 R0Stop payment order
📋 R1Revocation of authorization order
📋 R3Revocation of all authorizations order
📋 XAForward to issuer
📋 XDForward to issuer
📋 Z1Offline-declined
📋 Z3Unable to go online
📋 7810⚠️Refusal count exceeded for this card / SEPA
📋 7811⚠️Exceeded payment volume for this card / SEPA
📋 7812⚠️Card temporarily frozen by the customer's bank
📋 7840⚠️Stolen or lost card
📋 7898Bank server unavailable

Codes de réponse des contestations (carte)

Le champ response de l'objet dispute(contestation) indique la raison de la contestation par la banque du porteur (client).

Les codes et raisons sont des informations de flux bancaires, pour cette raison, ils ne sont pas traduits.

⚠️ = Le code et la raison réelles ne doivent pas être envoyés au client, remplacez les par un code générique: 45 transaction-disputed.

Code (champ response)RéseauRaison
📋 14NationalTransaction not authorized
📋 42NationalDuplicate processing
📋 45NationalTransaction disputed
📋 1040⚠️VisaFraud; card Absent Environment
📋 1261VisaDuplicate processing
📋 4808MastercardRequested/required authorization not obtained. Transaction not authorized
📋 4834MastercardDuplicate processing
📋 4837⚠️MastercardFraudulent transaction; no cardholder authorization
📋 4853MastercardCardholder Dispute Defective/Not as Described
📋 4863⚠️MastercardCardholder does not recognize. Potential fraud

Codes de réponse des contestations (SEPA)

Le champ response de l'objet dispute(contestation) indique la raison de la contestation par la banque du porteur (client).

Les codes et raisons sont des informations de flux bancaires, pour cette raison, ils ne sont pas traduits.

Ces codes sont défini par l'Universal financial industry message scheme.

Code (champ response)Définition ISOListe exhaustive des cas d'usages
AC01Incorrect Account NumberSDD B2B collection presented to a payment account whereby the Debtor account holder is a consumer or the payment account type is designed to consumers only.
AC04Closed Account NumberThe account of the Debtor is closed at the Debtor PSP. Note: This code cannot be used in certain SEPA countries for reasons of data protection. MS03 could be used as an alternative.
AC06Blocked AccountAccount blocked for any financial transaction.
AC13Invalid Debtor Account TypeSDD B2B collection presented to a payment account whereby the Debtor account holder is a consumer or the payment account type is designed to consumers only.
AG01Transaction ForbiddenA SDD collection cannot be booked from this type of account (account not allowed for direct debit for regulatory reasons e.g., savings account). Important note: AG01 cannot be used in the situation of an SDD B2B collection presented to a Debtor account that is a consumer account. The code AC13 needs to be used.
AG02Invalid Bank Operation CodeRecurrent after a one-off / One-off after a recurrent / Identification code of the scheme (i.e. service level or local instrument) specified in the message is incorrect
AM04Insufficient FundsThere are not enough funds on the Debtor account to debit the full amount of the collection. Note: This code cannot be used in certain SEPA countries for reasons of data protection. MS03 could be used as an alternative
AM05DuplicationCSM or Debtor PSP considers that an identical SDD collection had been sent or processed very recently
BE05Unrecognised Iniating PartyCreditor Identifier (CI) is not correct or has been changed without an amendment been reported.
CNORCreditor Bank Is Not RegisteredCreditor PSP is not/ no longer registered as a SDD scheme participant under this BIC at the CSM.
DNORDebtor Bank Is Not RegisteredDebtor PSP is not/ no longer registered as a SDD scheme participant under this BIC at the CSM.
ED05Settlement FailedThe Debtor PSP or the CSM must report a settlement failure.
FF01Invalid File FormatIssues with XML-file specific settings:
• XML file was not duly filled out or is not correct
• There is a syntax error in the file
• Creditor PSP, its intermediary PSP or the CSM did not complete a XSD check before submitting the file into the scheme.
MD01No Mandate• No mandate is existing
• B2B mandate not yet confirmed by the Debtor
• Refund for an unauthorised transaction (until 13 months after debit date) (For SDD Core collections only)
• Mandate cancellation
MD02Missing Mandatory Mandate Information in Mandate• Mandate data in the mandate related information is not identical to those in the mandate (amendments had not been communicated)
• Mandate data not consistent with version already received for the UMR
• In case of mandate amendment: the original IBAN
MD06Refund Request By End CustomerUnconditional Refund of a collection (SDD Core – until 8 weeks after debit date).
MD07End Customer DeceasedDebtor deceased. Note: This code cannot be used in certain SEPA countries for reasons of data protection. In this case MS03 can be used as alternative.
MS02Not Specified Reason Customer GeneratedRefusal by Debtor at presentation.
MS03Not Specified Reason Agent GeneratedOnly to be used in case national legislation (e.g., data protection laws) does not allow the use of AC04, AM04, MD07, RR01, RR02, RR03 and RR04. Note: limit the use of the reason code MS03 and select the appropriate reason code in the list.
RC01Bank Identifier IncorrectBIC of the scheme participant is not correct.
RR01Missing Debtor Account Or IdentificationMissing details about the Debtor account or identification. Note: This code cannot be used in certain SEPA countries for reasons of data protection. MS03 could be used as an alternative.
RR02Missing Debtor Name Or AddressMissing Debtor name (address is optional field for EEA SDD collections); Missing address of the Debtor for non-EEA SDD collections. Note: This code cannot be used in certain SEPA countries forreasons of data protection. MS03 could be used as an alternative.
RR03Missing Creditor Name OR AddressMissing Creditor name (address is an optional field). Note: This code cannot be used in certain SEPA countries for reasons of data protection. MS03 could be used as an alternative.
RR04Regulatory ReasonOnly to be used for regulatory reasons other than RR01, RR02 or RR03. Note: This code cannot be used in certain SEPA countries for reasons of data protection. MS03 could be used as an alternative.
SL01Specific Service Offered By Debtor AgentAll Debtor-invoked consumerright rejects:
• Creditor blocking
• Collection amount limitations
• Collection frequency limitations. Other services offered by the Debtor PSP.

Données de test

Cartes de test

⚠️ Note

Ces cartes de test sont destinées uniquement à la simulation de scénarios spécifiques (exemples : Contestations, Paiements capturés...).
Leur utilisation dans un flux de paiement en production peut entraîner des comportements inattendus et compromettre l’intégrité de vos intégrations.

À utiliser uniquement dans un environnement de test.

NuméroMarquePays3DSCode retourUtilisation
📋 4000000400000008VisaAT 🇦🇹Optional00 OKPage de paiement
📋 4000000560000004VisaBE 🇧🇪Optional00 OKPage de paiement
📋 4000002080000001VisaDK 🇩🇰Optional00 OKPage de paiement
📋 4000002460000001VisaFI 🇫🇮Optional00 OKPage de paiement
📋 4000002500000003CBFR 🇫🇷Optional00 OKPage de paiement
📋 4000002760000016VisaDE 🇩🇪Optional00 OKPage de paiement
📋 4000003720000005VisaIE 🇮🇪Optional00 OKPage de paiement
📋 4000003800000008VisaIT 🇮🇹Optional00 OKPage de paiement
📋 4000004420000006VisaLU 🇱🇺Optional00 OKPage de paiement
📋 4000005280000002VisaNL 🇳🇱Optional00 OKPage de paiement
📋 4000005780000007VisaNO 🇳🇴Optional00 OKPage de paiement
📋 4000006200000007VisaPT 🇵🇹Optional00 OKPage de paiement
📋 4000006430000009VisaRU 🇷🇺Optional00 OKPage de paiement
📋 4000007240000007VisaES 🇪🇸Optional00 OKPage de paiement
📋 4000007520000008VisaSE 🇸🇪Optional00 OKPage de paiement
📋 4000007560000009VisaCH 🇨🇭Optional00 OKPage de paiement
📋 4000008260000000VisaGB 🇬🇧Optional00 OKPage de paiement
📋 4242424242424242VisaUS 🇺🇸Not required00 OKPage de paiement
📋 4444333322221111VisaUS 🇺🇸Not required00 OKPage de paiement
📋 4111111111111111VisaUS 🇺🇸Not required00 OKPage de paiement
📋 5555555555554444MastercardUS 🇺🇸Optional00 OKPage de paiement
📋 5200828282828210MastercardUS 🇺🇸Optional00 OKPage de paiement
📋 5105105105105100MastercardUS 🇺🇸Optional00 OKPage de paiement
📋 4000000000003055VisaUS 🇺🇸Not enrolled00 OKPage de paiement
📋 4000000760000002VisaBR 🇧🇷Optional00 OKPage de paiement
📋 4000001240000000VisaCA 🇨🇦Optional00 OKPage de paiement
📋 4000004840000008VisaMX 🇲🇽Optional00 OKPage de paiement
📋 4000000000000077VisaFR 🇫🇷Optional00 OK | status = 50 capturedAPI (HPP, TTPOI, TPE, CMS etc)
📋 4000000000003220VisaUS 🇺🇸RequiredA1 must perform 3DS | status = 0 refusedPage de paiement
📋 4000000000000002VisaFR 🇫🇷Optional05 do not honor | status = 0 refusedPage de paiement
📋 4000000000009995VisaFR 🇫🇷Optional51 insufficient fund | status = 0 refusedPage de paiement
📋 4000000000009987VisaFR 🇫🇷Optional41 lost card | status = 0 refusedPage de paiement
📋 4000000000000259VisaFR 🇫🇷Optional00 OK | status = 60 disputedAPI (HPP, TTPOI, TPE, CMS etc)
📋 4000000000001976VisaFR 🇫🇷Optional00 OK | status = 60 disputedAPI (HPP, TTPOI, TPE, CMS etc)
📋 4000000000005423VisaFR 🇫🇷Optional00 OK | status = 60 disputedAPI (HPP, TTPOI, TPE, CMS etc)

SEPA de test

⚠️ Note

Ces SEPA de test sont destinés uniquement à la simulation de scénarios spécifiques (exemples : Contestations, Paiements capturés...).
Leur utilisation dans un flux de paiement en production peut entraîner des comportements inattendus et compromettre l’intégrité de vos intégrations.

À utiliser uniquement dans un environnement de test.

IBANPaysNomDate de naissanceCode de retour
📋 AT611904300234573201AT 🇦🇹Otto Normalverbraucher1971-02-0200 OK
📋 BE62510007547061BE 🇧🇪Jef Van Pijperzele1972-03-0300 OK
📋 CH2089144321842946678CH 🇨🇭Leonhard Euler1973-04-0400 OK
📋 DE89370400440532013000DE 🇩🇪Max Mustermann1974-05-0500 OK
📋 EE382200221020145685EE 🇪🇪Friedrich Robert Faehlmann1975-06-0600 OK
📋 ES0700120345030000067890ES 🇪🇸Juan Pérez1976-07-0700 OK
📋 FI2112345600000785FI 🇫🇮Maija Meikäläinen1977-08-0800 OK
📋 FR1420041010050500013M02606FR 🇫🇷Pierre Martin1978-09-0900 OK
📋 GB33BUKB20201555555555GB 🇬🇧John Doe1970-01-0100 OK
📋 IE29AIBK93115212345678IE 🇮🇪John Kilkenny1979-10-1000 OK
📋 LT121000011101001000LT 🇱🇹Jonas Petraitis1980-11-1100 OK
📋 LU280019400644750000LU 🇱🇺Adalbert Boros1981-12-1200 OK
📋 IT02A0301926102000000490887IT 🇮🇹Piero Pers1982-01-1300 OK
📋 NL39RABO0300065264NL 🇳🇱Jan Modaal1983-02-1400 OK
📋 NO9386011117947NO 🇳🇴Peder Aas1984-03-1500 OK
📋 PT50000201231234567890154PT 🇵🇹Jan Kowalski1985-04-1600 OK
📋 SE3550000000054910000003SE 🇸🇪Lisa Svensson1986-05-1700 OK
📋 FR9430003000409249176322Z50FR 🇫🇷Gilles Dupont1987-06-1800 OK
📋 FR2990665286926539507769811FR 🇫🇷Jean Banbois1992-11-23AC01 Incorrect Account Number | status = 0 refused
📋 FR8191676442817818484578833FR 🇫🇷Marie-Jeanne Sansbanque1993-12-24AC04 Closed Account Number | status = 0 refused
📋 FR3083648641551044006702169FR 🇫🇷Marc Barrer1994-01-25AC06 Blocked Account | status = 0 refused
📋 FR4200838098473368525032012FR 🇫🇷Sophie Fontek1995-02-26AG01 Transaction Forbidden | status = 0 refused
📋 FR7099253427049384102178149FR 🇫🇷Hector Fauché1996-03-27AM04 Insufficient Funds | status = 0 refused
📋 FR7240745948453163519978561FR 🇫🇷Lillianne Sansmandat1997-04-28MD01 No Mandate | status = 0 refused
📋 FR5533686478441573584650545FR 🇫🇷Vincent Refusé1998-05-29MD06 Refund Request By End Customer | status = 0 refused
📋 FR2488294045573706143240475FR 🇫🇷Eric Indécis1999-06-30MS02 Not Specified Reason Customer Generated | status = 0 refused
📋 BE08510007547063BE 🇧🇪Camille Honnête1988-07-19AM04 Insufficient Funds | status = 60 disputed
📋 ES5000120345030000067892ES 🇪🇸Pepito Pérez1990-09-21AC04 Closed Account Number | status = 60 disputed