Tapaya
PrésentationPlatform APIMerchant Onboarding API

Merchant Onboarding API

Créez des commerçants et soumettez leur onboarding ou invitez-les à l’effectuer via la Platform API de Tapaya.

Toutes les requêtes de cette page utilisent votre Server Secret Token. Voir Authentification.

Un seul onboarding pour les paiements en magasin et en ligne

Un commerçant peut demander l’Acceptation des paiements en magasin, les Paiements en ligne, ou les deux, dans une seule demande d’onboarding. Cette page s’applique à toutes les intégrations : l’Accept SDK, l’application Tapaya Terminal et le Checkout. Utilisez-la pour créer et gérer des commerçants via l’API plutôt que via la Tapaya Platform UI. Demandez les fonctionnalités de paiement dont le commerçant a besoin. Une approbation pour les paiements en magasin ne suffit pas à elle seule à activer les paiements en ligne.

Créer un commerçant avec POST /integrator/merchant, ou avec POST /merchant/auth/register dans une intégration de l’Accept SDK, crée son compte, mais le commerçant ne peut pas traiter de paiements réels en magasin ou en ligne tant que l’onboarding n’est pas terminé. Pour les paiements en ligne, demandez la fonctionnalité Checkout et attendez l’approbation du processeur en ligne et la configuration de la passerelle. Les commerçants apparaissent automatiquement dans les paramètres du Checkout, où vous pouvez vérifier qu’ils sont prêts et configurer les clés et les portefeuilles. Tapaya prend en charge plusieurs expériences d’onboarding ; toutes peuvent être gérées depuis la Tapaya Platform UI et automatisées lorsque c’est pertinent.

ParcoursQuand l’utiliserPoint d’entrée de l’API
Tapaya Platform UIVotre équipe opérationnelle effectue l’onboarding au nom du commerçant.Créez ou sélectionnez le commerçant dans la Tapaya Platform UI et ouvrez-y l’onboarding hébergé.
Votre propre interfaceVous collectez et validez les informations d’onboarding dans votre produit.Validez les sections avec POST /integrator/merchant/onboarding/validate/*, puis soumettez avec POST /integrator/merchant/onboarding. Détails ci-dessous.
Invitation par e-mailUn commerçant connu reçoit une invitation à usage unique pour effectuer lui-même son onboarding.Envoyez une invitation avec POST /integrator/merchant/send-registration-invite ; incluez merchantToken pour rattacher l’invitation à une fiche commerçant de base existante, puis listez-la ou révoquez-la via /integrator/merchant/invites.
Lien de campagnePlusieurs commerçants, ou des commerçants pas encore connus, utilisent un lien d’auto-inscription réutilisable.Créez un lien avec POST /integrator/merchant/reusable-registration-invites ; listez ou révoquez les liens via la même ressource.

Pour une comparaison détaillée de ces parcours, consultez le guide d’onboarding des commerçants.

Demander les fonctionnalités de paiement en ligne

POST /integrator/merchant/onboarding exige capability. Utilisez la même fonctionnalité lors de la validation du profil d’entreprise :

ValeurFonctionnalitéInformations par canal
1Les deux (Both)Fournissez terminal et online. Chaque canal nécessite sa propre approbation.
2Terminaux (Terminals)Fournissez terminal pour les paiements en magasin.
3CheckoutFournissez online pour les paiements en ligne. Aucun terminal n’est nécessaire.

Pour le Checkout, ajoutez les champs de premier niveau suivants en plus de l’identité, de l’adresse, de l’objet partagé business et des données KYB du commerçant. Les mêmes champs de canal s’appliquent à POST /integrator/merchant/onboarding/validate/business :

{
	"capability": 3,
	"online": {
		"mcc": "5411",
		"statementDescriptor": "ACME CORP",
		"productDescription": "Groceries sold online",
		"averageItemValue": 2500,
		"expectedMonthlyTurnover": 500000,
		"url": "https://www.acme.example.com",
		"purchaseChargeTiming": 1,
		"averageDeliveryDays": 2,
		"topCountries": [{ "countryId": 1, "percentage": 100 }]
	}
}

Les montants sont exprimés dans la plus petite unité de la devise. Le site web en ligne doit utiliser HTTP ou HTTPS et son nom d’hôte doit contenir www. statementDescriptor compte de 5 à 22 caractères. purchaseChargeTiming vaut 1 pour une commande passée, 2 pour une commande expédiée ou 3 pour une commande reçue. averageDeliveryDays est compris entre 0 et 999. Fournissez de un à quatre topCountries uniques dont la somme des pourcentages est égale à 100.

Conservez les informations partagées de support et financières dans business. En mode sections par canal, placez le MCC, le libellé de relevé bancaire, la description des produits et les estimations de transactions dans l’objet terminal ou online concerné. Validez le payload avant de soumettre l’onboarding et corrigez les erreurs de champ propres à chaque canal qui sont renvoyées.

Inviter un commerçant à effectuer l’onboarding hébergé

Utilisez ce parcours lorsque Tapaya doit héberger le formulaire KYB, mais que vous souhaitez tout de même contrôler la création du commerçant depuis votre backend.

Recommandé si vous gérez le merchantToken

Si votre système gère l’identifiant du commerçant utilisé ensuite par le SDK ou votre back-office, créez d’abord la fiche commerçant de base avec POST /merchant/auth/register ou POST /integrator/merchant, puis appelez POST /integrator/merchant/send-registration-invite avec le même merchantToken. L’onboarding hébergé reste ainsi rattaché à ce commerçant au lieu d’en créer un second.

La séquence recommandée est la suivante :

  1. Créez la fiche commerçant de base :
    • POST /merchant/auth/register, ou
    • POST /integrator/merchant
  2. Envoyez l’invitation à l’onboarding hébergé avec POST /integrator/merchant/send-registration-invite
  3. Partagez si nécessaire la registrationUrl renvoyée avec le commerçant, et laissez-le remplir le formulaire hébergé par Tapaya
  4. Interrogez régulièrement l’état de préparation du commerçant via GET /integrator/merchant/{merchantId}/status

Endpoint : POST /integrator/merchant/send-registration-invite

curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/send-registration-invite' \
-H 'Content-Type: application/json' \
-H 'Authorization: REPLACE_ME' \
-d '{
        "email": "admin@acme.com",
        "merchantToken": "unique_merchant_id_from_your_db"
    }'

Paramètres :

ChampTypeObligatoireDescription
emailstring✓Adresse e-mail qui doit recevoir le lien vers l’onboarding hébergé.
merchantTokenstringJeton de commerçant existant auquel rattacher l’invitation. Utilisez-le lorsque vous avez déjà créé la fiche commerçant de base et souhaitez que l’onboarding hébergé complète ce même commerçant. S’il est omis, la finalisation de l’invitation crée un nouveau commerçant.

Réponses :

CodeDescription
200Invitation créée. La réponse inclut registrationUrl
400Erreur de validation de la requête
401Non autorisé
404Organisation ou commerçant introuvable
409Conflit

Corps de la réponse :

{
    "registrationUrl": "https://platform.tapaya.com/invite-merchant?token=...&merchantToken=unique_merchant_id_from_your_db"
}

Tapaya tente également d’envoyer ce lien par e-mail. L’envoi de l’e-mail n’est pas garanti : considérez donc toujours la registrationUrl renvoyée comme la source de vérité pour votre interface et vos outils de support.

Ne confondez pas avec l’invitation d’un utilisateur du commerçant

POST /integrator/merchant/{merchantId}/invite est un parcours différent. Il invite un utilisateur de la plateforme à accéder à un compte commerçant déjà existant. Il ne lance pas l’onboarding KYB et ne crée ni ne met à jour aucun profil de commerçant.

Soumettre l’onboarding via l’API

Si vous souhaitez collecter les informations d’onboarding dans votre propre produit au lieu de renvoyer les commerçants vers la Tapaya Platform, soumettez-les directement. Validez chaque section au fur et à mesure que le commerçant la remplit grâce aux endpoints validate/* ci-dessous, puis soumettez le tout en un seul appel, qui crée en même temps le commerçant et son profil d’onboarding et l’enregistre auprès du processeur de paiement préféré de votre organisation.

Consentement du commerçant et information sur la confidentialité

Avant de soumettre des informations d’onboarding via l’API, vous devez obtenir le consentement du commerçant aux Conditions générales de Tapaya pour les intégrateurs et à la Politique de confidentialité de Tapaya. Ajoutez à votre formulaire d’onboarding une case à cocher renvoyant vers les deux documents, ou faites référence aux documents de Tapaya dans le texte des conditions auxquelles le commerçant consent. Vous devez également mentionner Tapaya comme sous-traitant des données dans votre propre politique de confidentialité.

Aucun commerçant créé en cas d’échec

POST /integrator/merchant/onboarding crée le commerçant et soumet l’onboarding en un seul appel. Si les données d’onboarding sont invalides, il renvoie 422 avec des erreurs au niveau des champs et aucun commerçant n’est créé ; il n’y a aucun commerçant à l’onboarding inachevé à nettoyer ou à reprendre.

Valider l’identité

Endpoint : POST /integrator/merchant/onboarding/validate/identity

curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/onboarding/validate/identity' \
-H 'Content-Type: application/json' \
-H 'Authorization: REPLACE_ME' \
-d '{
        "legalName": "Acme Corp s.r.o.",
        "businessTypeId": 2,
        "email": "admin@acme.com",
        "registrationNumber": "12345678",
        "vatNumber": "CZ12345678",
        "incorporationDate": "2018-04-01"
    }'

Paramètres :

ChampTypeObligatoireDescription
legalNamestring✓Raison sociale de l’entreprise ou nom du titulaire individuel du compte.
businessTypeIdint✓Type d’entité juridique (BusinessTypeEnum).
emailstring✓Adresse e-mail de contact.
registrationNumberstring✓Numéro d’immatriculation officiel de l’entreprise. Les doublons sont vérifiés au sein de votre
organisation.
vatNumberstringNuméro de TVA, le cas échéant.
incorporationDatedateDate de constitution légale de l’entreprise (YYYY-MM-DD).

Corps de la réponse :

{
    "valid": true,
    "errors": []
}

Un registrationNumber déjà utilisé par un autre commerçant de votre organisation est renvoyé sous forme d’erreur valid: false avec code: "DUPLICATE_REGISTRATION_NUMBER" plutôt que sous forme de 409 ; cet endpoint renvoie toujours 200.

Valider l’adresse

Endpoint : POST /integrator/merchant/onboarding/validate/address

curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/onboarding/validate/address' \
-H 'Content-Type: application/json' \
-H 'Authorization: REPLACE_ME' \
-d '{
        "line1": "Wenceslas Square 1",
        "city": "Prague",
        "postalCode": "11000",
        "countryId": 1
    }'

Paramètres :

ChampTypeObligatoireDescription
line1string✓Première ligne de l’adresse postale.
line2stringDeuxième ligne de l’adresse postale, le cas échéant.
citystring✓Nom de la ville.
postalCodestring✓Code postal.
statestringÉtat ou région, le cas échéant.
countryIdint✓Pays (CountryEnum).

Corps de la réponse : même structure {valid, errors} que pour Valider l’identité.

Valider le profil d’entreprise

Endpoint : POST /integrator/merchant/onboarding/validate/business

curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/onboarding/validate/business' \
-H 'Content-Type: application/json' \
-H 'Authorization: REPLACE_ME' \
-d '{
        "capability": 2,
        "mcc": "5411",
        "url": "https://acme.example.com",
        "supportPhone": "+420123456789",
        "statementDescriptor": "ACME CORP"
    }'

Paramètres :

ChampTypeObligatoireDescription
capabilityint✓Utilisez la fonctionnalité que vous soumettrez pour l’onboarding. Pour Checkout ou Both, fournissez les informations par canal.
mccstring✓Merchant Category Code à quatre chiffres. En mode sections par canal, utilisez terminal.mcc ou online.mcc.
urlstringURL du site web de l’entreprise. url ou productDescription est obligatoire.
productDescriptionstringDescription des produits ou services. url ou productDescription est
obligatoire.
supportPhonestring✓Numéro de téléphone du service client, au format E.164.
statementDescriptorstring✓Texte affiché sur les relevés bancaires des clients (1 à 22 caractères).
averageItemValuelongValeur moyenne d’une transaction, dans la plus petite unité de la devise.
expectedMonthlyTurnoverlongChiffre d’affaires mensuel prévu, dans la plus petite unité de la devise.
numberOfEmployeesintNombre de salariés de l’entreprise.
annualTurnoverlongChiffre d’affaires annuel, dans la plus petite unité de la devise.
balanceSheetTotallongTotal du bilan, dans la plus petite unité de la devise.

Corps de la réponse : même structure {valid, errors} que pour Valider l’identité.

Valider le KYB

Endpoint : POST /integrator/merchant/onboarding/validate/kyb

Fournissez exactement l’un des deux objets : individual (entrepreneur individuel / indépendant) ou company. Pour une company, listez chaque propriétaire, dirigeant et signataire autorisé dans people.

curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/onboarding/validate/kyb' \
-H 'Content-Type: application/json' \
-H 'Authorization: REPLACE_ME' \
-d '{
        "businessTypeId": 2,
        "bankAccount": {
            "iban": "CZ6508000000192000145399",
            "bic": "GIBACZPX",
            "currencyId": 1,
            "beneficiaryName": "Acme Corp s.r.o."
        },
        "company": {
            "name": "Acme Corp s.r.o.",
            "registrationNumber": "12345678",
            "people": [
                {
                    "email": "jane@acme.com",
                    "firstName": "Jane",
                    "lastName": "Doe",
                    "role": {
                        "isOwner": true,
                        "isAuthorizedSignatory": true
                    }
                }
            ]
        }
    }'

Paramètres :

ChampTypeObligatoireDescription
businessTypeIdintType d’entité juridique (BusinessTypeEnum) ; détermine si les champs individual ou
company sont obligatoires.
bankAccountobjectCompte bancaire de versement (numéro de compte/IBAN + BIC, devise, bénéficiaire et adresse de la
banque).
individualobjectInformations sur le propriétaire individuel, pour les entrepreneurs individuels. Mutuellement exclusif avec company.
companyobjectInformations sur la société, dont un tableau people des propriétaires, dirigeants et signataires
autorisés, ainsi qu’un verificationDocument facultatif. Mutuellement exclusif avec individual.

Chaque personne de people (et individual) porte les indicateurs role.isOwner / isDirector / isRepresentative / isAuthorizedSignatory, ainsi que des champs d’identité facultatifs (dateOfBirth, nationalityCountryId, officialIdType/officialIdNumber, address, ownershipPercentage, verificationDocuments). Une entrée de personne doit être soit sur invitation uniquement, soit entièrement détaillée ; les personnes partiellement renseignées sont refusées. Il existe deux façons de soumettre une personne :

  • Sur invitation uniquement : soumettez seulement email et un role. La personne reçoit un e-mail contenant des instructions pour renseigner elle-même ses informations personnelles et effectuer directement la vérification de son identité, y compris le téléversement de sa propre pièce d’identité ; vous n’avez rien d’autre à collecter pour elle, et aucun téléversement de document n’est requis de votre côté.
  • Entièrement détaillée : soumettez vous-même toutes les informations personnelles de la personne (nom, date de naissance, pièce d’identité officielle, adresse, etc.). Dans ce cas, vous devez également téléverser une pièce d’identité pour cette personne ; c’est obligatoire, et non facultatif, pour chaque personne entièrement détaillée.

Les documents sont téléversés une fois le commerçant créé, car l’endpoint de téléversement de documents a besoin du merchantId renvoyé par Créer un commerçant avec onboarding. Chaque téléversement est associé à la personne concernée via relatedOfficialIdNumber. Les champs facultatifs verificationDocuments.identityDocument, verificationDocuments.additionalDocument et company.verificationDocument acceptent chacun un objet {frontFileId, backFileId} et ne peuvent référencer que des fichiers déjà téléversés : omettez-les donc lors de la création d’un nouveau commerçant.

Quel que soit le nombre de personnes sur invitation uniquement ou entièrement détaillées, vous devez toujours téléverser le document d’immatriculation/de constitution de la société avant que le commerçant puisse être soumis à l’examen KYC.

Corps de la réponse : même structure {valid, errors} que pour Valider l’identité.

Créer un commerçant avec onboarding

Soumet en un seul appel tout le contenu des quatre étapes précédentes, crée le commerçant et l’enregistre auprès du processeur de paiement préféré de votre organisation.

Endpoint : POST /integrator/merchant/onboarding

curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/onboarding' \
-H 'Content-Type: application/json' \
-H 'Authorization: REPLACE_ME' \
-d '{
        "name": "Acme Corp",
        "capability": 2,
        "merchantToken": "unique_merchant_id_from_your_db",
        "identity": {
            "legalName": "Acme Corp s.r.o.",
            "businessTypeId": 2,
            "email": "admin@acme.com",
            "registrationNumber": "12345678",
            "vatNumber": "CZ12345678"
        },
        "address": {
            "line1": "Wenceslas Square 1",
            "city": "Prague",
            "postalCode": "11000",
            "countryId": 1
        },
        "business": {
            "mcc": "5411",
            "url": "https://acme.example.com",
            "supportPhone": "+420123456789",
            "statementDescriptor": "ACME CORP"
        },
        "kyb": {
            "bankAccount": {
                "iban": "CZ6508000000192000145399",
                "bic": "GIBACZPX",
                "currencyId": 1,
                "beneficiaryName": "Acme Corp s.r.o."
            },
            "company": {
                "people": [
                    {
                        "email": "jane@acme.com",
                        "firstName": "Jane",
                        "lastName": "Doe",
                        "role": {
                            "isOwner": true,
                            "isAuthorizedSignatory": true
                        }
                    }
                ]
            }
        }
    }'

Paramètres :

ChampTypeObligatoireDescription
capabilityint✓1 pour Both, 2 pour Terminals ou 3 pour Checkout. Voir fonctionnalités de paiement en ligne.
terminalobjectSelon la fonctionnalitéInformations du canal terminal pour Terminals ou Both.
onlineobjectSelon la fonctionnalitéInformations du canal en ligne pour Checkout ou Both.
namestring✓Nom du commerçant.
merchantTokenstringIdentifiant unique et stable issu de votre système. S’il n’est pas fourni, un jeton aléatoire est
généré.
identityobject✓Même structure que pour Valider l’identité.
addressobject✓Même structure que pour Valider l’adresse.
businessobject✓Même structure que pour Valider le profil d’entreprise.
kybobject✓Même structure que pour Valider le KYB.

Réponses :

CodeDescription
201Commerçant créé et onboarding soumis
422Données d’onboarding invalides, voir errors ; le commerçant n’est pas créé

Corps de la réponse (201) :

{
    "merchantId": "018f8f2a-3b1e-7c2a-9f1a-2e6a1b7c4d3e",
    "merchantToken": "unique_merchant_id_from_your_db",
    "name": "Acme Corp",
    "email": "admin@acme.com",
    "processors": [
        {
            "processorId": 5,
            "registered": true,
            "onboardingUrl": null
        }
    ]
}

onboardingUrl est renseigné lorsque le processeur exige que le commerçant suive un parcours d’onboarding hébergé supplémentaire (par exemple une vérification d’identité) avant de pouvoir traiter des paiements réels.

Corps de la réponse (422) :

{
    "errors": [
        {
            "step": "identity",
            "field": "registrationNumber",
            "message": "A merchant with this registration number is already onboarded under this integrator (merchantId: 018f8f2a-3b1e-7c2a-9f1a-2e6a1b7c4d3e).",
            "code": "DUPLICATE_REGISTRATION_NUMBER"
        }
    ]
}

Téléverser la pièce d’identité d’une personne

Obligatoire pour chaque personne entièrement détaillée dans kyb.company.people / kyb.individual (voir Valider le KYB) ; les personnes sur invitation uniquement téléversent elles-mêmes la leur, via le lien reçu par e-mail.

Endpoint : POST /integrator/merchant/{merchantId}/document

Le corps de la requête est au format multipart/form-data, et non JSON.

curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/018f8f2a-3b1e-7c2a-9f1a-2e6a1b7c4d3e/document' \
-H 'Authorization: REPLACE_ME' \
-F 'paymentProcessorId=5' \
-F 'documentType=2' \
-F 'relatedOfficialIdNumber=123456789' \
-F 'frontFile=@./jane-doe-id-front.jpg' \
-F 'backFile=@./jane-doe-id-back.jpg'

Paramètres :

ChampTypeObligatoireDescription
paymentProcessorIdint✓Toujours 5.
documentTypeint✓Type de document (DocumentTypeEnum : 1 Other, 2 Id, 3 Address, 4 Company,
5 BankStatement, 6 Passport, 7 RecentFinancials).
frontFilefile✓Recto de l’image du document.
backFilefileVerso de l’image du document, le cas échéant.
relatedOfficialIdNumberstringL’officialIdNumber de la personne, issu de Valider le KYB.
Obligatoire uniquement lorsque documentType est lié à une personne (par exemple Id, Passport, Address) ; ignoré sinon.
submitMerchantbooleanLaissez-le non défini/à false ici : la pièce d’identité d’une personne n’est pas le dernier téléversement du lot.
Ne le définissez à true que lors du téléversement du document de la société, une fois que les documents de toutes les personnes ont été
téléversés.

Corps de la réponse (200) :

{
    "frontFileId": "file_1NqtHo2eZvKYlo2CZPg8Xt5h",
    "backFileId": "file_1NqtHp2eZvKYlo2CRTg9Xm3k",
    "uploadedAt": "2026-07-17T12:00:00Z"
}

Téléverser le document de la société

Obligatoire exactement une fois par commerçant. Si les informations des personnes n’ont pas été renseignées, le signataire autorisé pourra téléverser ce document à l’aide du lien figurant dans l’e-mail d’onboarding, et il n’est pas nécessaire d’appeler cet endpoint.

Endpoint : POST /integrator/merchant/{merchantId}/document

Le corps de la requête est au format multipart/form-data, et non JSON.

curl -X 'POST' 'https://api.tapaya.com/integrator/merchant/018f8f2a-3b1e-7c2a-9f1a-2e6a1b7c4d3e/document' \
-H 'Authorization: REPLACE_ME' \
-F 'paymentProcessorId=5' \
-F 'documentType=4' \
-F 'frontFile=@./acme-corp-register-extract.pdf' \
-F 'submitMerchant=true'

Paramètres :

ChampTypeObligatoireDescription
paymentProcessorIdint✓Toujours 5.
documentTypeint✓Toujours 4 (Company) pour cette étape.
frontFilefile✓Le document d’immatriculation/de constitution de la société.
submitMerchantbooleanDéfinissez-le à true pour déclencher l’examen KYC du processeur une fois que tous les documents
requis ont été téléversés. Vaut false par défaut.

Corps de la réponse (200) :

{
    "frontFileId": "file_1NqtHo2eZvKYlo2CZPg8Xt5h",
    "backFileId": null,
    "uploadedAt": "2026-07-17T12:00:00Z"
}
Il manque quelque chose sur cette page ?Demandez une fonctionnalité. Nous joignons cette page pour que l’équipe ait le contexte.