CRM Public API: Personen, Unternehmen, Deals, Aufgaben und Aktivitäten
Mit der CRM Public API kann Ihr eigenes System das CRM Ihrer QrX-Organisation lesen und ändern: Personen, Unternehmen, Deals, Pipelines, Aufgaben, die Aktivitätszeitleiste und Notizen. Dieser Artikel ist für Entwickler. Die Basis-URL lautet https://api.qr-x.net. Jeder Aufruf braucht Authorization: Bearer <accessToken>. Das Zugriffstoken finden Sie im Artikel „Entwickler-Schnellstart: QrX Public API und Webhooks“.
Was Sie brauchen
Einen QrX CRM-Tarif, der die öffentliche API enthält. Die öffentliche API gehört zu Business und Enterprise. Ohne sie wird ein Aufruf mit einem Schlüssel, der die CRM-Scopes hat, mit 402 abgelehnt, und ein Schlüssel ohne die CRM-Scopes erhält zuerst 403
CRM_SCOPE_MISSING.Einen API-Schlüssel (Schlüssel eines Vertriebskanals) mit angehakten CRM-Scopes, siehe „Einen API-Schlüssel mit Scopes erstellen“ unten.
Die Aufgaben-Endpunkte brauchen außerdem die Funktion Aufgaben, und die Endpunkte für Deals und Pipelines brauchen die Funktion Deals in Ihrem Tarif.
Einen API-Schlüssel mit Scopes erstellen
CRM-Zugriff wird nie standardmäßig gewährt. Ein Schlüssel ohne Einschränkung (Vollzugriff) hat keinen CRM-Zugriff. Sie müssen den Schlüssel einschränken und die CRM-Scopes selbst anhaken.
Gehen Sie zu Einstellungen > Geschäft > Händlerkanäle und öffnen Sie den Vertriebskanal, dessen Schlüssel Sie verwenden möchten.
Öffnen Sie den Tab Einstellungen. Der Block API-Zugriff steht unter dem Feld API-Schlüssel. Zum Ändern brauchen Sie die Berechtigung Kanäle verwalten.
Schalten Sie Diesen Schlüssel einschränken ein.
Haken Sie unter CRM CRM-Personen, Unternehmen, Deals und Pipelines lesen an (Scope
crm.read) und, wenn Ihr System schreiben muss, CRM-Personen, Unternehmen, Deals und Notizen erstellen und ändern (Scopecrm.write).Klicken Sie auf API-Zugriff speichern, prüfen Sie die Liste unter Funktioniert nicht mehr und klicken Sie auf Schlüssel einschränken. Eine Änderung kann bis zu 30 Sekunden brauchen, bis sie gilt.
Vorsicht: Das Einschränken eines Schlüssels schaltet auch jeden Teil ab, den Sie nicht anhaken, bei Integrationen, die heute funktionieren. Erstellt dieser Schlüssel auch Transaktionen, funktionieren diese weiter, aber die Scopes für Retouren, Wareneingang, Bestand, Einkauf, Fulfilment und Aufgaben müssen erneut angehakt werden, wenn der Schlüssel sie nutzt. Siehe „Einen API-Schlüssel einschränken (API-Zugriff)“.
Scopes
crm.read: alle GET-Aufrufe (Pipelines, Personen, Unternehmen, Deals, Aufgaben, Aktivitäten).crm.write: alle POST- und PUT-Aufrufe (Personen, Unternehmen, Deals, Aufgaben und Notizen erstellen und ändern, einen Deal verschieben, eine Aufgabe abschließen). Ein Schreib-Scope schließt das Lesen nicht ein: Haken Sie beide an, wenn Sie beides brauchen.
Ein fehlender Scope antwortet mit 403 CRM_SCOPE_MISSING.
Ein Zugriffstoken holen
Senden Sie POST /api/v1/auth/token mit dem Header QrX-MerchantChannel-API-Key, der auf Ihren Schlüssel gesetzt ist. Verwenden Sie das Zugriffstoken aus der Antwort als Bearer-Token bei jedem CRM-Aufruf. Senden Sie den API-Schlüssel selbst nie an die CRM-Endpunkte.
Endpunkte
Alle Pfade beginnen mit /api/v1/crm.
Pipelines:
GET /pipelines(Pipelines mit ihren Phasen: id, name, kind und probability).Personen:
GET /people,GET /people/{id},POST /people,PUT /people/{id}.Unternehmen:
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.Aufgaben:
GET /tasks,GET /tasks/{id},POST /tasks,PUT /tasks/{id},POST /tasks/{id}/complete.Aktivitäten:
GET /activities?recordType=person&recordId={id}. recordType istperson,companyoderdeal.Notizen:
POST /notes.
Es gibt keinen Lösch-Aufruf. Datensätze löschen, zusammenführen und endgültig löschen Sie im PortalX.
Listen lesen
Listen liefern items, nextCursor und hasMore. Übergeben Sie nextCursor als cursor, um die nächste Seite zu holen, und hören Sie auf, wenn hasMore false ist. limit ist 1 bis 100 und standardmäßig 40.
Personen: zuletzt aktive zuerst.
qdurchsucht Namen, E-Mail-Adressen und Telefonnummern. Die Liste zeigt nur die primäre E-Mail und das primäre Telefon.GET /people/{id}liefert alle Kontaktpunkte, Tags und benutzerdefinierten Felder.Unternehmen: zuletzt aktive zuerst.
qdurchsucht Namen und Domains.Deals: zuletzt aktualisierte zuerst. Filter:
pipelineId,stageId,status(open,wonoderlost) undq.Aufgaben: neueste zuerst. Filter:
state(openoderdone),assigneeUserId,personId,companyIdunddealId.
Datensätze erstellen und ändern
Idempotency-Key: Jeder Erstellen-Aufruf (
POSTfür Personen, Unternehmen, Deals, Aufgaben und Notizen) braucht den HeaderIdempotency-Keymit 8 bis 80 Zeichen: Buchstaben, Ziffern und. _ : -. Senden Sie denselben Schlüssel erneut, um es zu wiederholen, und Sie erhalten das erste Ergebnis statt eines zweiten Datensatzes. Verwenden Sie für jeden neuen Datensatz einen neuen Schlüssel. Ohne gültigen Schlüssel antwortet der Aufruf mit 400IDEMPOTENCY_KEY_REQUIRED.version: Jeder Datensatz trägt eine
version. EinPUT, das Verschieben eines Deals und der Abschluss einer Aufgabe müssen die Version senden, die Sie gelesen haben. Hat jemand den Datensatz inzwischen geändert, erhalten Sie 409CRM_CONFLICT: Lesen Sie den Datensatz erneut und wiederholen Sie es mit der neuen Version.Person: Felder sind unter anderem
firstName,lastName,jobTitle,companyId,lifecycleStageId,ownerUserId,language,country,emails,phones,tagIdsundcustomFields. Eine Person, deren E-Mail-Adresse oder Telefonnummer schon existiert, antwortet mit 409. Das Erstellen von Personen zählt auf das Personenlimit Ihres Tarifs.Unternehmen:
name,domains,vatNumber,chamberNumber, Adressfelder,industry,sizeBand,website,ownerUserId,lifecycleStageId,tagIdsundcustomFields.Deal:
title,pipelineId,stageId,value,currency,expectedCloseOn,probability,ownerUserId,primaryPersonId,personIds,companyId,source,tagIdsundcustomFields. Ohne Pipeline und Phase kommt der Deal in die Standard-Pipeline. EinPUTkann die Phase nicht ändern: Nutzen SiePOST /deals/{id}/movemittoStageId,versionund, bei einer Verlustphase,lostReasonId(und optionallostNote), wenn die Pipeline Verlustgründe hat.Notiz:
POST /notesmitrecordType(person, company oder deal),recordIdundtext. Der Text ist reiner Text und wird als Absatz gespeichert.
Aufgaben
Legen Sie eine Aufgabe mit einem title und einer assigneeUserId eines Benutzers Ihrer Organisation an, der das CRM nutzen darf. Ohne Bearbeiter schlägt der Aufruf fehl. Weitere Felder: description, type, priority, dueAt, timeZoneId, reminderAt, recurrence und die Verknüpfungen personId, companyId und dealId. Der Abschluss einer wiederkehrenden Aufgabe liefert die erledigte Aufgabe in task und die nächste in next.
Aktivitäten und was nie zurückgegeben wird
Die Aktivitätsliste zeigt die Zeitleiste eines Datensatzes. Notizen enthalten ihr bereinigtes HTML. Anrufe, Konversationen, Bestellungen und Retouren erscheinen nur als Metadaten und sind mit restricted markiert. Private Nachrichteninhalte, Zahlungsdetails und Links zu Anrufaufzeichnungen sind nie in der API. Die API liefert außerdem nie Händler-Deals, Bestellstatistiken, Einwilligungsangaben oder Gründe für den Lead-Score.
Datensätze, die Sie über die API erstellen, haben keinen Inhaber, bis Sie ownerUserId setzen.
Ratenlimits
Lesen (GET) ist auf 1200 Anfragen pro Minute begrenzt und Schreiben (POST und PUT) auf 300 Anfragen pro Minute. Wenn Sie darüber liegen, antwortet die API mit 429 und einem Header Retry-After. Warten Sie so viele Sekunden, bevor Sie es erneut versuchen.
Fehler
Fehler nutzen dasselbe Problemformat wie der Rest der Public API: code, detail und eine requestId.
400
IDEMPOTENCY_KEY_REQUIRED: Der Header Idempotency-Key fehlt oder hat die falsche Form.401
UNAUTHORIZED: kein gültiges Zugriffstoken.402: Ihr Tarif enthält die öffentliche API oder die Funktion nicht, oder
CRM_PLAN_LIMIT_REACHED: Ein Tariflimit wie die Zahl der Personen ist erreicht. Wechseln Sie den Tarif im PortalX.403
CRM_SCOPE_MISSING: Der Schlüssel hatcrm.readodercrm.writenicht. Haken Sie den Scope an und warten Sie 30 Sekunden.404
CRM_NOT_FOUND: Der Datensatz existiert in Ihrer Organisation nicht.409
CRM_CONFLICT: Die Version ist veraltet (record_changed) oder die Person existiert schon (duplicate). Lesen Sie den Datensatz erneut.422
VALIDATION_FAILED: Ein Feld ist ungültig, zum Beispiel eine fehlende Version, ein ungültiger Cursor oder eine Aufgabe ohne Bearbeiter. Dasdetailsagt, welches.
Webhook-Ereignisse für das CRM
QrX kann Ihrem System auch mitteilen, wenn sich im CRM etwas ändert. Legen Sie einen Webhook unter Einstellungen > Erweitert > Webhooks an (siehe „Webhooks und API-Schlüssel im PortalX“) und haken Sie die gewünschten CRM-Ereignisse an:
crm/person_createdcrm/deal_createdcrm/deal_movedcrm/deal_woncrm/deal_lostcrm/task_completedcrm/automation_triggered: gesendet von der Automatisierungsaktion Ein Webhook-Ereignis senden.
CRM-Ereignisse gehen an jeden aktiven Webhook Ihrer Organisation, der das Ereignis angehakt hat, unabhängig vom Vertriebskanal. Die Nutzdaten enthalten nur IDs und geschäftliche Fakten (zum Beispiel personId, dealId, title, pipelineId, stageId, value, currency, ownerUserId), nie E-Mail-Adressen, Telefonnummern, Notizen oder Nachrichtentexte. Jedes Ereignis hat eine eventId, die gleich bleibt, wenn QrX es erneut zustellt. Verwerfen Sie also ein Ereignis, dessen eventId Sie schon verarbeitet haben. Ereignisse, die älter als 24 Stunden sind, werden nicht gesendet. Ein gewonnener oder verlorener Deal sendet außerdem crm/deal_moved. Zustellungen sind mit X-QrX-Signature signiert, siehe den Webhook-Artikel.
Postman und OpenAPI
Die Postman-Sammlung der QrX Public API hat die Ordner CRM Tasks und CRM Activities. Die API-Dokumentation finden Sie unter qrx.eu/api.
Häufige Probleme
403 bei jedem CRM-Aufruf. Der Schlüssel hat Vollzugriff oder es fehlt der Scope. Schränken Sie den Schlüssel ein und haken Sie die CRM-Scopes an.
402 bei jedem CRM-Aufruf. Ihr Tarif enthält die öffentliche CRM-API nicht. Sie gehört zu Business und Enterprise.
409 beim Aktualisieren. Lesen Sie den Datensatz erneut und senden Sie seine aktuelle
version.Erstellen einer Aufgabe abgelehnt. Prüfen Sie, ob die
assigneeUserIdzu Ihrer Organisation gehört und der Benutzer das CRM nutzen darf.Doppelte Datensätze nach einer Wiederholung. Verwenden Sie für die Wiederholung desselben Datensatzes denselben Idempotency-Key.
Wann Sie unser Support-Team kontaktieren sollten
Wenden Sie sich an den QrX-Support unter [email protected], wenn ein angehakter Scope mehr als eine Minute nach dem Speichern noch abgelehnt wird, oder bei Produktionsvorfällen. Nennen Sie die Request-ID, den Endpunkt und die Zeit, niemals Ihren API-Schlüssel oder Ihr Zugriffstoken.
