snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,147 @@
---
title: APIs
description: Abfragen und ändern Sie Ihre CRM-Daten programmatisch mit REST oder GraphQL.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Twenty wurde so entwickelt, dass es entwicklerfreundlich ist und leistungsstarke APIs bietet, die sich an Ihr individuelles Datenmodell anpassen. Wir bieten vier verschiedene API-Typen, um unterschiedlichen Integrationsanforderungen gerecht zu werden.
## Entwickler-Erst-Ansatz
Twenty generiert APIs speziell für Ihr Datenmodell:
* **Keine langen IDs erforderlich**: Verwenden Sie Ihre Objekt- und Feldnamen direkt in Endpunkten
* **Standard- und benutzerdefinierte Objekte werden gleich behandelt**: Ihre benutzerdefinierten Objekte erhalten dieselbe API-Behandlung wie integrierte
* **Dedizierte Endpunkte**: Jedes Objekt und Feld erhält seinen eigenen API-Endpunkt
* **Benutzerdefinierte Dokumentation**: Speziell für das Datenmodell Ihres Arbeitsplatzes generiert
<Note>
Ihre personalisierte API-Dokumentation ist nach dem Erstellen eines API-Schlüssels unter **Einstellungen → API & Webhooks** verfügbar. Da Twenty APIs erzeugt, die Ihrem benutzerdefinierten Datenmodell entsprechen, ist die Dokumentation für Ihren Arbeitsbereich einzigartig.
</Note>
## Die beiden API-Typen
### Core API
Zugriff auf `/rest/` oder `/graphql/`
Arbeiten Sie mit Ihren tatsächlichen **Datensätzen** (den Daten):
* Personen, Unternehmen, Opportunities usw. erstellen, lesen, aktualisieren und löschen
* Daten abfragen und filtern
* Verwalten von Datensatzbeziehungen
### Metadata API
Zugriff auf `/rest/metadata/` oder `/metadata/`
Verwalten Sie Ihren **Arbeitsbereich und Ihr Datenmodell**:
* Objekte und Felder erstellen, ändern oder löschen
* Konfigurieren der Arbeitsbereichseinstellungen
* Beziehungen zwischen Objekten definieren
## REST vs GraphQL
Sowohl Core- als auch Metadata-APIs sind in REST- und GraphQL-Formaten verfügbar:
| Format | Verfügbare Vorgänge |
| ----------- | ------------------------------------------------------------------- |
| **REST** | CRUD, Batch-Vorgänge, Upserts |
| **GraphQL** | Dasselbe plus **Batch-Upserts**, Beziehungsabfragen in einem Aufruf |
Wählen Sie je nach Bedarf — beide Formate greifen auf dieselben Daten zu.
## API-Endpunkte
| Umgebung | Basis-URL |
| ----------------- | ------------------------- |
| **Cloud** | `https://api.twenty.com/` |
| **Selbsthosting** | `https://{your-domain}/` |
## Authentifizierung
Jede API-Anfrage erfordert einen API-Schlüssel im Header:
```
Authorization: Bearer YOUR_API_KEY
```
### API-Schlüssel erstellen
1. Gehen Sie zu **Einstellungen → APIs & Webhooks**
2. Klicken Sie auf **+ Schlüssel erstellen**
3. Konfigurieren:
* **Name**: Beschreibender Name für den Schlüssel
* **Ablaufdatum**: Wann der Schlüssel abläuft
4. Klicken Sie auf **Speichern**
5. **Sofort kopieren** — der Schlüssel wird nur einmal angezeigt
<VimeoEmbed videoId="928786722" title="API-Schlüssel erstellen" />
<Warning>
Ihr API-Schlüssel gewährt Zugriff auf sensible Daten. Teilen Sie ihn nicht mit nicht vertrauenswürdigen Diensten. Wenn er kompromittiert wurde, deaktivieren Sie ihn umgehend und erstellen Sie einen neuen.
</Warning>
### Einem API-Schlüssel eine Rolle zuweisen
Für mehr Sicherheit weisen Sie eine spezifische Rolle zu, um den Zugriff zu beschränken:
1. Gehen Sie zu **Einstellungen → Mitglieder → Rollen**
2. Klicken Sie auf die Rolle, die Sie zuweisen möchten
3. Öffnen Sie den Tab **Zuweisungen**
4. Unter **API-Schlüssel** auf **+ API-Schlüssel zuweisen** klicken
5. Wählen Sie den API-Schlüssel aus
Der Schlüssel übernimmt die Berechtigungen dieser Rolle. Siehe [Berechtigungen](/l/de/user-guide/permissions-access/capabilities/permissions) für Details.
### API-Schlüssel verwalten
**Neu generieren**: Einstellungen → APIs & Webhooks → Schlüssel anklicken → **Neu generieren**
**Löschen**: Einstellungen → APIs & Webhooks → Schlüssel anklicken → **Löschen**
## API-Playground
Testen Sie Ihre APIs direkt im Browser mit unserem integrierten Playground — verfügbar für **REST** und **GraphQL**.
### Auf den Playground zugreifen
1. Gehen Sie zu **Einstellungen → APIs & Webhooks**
2. API-Schlüssel erstellen (erforderlich)
3. Klicken Sie auf **REST API** oder **GraphQL API**, um den Playground zu öffnen
### Was Sie erhalten
* **Interaktive Dokumentation**: Für Ihr spezifisches Datenmodell generiert
* **Live-Tests**: Führen Sie echte API-Aufrufe gegen Ihren Arbeitsbereich aus
* **Schema-Explorer**: Verfügbare Objekte, Felder und Beziehungen durchsuchen
* **Request-Builder**: Abfragen mit Autovervollständigung erstellen
Der Playground spiegelt Ihre benutzerdefinierten Objekte und Felder wider, sodass die Dokumentation für Ihren Arbeitsbereich stets korrekt ist.
## Batch-Vorgänge
Sowohl REST als auch GraphQL unterstützen Batch-Vorgänge:
* **Batch-Größe**: Bis zu 60 Datensätze pro Anfrage
* **Vorgänge**: Mehrere Datensätze erstellen, aktualisieren, löschen
**GraphQL-Exklusivfunktionen:**
* **Batch-Upsert**: Erstellen oder Aktualisieren in einem Aufruf
* Verwenden Sie Pluralobjektnamen (z. B. `CreateCompanies` statt `CreateCompany`)
## Rate Limits
API-Anfragen werden gedrosselt, um die Stabilität der Plattform zu gewährleisten:
| Limit | Wert |
| --------------- | ------------------------ |
| **Anfragen** | 100 Aufrufe pro Minute |
| **Batch-Größe** | 60 Datensätze pro Aufruf |
<Tip>
Verwenden Sie Batch-Vorgänge, um den Durchsatz zu maximieren — verarbeiten Sie bis zu 60 Datensätze in einem einzelnen API-Aufruf, statt einzelne Anfragen zu senden.
</Tip>

View File

@@ -0,0 +1,112 @@
---
title: Webhooks
description: Erhalten Sie Benachrichtigungen in Echtzeit, wenn Ereignisse in Ihrem CRM auftreten.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Webhooks übermitteln Daten in Echtzeit an Ihre Systeme, wenn Ereignisse in Twenty auftreten — kein Polling erforderlich. Verwenden Sie sie, um externe Systeme synchron zu halten, Automatisierungen auszulösen oder Benachrichtigungen zu senden.
## Webhook erstellen
1. Gehen Sie zu **Einstellungen → APIs & Webhooks → Webhooks**
2. Klicken Sie auf **+ Webhook erstellen**
3. Geben Sie Ihre Webhook-URL ein (muss öffentlich zugänglich sein)
4. Klicken Sie auf **Speichern**
Der Webhook wird sofort aktiviert und beginnt, Benachrichtigungen zu senden.
<VimeoEmbed videoId="928786708" title="Webhook erstellen" />
### Webhooks verwalten
**Bearbeiten**: Klicken Sie auf den Webhook → URL aktualisieren → **Speichern**
**Löschen**: Klicken Sie auf den Webhook → **Löschen** → Bestätigen
## Ereignisse
Twenty sendet Webhooks für diese Ereignistypen:
| Ereignis | Beispiel |
| -------------------------- | ---------------------------------------------------------- |
| **Datensatz erstellt** | `person.created`, `company.created`, `note.created` |
| **Datensatz aktualisiert** | `person.updated`, `company.updated`, `opportunity.updated` |
| **Datensatz gelöscht** | `person.deleted`, `company.deleted` |
Alle Ereignistypen werden an Ihre Webhook-URL gesendet. Eine Ereignisfilterung kann in zukünftigen Versionen hinzugefügt werden.
## Payload-Format
Jeder Webhook sendet eine HTTP-POST-Anfrage mit einem JSON-Body:
```json
{
"event": "person.created",
"data": {
"id": "abc12345",
"firstName": "Alice",
"lastName": "Doe",
"email": "alice@example.com",
"createdAt": "2025-02-10T15:30:45Z",
"createdBy": "user_123"
},
"timestamp": "2025-02-10T15:30:50Z"
}
```
| Feld | Beschreibung |
| ------------- | -------------------------------------------------------------------- |
| `ereignis` | Was passiert ist (z. B. `person.created`) |
| `daten` | Der vollständige Datensatz, der erstellt/aktualisiert/gelöscht wurde |
| `zeitstempel` | Wann das Ereignis auftrat (UTC) |
<Note>
Antworten Sie mit einem **2xx-HTTP-Status** (200-299), um den Empfang zu bestätigen. Nicht-2xx-Antworten werden als Zustellfehler protokolliert.
</Note>
## Webhook-Validierung
Twenty signiert jede Webhook-Anfrage zu Sicherheitszwecken. Validieren Sie die Signaturen, um sicherzustellen, dass die Anfragen authentisch sind.
### Header
| Kopfzeile | Beschreibung |
| ---------------------------- | ----------------------- |
| `X-Twenty-Webhook-Signature` | HMAC-SHA256-Signatur |
| `X-Twenty-Webhook-Timestamp` | Zeitstempel der Anfrage |
### Validierungsschritte
1. Den Zeitstempel aus `X-Twenty-Webhook-Timestamp` abrufen
2. Zeichenfolge erstellen: `{timestamp}:{JSON payload}`
3. Den HMAC-SHA256-Hash mit Ihrem Webhook-Geheimnis berechnen
4. Mit `X-Twenty-Webhook-Signature` vergleichen
### Beispiel (Node.js)
```javascript
const crypto = require("crypto");
const timestamp = req.headers["x-twenty-webhook-timestamp"];
const payload = JSON.stringify(req.body);
const secret = "your-webhook-secret";
const stringToSign = `${timestamp}:${payload}`;
const expectedSignature = crypto
.createHmac("sha256", secret)
.update(stringToSign)
.digest("hex");
const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"];
```
## Webhooks vs Workflows
| Methode | Richtung | Anwendungsfall |
| ---------------------------- | -------- | -------------------------------------------------------------------------------- |
| **Webhooks** | OUT | Externe Systeme automatisch über jede Datensatzänderung benachrichtigen |
| **Workflow + HTTP-Anfrage** | OUT | Daten mit benutzerdefinierter Logik (Filter, Transformationen) nach außen senden |
| **Workflow-Webhook-Trigger** | IN | Daten aus externen Systemen in Twenty empfangen |
Für den Empfang externer Daten siehe [Webhook-Trigger einrichten](/l/de/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).