Environment variables
Découvrir les capacités prises en charge
Lisez les options actuelles du client avecGET /v3/customers/{customerId}/capabilities/supported :
List supported capabilities
directions, à la method et au accountType prévus. Continuez uniquement lorsque availability est available ou beta et eligibility.eligible est true. Si des institutions sont renvoyées, sélectionnez uniquement un ID de cette réponse.
Chaque entrée d’institution inclut un logoUrl et un indicateur isDefault. Utilisez logoUrl pour afficher le logo de la banque dans une interface de sélection de banque, et affichez votre propre icône de banque générique lorsqu’il vaut null. isDefault s’applique uniquement à ce client et à cette capacité, pas à l’institution de manière globale. GET /v3/institutions renvoie le même logoUrl nullable. Les ID d’institution sont opaques : gérez donc les nouveaux ID sans modifier votre code.
Institution entry
data[].id sélectionné en tant que CAPABILITY_ID. Ne copiez jamais un ID de capacité d’un autre client ou environnement.
Types de comptes mutualisés vs nominatifs
Les capacités bancaires existent en deux variantes, encodées dans le champaccountType et le suffixe de l’ID de capacité (par exemple ach_pooled, wire_named) :
pooled: compte bancaire Swipelux partagé. Chaque encaissement utilise une référence unique pour acheminer les fonds. Choisissez ceci pour les transferts ponctuels.named: coordonnées bancaires dédiées au client (IBAN virtuel, compte ACH dédié). Réutilisables et partageables avec n’importe quel payeur. Requis pour les comptes bancaires émis.
pooled. Utilisez named uniquement lorsque le client a besoin de coordonnées bancaires réutilisables. Vérifiez la réponse supported pour savoir quelles variantes sont disponibles.
Pour recevoir des dépôts SWIFT ou émettre des coordonnées bancaires SWIFT, utilisez swift_named. swift_pooled ne prend en charge que les paiements, vérifiez donc les directions de chaque option dans la réponse de capacité prise en charge. Un compte SWIFT named renvoie des coordonnées de réception réutilisables, notamment le BIC de la banque, une référence lorsqu’elle est requise et l’adresse du bénéficiaire lorsque la banque la fournit.
Pour les comptes ACH, Wire et SWIFT émis, vous pouvez choisir une banque précise avec institution et enregistrer la demande de compte avant que la banque n’approuve le client. Consultez Émettre un compte bancaire.
Demander la capacité
Demandez l’option sélectionnée avecPOST /v3/customers/{customerId}/capabilities/{capabilityId} :
Request capability
institutions explicite uniquement lorsque vous devez sélectionner parmi les IDs renvoyés par la réponse de capacité prise en charge.
Stockez data.status en tant que CAPABILITY_STATUS, data.accountProvisioning en tant que ACCOUNT_PROVISIONING_STATUS, data.openTaskIds en tant que OPEN_TASK_IDS, et chaque data.applications[].id dans APPLICATION_IDS.
Applications partagées par banque
Pour les capacités bancaires named, chaque client dispose d’un dossier d’application par banque. Les capacités pooled et de plateforme utilisent des dossiers sans banque. Swipelux partage un dossier entre toutes les capacités compatibles que vous demandez :- Une seule approbation peut couvrir plusieurs capacités. Par exemple, un dossier approuvé auprès d’une banque peut rendre
readyà la fois une capacité ACH et une capacité Wire. - Une demande ultérieure qui correspond à un dossier existant le réutilise. Swipelux n’ouvre pas de deuxième application et n’ajoute aucune tâche en double.
- Les dossiers auprès de banques différentes sont indépendants. Un rejet auprès d’une banque n’affecte pas un dossier auprès d’une autre banque.
201signifie que la demande a ouvert un nouveau dossier d’application.200signifie que la demande a abouti à un dossier d’application que le client possédait déjà, par exemple une demande répétée pour une capacité bancaire que le client détient déjà, ou une demande pour une capacité annulée. Une demande répétée pourcardoustablecoin_transfersrenvoie toujours409 capability_already_exists.selectedApplicationIdest un champ de premier niveau à côté dedataqui contient l’ID du dossier que la demande a sélectionné ou ouvert. Swipelux l’omet lorsque la demande n’a sélectionné aucun dossier. Une relecture idempotente renvoie la même valeur.
Response (abbreviated)
institutions pour sélectionner le même dossier, ou envoyez un seul ID d’institution pour cibler cette banque. Une banque qui a définitivement rejeté le client est ignorée. Lorsque vous ne nommez que cette banque, ou que toutes les banques éligibles ont rejeté le client, la demande renvoie 409 capability_terminally_rejected. Pour essayer une autre banque après un rejet, demandez à nouveau la capacité avec l’ID d’institution de cette banque.
Le statut d’une capacité reflète l’ensemble des dossiers associés du client. Pour une capacité named, un seul dossier ready dont l’approbation la couvre suffit à la rendre ready, quel que soit le statut signalé par les autres banques. Une capacité pooled attend également sa vérification de méthode, signalée dans probes sur la liste des applications du client.
Lister les applications du client
Listez tous les dossiers d’application du client avecGET /v3/customers/{customerId}/applications. Les résultats sont paginés avec nextCursor et hasMore, et acceptent updatedAfter :
List applications
applications[] d’une capacité, ainsi que :
scope:namedpour un dossier auprès d’une seule banque,provider_pooledouplatformpour les dossiers sans banque, ounullpour un dossier historique non classé.institutionest absent pour les dossiersprovider_pooledetplatform.requestedScope[]: les clés de capacité demandées pour le dossier, chacune avec son premierrequestedAt. Les entrées ne sont jamais supprimées.coverage[]: les clés de capacité couvertes par l’approbation du dossier, chacune avecgrantedAtetsource. La couverture enregistre une portée, pas une autorisation. Lisez la capacité pour connaître son statut actuel.probes[]: les vérifications de méthode pour les clés de capacité pooled couvertes par le dossier, chacune aveccapabilityKey,statusetreason. Les clés named ne nécessitent jamais de vérification.generation,predecessorApplicationIdetsupersededByApplicationId: liens de succession. LorsquesupersededByApplicationIdest défini, le dossier a été remplacé. Suivez cet ID jusqu’au dossier actuel. La listeapplications[]d’une capacité ne contient que les dossiers actuels, donc un dossier remplacé n’apparaît que dans cette liste.
Response (abbreviated)
Compléter les tâches actuelles
Listez les tâches avecGET /v3/customers/{customerId}/tasks, sélectionnez les IDs de OPEN_TASK_IDS, puis lisez chaque tâche actuelle avec GET /v3/customers/{customerId}/tasks/{taskId} :
List open tasks
data.revision et les dernières data.requirements. Récupérez à nouveau la tâche juste avant la soumission si l’un ou l’autre peut avoir changé.
Preuves de profil réutilisées
Pour les tâches d’intake d’application qui acceptent la soumission directe via l’API, Swipelux réutilise les informations que le client a déjà fournies. Lorsqu’une telle tâche est créée ou réconciliée, Swipelux vérifie le profil du client et les documents que le client a lui-même téléversés. Les exigences éligibles déjà étayées par une valeur de profil ou un document utilisable passent àin_review au lieu de rester actionnables. Les mises à jour du profil et les nouveaux téléversements de documents déclenchent la même vérification pour les tâches existantes.
Seules les valeurs manquantes ou incompatibles restent actionnables. La réutilisation n’approuve pas les preuves : Swipelux les examine toujours. Les demandes de correction explicites et les exigences déjà répondues restent actionnables. Les documents des propriétaires et des parties liées ne sont pas réutilisés, et les exigences collectées uniquement via une session hébergée conservent leur flux habituel.
Afficher les exigences
Construisez les formulaires à partir des métadonnées renvoyées par chaque exigence plutôt qu’à partir des clés d’exigence. Une exigence peut inclure untitle court facultatif, et chaque request inclut un prompt à afficher sous le titre.
Les exigences avec request.type: "profile" identifient le champ de profil avec profilePointer et ajoutent des métadonnées de saisie :
allowedValues: les valeurs autorisées pour un champ scalaire, ou pour chaque élément d’un champ de type tableau. Soumettez ces valeurs, pas des libellés d’affichage traduits.valueSchema: un document JSON Schema Draft 7 autonome qui décrit la forme de la saisie, les propriétés imbriquées, les champs obligatoires et les contraintes structurelles. Les enums sur les objets apparaissent sur la propriété concernée, par exemplevalueSchema.items.properties.type.enumpour les identifiants fiscaux. Swipelux applique toujours une validation inter-champs et de revue après la soumission, donc une valeur conforme au schéma peut tout de même être rejetée.valueType: "country", ouitemValueType: "country"pour les tableaux : le champ accepte des codes ISO 3166-1 alpha-2 en majuscules. Les propriétés de pays imbriquées dansvalueSchemautilisentformat: "iso-3166-1-alpha-2". Utilisez une liste de pays standard pour les libellés localisés.
Requirement
valueSchema et allowedValues. Affichez-les à partir de prompt et valueType.
Chaque tâche ouverte inclut un horodatage dueAt. Lorsque Swipelux crée une tâche sans date d’échéance explicite, dueAt prend par défaut exactement 31 jours après le createdAt de la tâche. Traitez dueAt comme informatif : vous ne pouvez pas le définir via l’API et il ne déclenche aucune transition automatique du cycle de vie. Seul le champ distinct deadline, lorsqu’il est présent, provoque une transition automatique.
Actions hébergées
Dans la réponse détaillée de la tâche, chaque entrée deverificationSessions et tosSessions inclut un objet action. Les réponses de liste de tâches n’incluent pas ces liens d’action. Enregistrez l’id de chaque session, puis lisez action.kind avant d’orienter le client ; ne déduisez pas la disponibilité du lien à partir du status de la session.
action.kind: "available"inclutaction.urletaction.expiresAt(actuellement toujoursnull). Enregistrezaction.url, envoyez-y le client, puis relisez la tâche. Les champsurletexpiresAtau niveau de la session contiennent les mêmes valeurs.action.kind: "unavailable"signifie qu’aucun lien ne doit être présenté. Les champsurletexpiresAtau niveau de la session sont absents. Lestatusd’une session ne détermine pas à lui seul le type d’action reçu.
Verification session
action_required pour cette raison porte reviewFeedback.code: hosted_profile_direct_submission_required. Recueillez cette valeur auprès du client et soumettez-la comme réponse API.
Téléverser des documents
Lorsqu’une exigence demande un document, téléversez-le avecPOST /v3/customers/{customerId}/documents :
Upload document
data.id renvoyé en tant que DOCUMENT_ID avant de soumettre la réponse qui y fait référence.
Pour récupérer un fichier stocké ultérieurement, appelez GET /v3/customers/{customerId}/documents/{documentId}/download. Swipelux renvoie une url qui télécharge le fichier en pièce jointe et expire après une heure. Les documents archivés renvoient 404.
Réponses API
Soumettez un ensemble complet de réponses pour la révision actuelle avecPOST /v3/customers/{customerId}/tasks/{taskId}/submissions :
Submit task answers
Prérequis de bénéficiaire effectif pour les entreprises
Demander une capacité professionnelle qui nécessite des preuves de bénéficiaire effectif réussit même lorsque le client n’a pas encore de propriétaire qualifié. La capacité est créée enrestricted avec statusReason.code: tasks_due, et la tâche d’intake professionnelle demande les faits de propriété manquants, y compris la structure de propriété.
La même tâche porte une exigence resource_reference dont la demande inclut qualification: "beneficial_owner" :
Beneficial owner requirement
person active du même client avec un pourcentage de propriété fourni d’au moins 25, ou avec ownership.declared: true sans pourcentage.
L’exigence est dérivée de la liste actuelle des parties liées, vous n’y répondez donc généralement pas directement :
- Créer ou mettre à jour une partie liée qualifiée satisfait l’exigence lors de la même réévaluation et ouvre le travail de profil et de documents propre à ce propriétaire. Consultez Ajouter des parties liées professionnelles.
- Vous pouvez aussi référencer explicitement une partie qualifiée avec une réponse
resource_referenceportant sonrelatedPartyId. - L’exigence reste listée dans la tâche actuelle après avoir été satisfaite. Lorsqu’aucune autre obligation ne reste ouverte, la tâche devient
satisfied. - Archiver la dernière partie qualifiée, ou supprimer les faits qui la qualifiaient, rouvre l’exigence, même après que la tâche est passée à
satisfied.
Continuer lorsque la capacité est prête
Lisez à nouveau la capacité avecGET /v3/customers/{customerId}/capabilities/{capabilityId} :
Refetch capability
status de la capacité indique si le droit est approuvé. Pour une capacité qui émet un compte, accountProvisioning indique séparément si ce compte est not_started, in_progress, issued ou failed ; une capacité qui n’émet pas de compte renvoie not_applicable.
Tant que la capacité est pending, deux des valeurs de statusReason.code qu’elle peut indiquer montrent si un examen est en cours. preparing_submission signifie que Swipelux prépare encore un dossier pour soumission et qu’aucun examen n’est en cours, même si le dossier d’une autre banque est rejected ou nécessite une action. review_in_progress signifie qu’un examen est en cours, par exemple lorsqu’un dossier est in_review ou qu’une vérification hébergée est ouverte. Les deux utilisent resolution: wait. Un passage d’un code à l’autre conserve le statut pending, donc aucun événement capability.status_changed n’est envoyé. Lisez la capacité pour connaître le code actuel.
Continuez uniquement lorsque le statut de capacité actuel autorise le compte, le devis ou le transfert que vous prévoyez de créer. Lorsque le flux nécessite un compte émis, attendez également que accountProvisioning devienne issued.
Ensuite, choisissez le parcours correspondant dans Flux courants.