Passer au contenu principal

API publique du CRM : personnes, entreprises, affaires, tâches et activités

H
Écrit par Hayko

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.

  1. Allez dans Paramètres > Entreprise > Canaux marchands et ouvrez le canal de vente dont vous voulez utiliser la clé.

  2. 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.

  3. Activez Restreindre cette clé.

  4. 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 (scope crm.write).

  5. 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 vaut person, company ou deal.

  • 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. q cherche 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. q cherche dans les noms et les domaines.

  • Affaires : les plus récemment mises à jour d'abord. Filtres : pipelineId, stageId, status (open, won ou lost) et q.

  • Tâches : les plus récentes d'abord. Filtres : state (open ou done), assigneeUserId, personId, companyId et dealId.

Créer et modifier des fiches

  • Idempotency-Key : chaque appel de création (POST pour les personnes, entreprises, affaires, tâches et notes) demande l'en-tête Idempotency-Key de 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 400 IDEMPOTENCY_KEY_REQUIRED.

  • version : chaque fiche porte une version. Un PUT, 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 409 CRM_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, tagIds et customFields. 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, tagIds et customFields.

  • Affaire : title, pipelineId, stageId, value, currency, expectedCloseOn, probability, ownerUserId, primaryPersonId, personIds, companyId, source, tagIds et customFields. Sans pipeline ni étape, l'affaire va dans le pipeline par défaut. Un PUT ne peut pas changer l'étape : utilisez POST /deals/{id}/move avec toStageId, version et, pour une étape de perte, lostReasonId (et éventuellement lostNote) quand le pipeline a des motifs de perte.

  • Note : POST /notes avec recordType (person, company ou deal), recordId et text. 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 pas crm.read ou crm.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. Le detail indique 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_created

  • crm/deal_created

  • crm/deal_moved

  • crm/deal_won

  • crm/deal_lost

  • crm/task_completed

  • crm/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 version actuelle.

  • Création de tâche refusée. Vérifiez que assigneeUserId appartient à 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.

Avez-vous trouvé la réponse à votre question ?