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: API-uri
description: Interogați și modificați programatic datele din CRM folosind REST sau GraphQL.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Twenty a fost creat pentru a fi prietenos cu dezvoltatorii, oferind API-uri puternice care se adaptează la modelul dvs. de date personalizat. Oferim patru tipuri distincte de API-uri pentru a satisface diferite nevoi de integrare.
## Abordare orientată către dezvoltatori
Twenty generează API-uri special pentru modelul dvs. de date:
* **Nu sunt necesare ID-uri lungi**: Utilizați direct numele obiectelor și câmpurilor în punctele finale
* **Obiectele standard și personalizate tratate în mod egal**: Obiectele dvs. personalizate primesc același tratament API ca și cele încorporate
* **Puncte finale dedicate**: Fiecare obiect și câmp primește propriul său punct final API
* **Documentație personalizată**: Generată special pentru modelul de date al spațiului dvs. de lucru
<Note>
Documentația API personalizată este disponibilă la **Settings → API & Webhooks** după crearea unei chei API. Deoarece Twenty generează API-uri care se potrivesc modelului dvs. de date personalizat, documentația este unică pentru spațiul dvs. de lucru.
</Note>
## Cele două tipuri de API-uri
### API Core
Accesibil prin `/rest/` sau `/graphql/`
Lucrați cu **înregistrările** reale (datele):
* Creați, citiți, actualizați, ștergeți Persoane, Companii, Oportunități etc.
* Interogați și filtrați datele
* Gestionați relațiile de înregistrări
### API Metadata
Accesibil prin `/rest/metadata/` sau `/metadata/`
Gestionați-vă **spațiul de lucru și modelul de date**:
* Creați, modificați sau ștergeți obiecte și câmpuri
* Configurați setările spațiului de lucru
* Definiți relațiile dintre obiecte
## REST vs GraphQL
Atât API-urile Core, cât și API-urile Metadata sunt disponibile în formatele REST și GraphQL:
| Format | Operațiuni disponibile |
| ----------- | -------------------------------------------------------------------------- |
| **REST** | CRUD, operațiuni de grup, upsert-uri |
| **GraphQL** | La fel + **upsert-uri de grup**, interogări de relații într-un singur apel |
Alegeți în funcție de nevoi — ambele formate accesează aceleași date.
## Puncte Finale API
| Mediu | URL de bază |
| -------------------- | ------------------------- |
| **Cloud** | `https://api.twenty.com/` |
| **Găzduire proprie** | `https://{your-domain}/` |
## Autentificare
Fiecare solicitare API necesită o cheie API în antet:
```
Authorization: Bearer YOUR_API_KEY
```
### Creați o cheie API
1. Mergeți la **Setări → API-uri & Webhook-uri**
2. Faceți clic pe **+ Create key**
3. Configurați:
* **Name**: Nume descriptiv pentru cheie
* **Expiration Date**: Când expiră cheia
4. Faceți clic pe **Salvare**
5. **Copiați imediat** — cheia este afișată o singură dată
<VimeoEmbed videoId="928786722" title="Crearea unei chei API" />
<Warning>
Cheia dvs. API oferă acces la date sensibile. Nu o partajați cu servicii care nu sunt de încredere. Dacă este compromisă, dezactivați-o imediat și generați una nouă.
</Warning>
### Atribuiți un rol unei chei API
Pentru o securitate sporită, atribuiți un rol specific pentru a limita accesul:
1. Accesați **Setări → Membri → Roluri**
2. Faceți clic pe rolul pe care doriți să-l atribuiți
3. Deschideți fila **Atribuire**
4. În **API Keys**, faceți clic pe **+ Assign to API key**
5. Selectați cheia API
Cheia va moșteni permisiunile acelui rol. Consultați [Permisiuni](/l/ro/user-guide/permissions-access/capabilities/permissions) pentru detalii.
### Gestionați cheile API
**Regenerate**: Settings → APIs & Webhooks → Faceți clic pe cheie → **Regenerate**
**Delete**: Settings → APIs & Webhooks → Faceți clic pe cheie → **Delete**
## Platformă de testare API
Testați API-urile direct în browser cu platforma noastră integrată de testare — disponibilă atât pentru **REST**, cât și pentru **GraphQL**.
### Accesați platforma de testare
1. Mergeți la **Setări → API-uri & Webhook-uri**
2. Creați o cheie API (obligatoriu)
3. Faceți clic pe **REST API** sau **GraphQL API** pentru a deschide platforma de testare
### Ce obțineți
* **Documentație interactivă**: Generată pentru modelul dvs. de date specific
* **Testare live**: Executați apeluri API reale către spațiul dvs. de lucru
* **Explorator de scheme**: Parcurgeți obiectele, câmpurile și relațiile disponibile
* **Constructor de cereri**: Construiți interogări cu completare automată
Platforma de testare reflectă obiectele și câmpurile dvs. personalizate, astfel încât documentația este întotdeauna corectă pentru spațiul dvs. de lucru.
## Operațiuni de grup
Atât REST, cât și GraphQL suportă operațiuni de grup:
* **Dimensiunea grupului**: Până la 60 de înregistrări pe cerere
* **Operațiuni**: Creați, actualizați, ștergeți mai multe înregistrări
**Funcții exclusive GraphQL:**
* **Upsert de grup**: Creați sau actualizați într-un singur apel
* Folosiți nume de obiecte la plural (de exemplu, `CreateCompanies` în loc de `CreateCompany`)
## Limitări de rată
Solicitările API sunt limitate pentru a asigura stabilitatea platformei:
| Limită | Valoare |
| ----------------------- | -------------------------- |
| **Solicitări** | 100 de apeluri pe minut |
| **Dimensiunea lotului** | 60 de înregistrări pe apel |
<Tip>
Utilizați operațiunile de grup pentru a maximiza debitul — procesați până la 60 de înregistrări într-un singur apel API în loc să faceți solicitări individuale.
</Tip>

View File

@@ -0,0 +1,112 @@
---
title: Webhooks
description: Primiți notificări în timp real atunci când au loc evenimente în CRM-ul dvs.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Webhook-urile trimit date către sistemele dvs. în timp real atunci când au loc evenimente în Twenty — nu este necesară interogarea periodică. Folosiți-le pentru a menține sistemele externe sincronizate, a declanșa automatizări sau a trimite alerte.
## Creează Webhook
1. Mergeți la **Setări → API-uri şi Webhooks → Webhooks**
2. Faceți clic pe **+ Creează webhook**
3. Introduceți URL-ul webhook-ului dvs. (trebuie să fie accesibil public)
4. Faceți clic pe **Salvare**
Webhook-ul se activează imediat și începe să trimită notificări.
<VimeoEmbed videoId="928786708" title="Crearea unui webhook" />
### Administrează Webhooks
**Editează**: Faceți clic pe webhook → Actualizați URL-ul → **Salvează**
**Șterge**: Faceți clic pe webhook → **Șterge** → Confirmă
## Evenimente
Twenty trimite webhook-uri pentru aceste tipuri de evenimente:
| Eveniment | Exemplu |
| ---------------------------- | ---------------------------------------------------------- |
| **Înregistrare creată** | `person.created`, `company.created`, `note.created` |
| **Înregistrare actualizată** | `person.updated`, `company.updated`, `opportunity.updated` |
| **Înregistrare ștearsă** | `person.deleted`, `company.deleted` |
Toate tipurile de evenimente sunt trimise către URL-ul webhook-ului dvs. Filtrarea evenimentelor poate fi adăugată în versiunile viitoare.
## Formatul payload-ului
Fiecare webhook trimite un HTTP POST cu un corp JSON:
```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"
}
```
| Câmp | Descriere |
| ----------------- | ------------------------------------------------------------- |
| `eveniment` | Ce s-a întâmplat (de ex., `person.created`) |
| `date` | Înregistrarea completă care a fost creată/actualizată/ștearsă |
| `marcaj temporal` | Când a avut loc evenimentul (UTC) |
<Note>
Răspundeți cu un **status HTTP 2xx** (200-299) pentru a confirma primirea. Răspunsurile non-2xx sunt înregistrate ca eșecuri de livrare.
</Note>
## Validarea Webhook-ului
Twenty semnează fiecare cerere webhook din motive de securitate. Validați semnăturile pentru a vă asigura că cererile sunt autentice.
### Anteturi
| Antet | Descriere |
| ---------------------------- | -------------------------- |
| `X-Twenty-Webhook-Signature` | Semnătură HMAC SHA256 |
| `X-Twenty-Webhook-Timestamp` | Marcaj temporal al cererii |
### Pași de validare
1. Obțineți marcajul temporal din `X-Twenty-Webhook-Timestamp`
2. Creați șirul: `{timestamp}:{JSON payload}`
3. Calculați HMAC SHA256 folosind secretul webhook-ului dvs.
4. Comparați cu `X-Twenty-Webhook-Signature`
### Exemplu (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"];
```
## Webhook-uri vs Fluxuri de lucru
| Metodă | Direcție | Caz de utilizare |
| ------------------------------------------ | -------- | -------------------------------------------------------------------------------- |
| **Webhook-uri** | OUT | Notificați automat sistemele externe despre orice modificare a unei înregistrări |
| **Flux de lucru + Cerere HTTP** | OUT | Trimiteți date în exterior cu logică personalizată (filtre, transformări) |
| **Declanșator webhook în fluxul de lucru** | IN | Primiți date în Twenty din sisteme externe |
Pentru a primi date externe, consultați [Configurați un declanșator Webhook](/l/ro/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).