CRM Public API: personen, bedrijven, deals, taken en activiteiten
Met de CRM Public API kan je eigen systeem het CRM van je QrX-organisatie lezen en wijzigen: personen, bedrijven, deals, pijplijnen, taken, de tijdlijn met activiteit en notities. Dit artikel is voor ontwikkelaars. De basis-URL is https://api.qr-x.net. Elke aanroep vereist Authorization: Bearer <accessToken>. Voor het toegangstoken, zie "Snelstart voor ontwikkelaars: QrX Public API en webhooks".
Wat je nodig hebt
Een QrX CRM-abonnement dat de publieke API bevat. De publieke API maakt deel uit van Business en Enterprise. Zonder dat wordt een aanroep met een sleutel met de CRM-scopes geweigerd met 402, en een sleutel zonder de CRM-scopes krijgt eerst 403
CRM_SCOPE_MISSING.Een API-sleutel (sleutel van een verkoopkanaal) waarbij de CRM-scopes zijn aangevinkt, zie "Een API-sleutel met scopes aanmaken" hieronder.
Voor de taken-endpoints is ook de functie Taken nodig, en voor de endpoints voor deals en pijplijnen de functie Deals in je abonnement.
Een API-sleutel met scopes aanmaken
CRM-toegang wordt nooit standaard verleend. Een sleutel zonder beperking (Volledige toegang) heeft geen CRM-toegang. Je moet de sleutel beperken en de CRM-scopes zelf aanvinken.
Ga naar Instellingen > Zakelijk > Handelaarskanalen en open het verkoopkanaal waarvan je de sleutel wilt gebruiken.
Open het tabblad Instellingen. Het blok API-toegang staat onder het veld API-sleutel. Je hebt het recht Kanalen beheren nodig om het te wijzigen.
Zet Deze sleutel beperken aan.
Vink onder CRM CRM-personen, bedrijven, deals en pijplijnen lezen aan (scope
crm.read) en, als je systeem moet schrijven, CRM-personen, bedrijven, deals en notities aanmaken en wijzigen (scopecrm.write).Klik op API-toegang opslaan, controleer de lijst onder Stopt met werken en klik op De sleutel beperken. Een wijziging kan tot 30 seconden duren voordat ze wordt toegepast.
Let op: een sleutel beperken schakelt ook elk onderdeel uit dat je niet aanvinkt, voor integraties die nu werken. Als deze sleutel ook transacties aanmaakt, blijven die werken, maar de scopes voor retouren, inkomend, voorraad, inkoop, fulfilment en taken moeten opnieuw worden aangevinkt als de sleutel ze gebruikt. Zie "Een API-sleutel beperken (API-toegang)".
Scopes
crm.read: alle GET-aanroepen (pijplijnen, personen, bedrijven, deals, taken, activiteiten).crm.write: alle POST- en PUT-aanroepen (personen, bedrijven, deals, taken en notities aanmaken en wijzigen, een deal verplaatsen, een taak afronden). Een schrijfscope omvat niet het lezen: vink beide aan als je beide nodig hebt.
Een ontbrekende scope antwoordt met 403 CRM_SCOPE_MISSING.
Een toegangstoken ophalen
Stuur POST /api/v1/auth/token met de header QrX-MerchantChannel-API-Key ingesteld op je sleutel. Gebruik het toegangstoken uit het antwoord als bearer-token bij elke CRM-aanroep. Stuur de API-sleutel zelf nooit naar de CRM-endpoints.
Endpoints
Alle paden beginnen met /api/v1/crm.
Pijplijnen:
GET /pipelines(pijplijnen met hun fases: id, naam, soort en kans).Personen:
GET /people,GET /people/{id},POST /people,PUT /people/{id}.Bedrijven:
GET /companies,GET /companies/{id},POST /companies,PUT /companies/{id}.Deals:
GET /deals,GET /deals/{id},POST /deals,PUT /deals/{id},POST /deals/{id}/move.Taken:
GET /tasks,GET /tasks/{id},POST /tasks,PUT /tasks/{id},POST /tasks/{id}/complete.Activiteiten:
GET /activities?recordType=person&recordId={id}. recordType isperson,companyofdeal.Notities:
POST /notes.
Er is geen verwijderaanroep. Records verwijderen, samenvoegen en wissen gebeurt in PortalX.
Lijsten lezen
Lijsten geven items, nextCursor en hasMore terug. Geef nextCursor mee als cursor voor de volgende pagina en stop wanneer hasMore false is. limit is 1 tot 100 en is standaard 40.
Personen: de meest recent actieve eerst.
qzoekt in namen, e-mailadressen en telefoonnummers. De lijst toont alleen het primaire e-mailadres en de primaire telefoon.GET /people/{id}geeft alle contactpunten, tags en aangepaste velden terug.Bedrijven: de meest recent actieve eerst.
qzoekt in namen en domeinen.Deals: de meest recent bijgewerkte eerst. Filters:
pipelineId,stageId,status(open,wonoflost) enq.Taken: de nieuwste eerst. Filters:
state(openofdone),assigneeUserId,personId,companyIdendealId.
Records aanmaken en wijzigen
Idempotency-Key: elke aanroep om iets aan te maken (
POSTvoor personen, bedrijven, deals, taken en notities) vereist de headerIdempotency-Keymet 8 tot 80 tekens: letters, cijfers en. _ : -. Stuur dezelfde sleutel opnieuw om het nog eens te proberen en je krijgt het eerste resultaat terug in plaats van een tweede record. Gebruik een nieuwe sleutel voor elk nieuw record. Zonder geldige sleutel antwoordt de aanroep met 400IDEMPOTENCY_KEY_REQUIRED.version: elk record heeft een
version. EenPUT, het verplaatsen van een deal en het afronden van een taak moeten de version meesturen die je hebt gelezen. Als iemand het record ondertussen heeft gewijzigd, krijg je 409CRM_CONFLICT: lees het record opnieuw en probeer het met de nieuwe version.Persoon: velden zijn onder meer
firstName,lastName,jobTitle,companyId,lifecycleStageId,ownerUserId,language,country,emails,phones,tagIdsencustomFields. Een persoon waarvan het e-mailadres of telefoonnummer al bestaat, antwoordt met 409. Personen aanmaken telt mee voor de limiet voor personen van je abonnement.Bedrijf:
name,domains,vatNumber,chamberNumber, adresvelden,industry,sizeBand,website,ownerUserId,lifecycleStageId,tagIdsencustomFields.Deal:
title,pipelineId,stageId,value,currency,expectedCloseOn,probability,ownerUserId,primaryPersonId,personIds,companyId,source,tagIdsencustomFields. Zonder pijplijn en fase komt de deal in de standaardpijplijn. EenPUTkan de fase niet wijzigen: gebruikPOST /deals/{id}/movemettoStageId,versionen, voor een fase Verloren,lostReasonId(en eventueellostNote) als de pijplijn redenen van verlies heeft.Notitie:
POST /notesmetrecordType(person, company of deal),recordIdentext. De tekst is platte tekst en wordt opgeslagen als een alinea.
Taken
Maak een taak aan met een title en een assigneeUserId van een gebruiker in je organisatie die het CRM kan gebruiken. Zonder toegewezen gebruiker mislukt de aanroep. Andere velden: description, type, priority, dueAt, timeZoneId, reminderAt, recurrence, en de koppelingen personId, companyId en dealId. Het afronden van een terugkerende taak geeft de afgeronde taak terug in task en de volgende in next.
Activiteiten en wat nooit wordt teruggegeven
De lijst met activiteiten toont de tijdlijn van één record. Notities bevatten hun gezuiverde HTML. Gesprekken, conversaties, bestellingen en retouren verschijnen alleen als metagegevens en zijn gemarkeerd als restricted. Privéberichten, betaalgegevens en links naar gespreksopnames zitten nooit in de API. De API geeft ook nooit deals van merchants, bestelstatistieken, toestemmingsgegevens of redenen van de leadscore terug.
Records die je via de API aanmaakt, hebben geen eigenaar tot je ownerUserId instelt.
Limieten voor aanvragen
Lezen (GET) is beperkt tot 1200 aanvragen per minuut en schrijven (POST en PUT) tot 300 aanvragen per minuut. Als je daaroverheen gaat, antwoordt de API met 429 en een header Retry-After. Wacht zoveel seconden voordat je het opnieuw probeert.
Fouten
Fouten gebruiken hetzelfde probleemformaat als de rest van de Public API: code, detail en een requestId.
400
IDEMPOTENCY_KEY_REQUIRED: de header Idempotency-Key ontbreekt of heeft de verkeerde vorm.401
UNAUTHORIZED: geen geldig toegangstoken.402: je abonnement bevat de publieke API of de functie niet, of
CRM_PLAN_LIMIT_REACHED: een abonnementslimiet zoals het aantal personen is bereikt. Upgrade het abonnement in PortalX.403
CRM_SCOPE_MISSING: de sleutel heeftcrm.readofcrm.writeniet. Vink de scope aan en wacht 30 seconden.404
CRM_NOT_FOUND: het record bestaat niet in je organisatie.409
CRM_CONFLICT: de version is verouderd (record_changed) of de persoon bestaat al (duplicate). Lees het record opnieuw.422
VALIDATION_FAILED: een veld is ongeldig, bijvoorbeeld een ontbrekende version, een ongeldige cursor of een taak zonder toegewezen gebruiker. Dedetailzegt welke.
Webhook-gebeurtenissen voor het CRM
QrX kan je systeem ook laten weten wanneer er iets verandert in het CRM. Maak een webhook aan onder Instellingen > Geavanceerd > Webhooks (zie "Webhooks en API-sleutels in PortalX") en vink de CRM-gebeurtenissen aan die je wilt:
crm/person_createdcrm/deal_createdcrm/deal_movedcrm/deal_woncrm/deal_lostcrm/task_completedcrm/automation_triggered: verstuurd door de automatiseringsactie Een webhook-gebeurtenis versturen.
CRM-gebeurtenissen gaan naar elke actieve webhook van je organisatie waarbij de gebeurtenis is aangevinkt, ongeacht het verkoopkanaal. De payload bevat alleen id's en zakelijke feiten (bijvoorbeeld personId, dealId, title, pipelineId, stageId, value, currency, ownerUserId), nooit e-mailadressen, telefoonnummers, notities of berichtteksten. Elke gebeurtenis heeft een eventId die hetzelfde blijft wanneer QrX hem opnieuw aflevert, dus negeer een gebeurtenis waarvan je de eventId al hebt verwerkt. Gebeurtenissen ouder dan 24 uur worden niet verstuurd. Een deal die wordt gewonnen of verloren, stuurt ook crm/deal_moved. Leveringen zijn ondertekend met X-QrX-Signature, zie het artikel over webhooks.
Postman en OpenAPI
De Postman-collectie van de QrX Public API heeft de mappen CRM-taken en CRM-activiteiten. De API-documentatie staat op qrx.eu/api.
Veelvoorkomende problemen
403 bij elke CRM-aanroep. De sleutel heeft volledige toegang of mist de scope. Beperk de sleutel en vink de CRM-scopes aan.
402 bij elke CRM-aanroep. Je abonnement bevat de publieke CRM-API niet. Hij maakt deel uit van Business en Enterprise.
409 bij bijwerken. Lees het record opnieuw en stuur de actuele
versionmee.Taak aanmaken geweigerd. Controleer of
assigneeUserIdbij je organisatie hoort en of de gebruiker het CRM kan gebruiken.Dubbele records na een nieuwe poging. Gebruik dezelfde Idempotency-Key opnieuw voor een nieuwe poging van hetzelfde record.
Wanneer je ons supportteam moet contacteren
Neem contact op met QrX support via [email protected] als een aangevinkte scope meer dan een minuut na het opslaan nog steeds wordt geweigerd, of bij incidenten in productie. Vermeld de request-ID, het endpoint en het tijdstip, nooit je API-sleutel of toegangstoken.
