Zum Hauptinhalt springen

CRM Public API: Personen, Unternehmen, Deals, Aufgaben und Aktivitäten

H
Verfasst von Hayko

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.

  1. Gehen Sie zu Einstellungen > Geschäft > Händlerkanäle und öffnen Sie den Vertriebskanal, dessen Schlüssel Sie verwenden möchten.

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

  3. Schalten Sie Diesen Schlüssel einschränken ein.

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

  5. 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 ist person, company oder deal.

  • 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. q durchsucht 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. q durchsucht Namen und Domains.

  • Deals: zuletzt aktualisierte zuerst. Filter: pipelineId, stageId, status (open, won oder lost) und q.

  • Aufgaben: neueste zuerst. Filter: state (open oder done), assigneeUserId, personId, companyId und dealId.

Datensätze erstellen und ändern

  • Idempotency-Key: Jeder Erstellen-Aufruf (POST für Personen, Unternehmen, Deals, Aufgaben und Notizen) braucht den Header Idempotency-Key mit 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 400 IDEMPOTENCY_KEY_REQUIRED.

  • version: Jeder Datensatz trägt eine version. Ein PUT, 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 409 CRM_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, tagIds und customFields. 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, tagIds und customFields.

  • Deal: title, pipelineId, stageId, value, currency, expectedCloseOn, probability, ownerUserId, primaryPersonId, personIds, companyId, source, tagIds und customFields. Ohne Pipeline und Phase kommt der Deal in die Standard-Pipeline. Ein PUT kann die Phase nicht ändern: Nutzen Sie POST /deals/{id}/move mit toStageId, version und, bei einer Verlustphase, lostReasonId (und optional lostNote), wenn die Pipeline Verlustgründe hat.

  • Notiz: POST /notes mit recordType (person, company oder deal), recordId und text. 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 hat crm.read oder crm.write nicht. 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. Das detail sagt, 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_created

  • crm/deal_created

  • crm/deal_moved

  • crm/deal_won

  • crm/deal_lost

  • crm/task_completed

  • crm/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 assigneeUserId zu 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.

Hat dies deine Frage beantwortet?