API publique du CRM : personnes, entreprises, affaires, tâches et activités
L'API publique du CRM permet à votre propre système de lire et de modifier le CRM de votre organisation QrX : personnes, entreprises, affaires, pipelines, tâches, chronologie d'activité et notes. Cet article s'adresse aux développeurs. L'URL de base est https://api.qr-x.net. Chaque appel demande Authorization: Bearer <accessToken>. Pour le jeton d'accès, consultez « Démarrage rapide pour les développeurs : API publique QrX et webhooks ».
Ce qu'il vous faut
Une offre CRM de QrX qui inclut l'API publique. L'API publique fait partie de Business et Enterprise. Sans elle, un appel dont la clé a les scopes CRM est refusé avec 402, et une clé sans les scopes CRM reçoit d'abord 403
CRM_SCOPE_MISSING.Une clé API (clé de canal de vente) avec les scopes CRM cochés, voir « Créer une clé API restreinte » ci-dessous.
Les endpoints des tâches demandent aussi la fonction Tâches, et les endpoints des affaires et des pipelines demandent la fonction Affaires dans votre offre.
Créer une clé API restreinte
L'accès au CRM n'est jamais accordé par défaut. Une clé sans restriction (Accès complet) n'a pas d'accès au CRM. Vous devez restreindre la clé et cocher vous-même les scopes CRM.
Allez dans Paramètres > Entreprise > Canaux marchands et ouvrez le canal de vente dont vous voulez utiliser la clé.
Ouvrez l'onglet Paramètres. Le bloc Accès API est sous le champ Clé API. Il faut l'autorisation Gérer les canaux pour le modifier.
Activez Restreindre cette clé.
Sous CRM, cochez Lire les personnes, entreprises, affaires et pipelines du CRM (scope
crm.read) et, si votre système doit écrire, Créer et modifier les personnes, entreprises, affaires et notes du CRM (scopecrm.write).Cliquez sur Enregistrer l'accès API, vérifiez la liste sous Cesse de fonctionner et cliquez sur Restreindre la clé. Une modification peut mettre jusqu'à 30 secondes à s'appliquer.
Attention : restreindre une clé désactive aussi toutes les parties que vous ne cochez pas, pour les intégrations qui fonctionnent aujourd'hui. Si cette clé crée aussi des transactions, celles-ci continuent de fonctionner, mais les scopes retours, réception, stock, achats, exécution et tâches doivent être cochés à nouveau si la clé les utilise. Voir « Restreindre une clé API (Accès API) ».
Scopes
crm.read: tous les appels GET (pipelines, personnes, entreprises, affaires, tâches, activités).crm.write: tous les appels POST et PUT (créer et modifier des personnes, entreprises, affaires, tâches et notes, déplacer une affaire, terminer une tâche). Un scope d'écriture n'inclut pas la lecture : cochez les deux si vous avez besoin des deux.
Un scope manquant répond 403 CRM_SCOPE_MISSING.
Obtenir un jeton d'accès
Envoyez POST /api/v1/auth/token avec l'en-tête QrX-MerchantChannel-API-Key réglé sur votre clé. Utilisez le jeton d'accès de la réponse comme jeton bearer sur chaque appel CRM. N'envoyez jamais la clé API elle-même aux endpoints du CRM.
Endpoints
Tous les chemins commencent par /api/v1/crm.
Pipelines :
GET /pipelines(pipelines avec leurs étapes : id, nom, type et probabilité).Personnes :
GET /people,GET /people/{id},POST /people,PUT /people/{id}.Entreprises :
GET /companies,GET /companies/{id},POST /companies,PUT /companies/{id}.Affaires :
GET /deals,GET /deals/{id},POST /deals,PUT /deals/{id},POST /deals/{id}/move.Tâches :
GET /tasks,GET /tasks/{id},POST /tasks,PUT /tasks/{id},POST /tasks/{id}/complete.Activités :
GET /activities?recordType=person&recordId={id}. recordType vautperson,companyoudeal.Notes :
POST /notes.
Il n'y a pas d'appel de suppression. La suppression, la fusion et l'effacement de fiches se font dans PortalX.
Lire les listes
Les listes renvoient items, nextCursor et hasMore. Passez nextCursor comme cursor pour obtenir la page suivante et arrêtez-vous quand hasMore est false. limit va de 1 à 100 et vaut 40 par défaut.
Personnes : les plus récemment actives d'abord.
qcherche dans les noms, adresses e-mail et numéros de téléphone. La liste n'affiche que l'e-mail et le téléphone principaux ;GET /people/{id}renvoie tous les moyens de contact, les tags et les champs personnalisés.Entreprises : les plus récemment actives d'abord.
qcherche dans les noms et les domaines.Affaires : les plus récemment mises à jour d'abord. Filtres :
pipelineId,stageId,status(open,wonoulost) etq.Tâches : les plus récentes d'abord. Filtres :
state(openoudone),assigneeUserId,personId,companyIdetdealId.
Créer et modifier des fiches
Idempotency-Key : chaque appel de création (
POSTpour les personnes, entreprises, affaires, tâches et notes) demande l'en-têteIdempotency-Keyde 8 à 80 caractères : lettres, chiffres et. _ : -. Renvoyez la même clé pour réessayer et vous obtenez le premier résultat au lieu d'une deuxième fiche. Utilisez une nouvelle clé pour chaque nouvelle fiche. Sans clé valide, l'appel répond 400IDEMPOTENCY_KEY_REQUIRED.version : chaque fiche porte une
version. UnPUT, un déplacement d'affaire et la fin d'une tâche doivent envoyer la version que vous avez lue. Si quelqu'un a modifié la fiche entre-temps, vous obtenez 409CRM_CONFLICT: relisez la fiche et réessayez avec la nouvelle version.Personne : les champs comprennent
firstName,lastName,jobTitle,companyId,lifecycleStageId,ownerUserId,language,country,emails,phones,tagIdsetcustomFields. Une personne dont l'adresse e-mail ou le numéro de téléphone existe déjà répond 409. Créer des personnes compte dans la limite de personnes de votre offre.Entreprise :
name,domains,vatNumber,chamberNumber, champs d'adresse,industry,sizeBand,website,ownerUserId,lifecycleStageId,tagIdsetcustomFields.Affaire :
title,pipelineId,stageId,value,currency,expectedCloseOn,probability,ownerUserId,primaryPersonId,personIds,companyId,source,tagIdsetcustomFields. Sans pipeline ni étape, l'affaire va dans le pipeline par défaut. UnPUTne peut pas changer l'étape : utilisezPOST /deals/{id}/moveavectoStageId,versionet, pour une étape de perte,lostReasonId(et éventuellementlostNote) quand le pipeline a des motifs de perte.Note :
POST /notesavecrecordType(person, company ou deal),recordIdettext. Le texte est du texte brut et il est stocké comme un paragraphe.
Tâches
Créez une tâche avec un title et un assigneeUserId d'un utilisateur de votre organisation qui peut utiliser le CRM. Sans attributaire, l'appel échoue. Autres champs : description, type, priority, dueAt, timeZoneId, reminderAt, recurrence, et les liens personId, companyId et dealId. Terminer une tâche récurrente renvoie la tâche terminée dans task et la suivante dans next.
Activités et ce qui n'est jamais renvoyé
La liste des activités montre la chronologie d'une fiche. Les notes incluent leur HTML nettoyé. Les appels, conversations, commandes et retours n'apparaissent que sous forme de métadonnées et sont marqués restricted. Le contenu des messages privés, les détails de paiement et les liens d'enregistrements d'appels ne sont jamais dans l'API. L'API ne renvoie jamais non plus les affaires marchandes, les statistiques de commandes, les informations de consentement ni les motifs du score des leads.
Les fiches que vous créez via l'API n'ont pas de responsable tant que vous ne définissez pas ownerUserId.
Limites de débit
Les lectures (GET) sont limitées à 1200 requêtes par minute et les écritures (POST et PUT) à 300 requêtes par minute. Quand vous dépassez, l'API répond 429 avec un en-tête Retry-After. Attendez ce nombre de secondes avant de réessayer.
Erreurs
Les erreurs utilisent le même format de problème que le reste de l'API publique : code, detail et un requestId.
400
IDEMPOTENCY_KEY_REQUIRED: l'en-tête Idempotency-Key est absent ou a un mauvais format.401
UNAUTHORIZED: pas de jeton d'accès valide.402 : votre offre n'inclut pas l'API publique ou la fonction, ou
CRM_PLAN_LIMIT_REACHED: une limite de l'offre, comme le nombre de personnes, est atteinte. Passez à une offre supérieure dans PortalX.403
CRM_SCOPE_MISSING: la clé n'a pascrm.readoucrm.write. Cochez le scope et attendez 30 secondes.404
CRM_NOT_FOUND: la fiche n'existe pas dans votre organisation.409
CRM_CONFLICT: la version est périmée (record_changed) ou la personne existe déjà (duplicate). Relisez la fiche.422
VALIDATION_FAILED: un champ n'est pas valide, par exemple une version manquante, un curseur invalide ou une tâche sans attributaire. Ledetailindique lequel.
Événements webhook pour le CRM
QrX peut aussi prévenir votre système quand quelque chose change dans le CRM. Créez un webhook sous Paramètres > Avancé > Webhooks (voir « Webhooks et clés API dans PortalX ») et cochez les événements CRM souhaités :
crm/person_createdcrm/deal_createdcrm/deal_movedcrm/deal_woncrm/deal_lostcrm/task_completedcrm/automation_triggered: envoyé par l'action d'automatisation Envoyer un événement webhook.
Les événements CRM vont à chaque webhook actif de votre organisation qui a coché l'événement, quel que soit le canal de vente. Le contenu ne porte que des identifiants et des faits métier (par exemple personId, dealId, title, pipelineId, stageId, value, currency, ownerUserId), jamais d'adresses e-mail, de numéros de téléphone, de notes ni de texte de messages. Chaque événement a un eventId qui reste identique quand QrX le livre à nouveau, donc ignorez un événement dont vous avez déjà traité l'eventId. Les événements de plus de 24 heures ne sont pas envoyés. Une affaire gagnée ou perdue envoie aussi crm/deal_moved. Les livraisons sont signées avec X-QrX-Signature, voir l'article sur les webhooks.
Postman et OpenAPI
La collection Postman de l'API publique QrX contient les dossiers CRM Tasks et CRM Activities. La documentation de l'API est sur qrx.eu/api.
Problèmes courants
403 sur chaque appel CRM. La clé a l'accès complet ou n'a pas le scope. Restreignez la clé et cochez les scopes CRM.
402 sur chaque appel CRM. Votre offre n'inclut pas l'API publique du CRM. Elle fait partie de Business et Enterprise.
409 à la mise à jour. Relisez la fiche et envoyez sa
versionactuelle.Création de tâche refusée. Vérifiez que
assigneeUserIdappartient à votre organisation et que l'utilisateur peut utiliser le CRM.Fiches en double après une nouvelle tentative. Réutilisez la même Idempotency-Key pour une nouvelle tentative de la même fiche.
Quand contacter notre équipe d'assistance
Contactez l'assistance QrX à [email protected] quand un scope coché est toujours refusé plus d'une minute après l'enregistrement, ou pour des incidents en production. Indiquez l'ID de la requête, l'endpoint et l'heure, jamais votre clé API ni votre jeton d'accès.
