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'ler
description: CRM verilerinizi REST veya GraphQL kullanarak programatik olarak sorgulayın ve değiştirin.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Twenty, geliştirici dostu olacak şekilde tasarlanmıştır ve özel veri modelinize uyum sağlayan güçlü API'ler sunar. Farklı entegrasyon ihtiyaçlarını karşılamak üzere dört farklı API türü sunuyoruz.
## Öncelik Geliştiricide Yaklaşımı
Twenty, veri modeliniz için özel olarak API'ler oluşturur:
* **Uzun kimlik numaralarına gerek yok**: Uç noktalarda nesne ve alan adlarınızı doğrudan kullanın
* **Standart ve özel nesneler eşit şekilde ele alınır**: Özel nesneleriniz yerleşik olanlarla aynı API muamelesini görür.
* **Özel uç noktalar**: Her nesne ve alan kendi API uç noktasına sahiptir
* **Özel dokümantasyon**: Çalışma alanınızın veri modeli için özel olarak üretilmiştir.
<Note>
Bir API anahtarı oluşturduktan sonra kişiselleştirilmiş API dokümantasyonunuz **Ayarlar → API ve Webhook'lar** altında mevcuttur. Twenty, özel veri modelinize uyan API'ler oluşturduğundan, dokümantasyon çalışma alanınıza özeldir.
</Note>
## İki API Türü
### Temel API
`/rest/` veya `/graphql/` üzerinden erişilebilir.
Gerçek **kayıtlarınızla** (verilerin kendisiyle) çalışın:
* People, Companies, Opportunities vb. oluşturun, okuyun, güncelleyin, silin.
* Verileri sorgulayın ve filtreleyin
* Kayıt ilişkilerini yönetin
### Meta Veriler API
`/rest/metadata/` veya `/metadata/` üzerinden erişilebilir.
**Çalışma alanınızı ve veri modelinizi** yönetin:
* Nesne ve alanlar oluşturun, değiştirin veya silin
* Çalışma alanı ayarlarını yapılandırın
* Nesneler arasındaki ilişkileri tanımlayın
## REST ve GraphQL
Hem Core hem de Metadata API'leri, REST ve GraphQL formatlarında mevcuttur:
| Biçim | Kullanılabilir İşlemler |
| ----------- | -------------------------------------------------------------------------------- |
| **REST** | CRUD, toplu işlemler, ekleme-güncelleme işlemleri |
| **GraphQL** | Aynısı + **toplu ekleme-güncelleme işlemleri**, tek bir çağrıda ilişki sorguları |
İhtiyaçlarınıza göre seçin — her iki format da aynı verilere erişir.
## API Uç Noktaları
| Ortam | Temel URL |
| ---------------------------- | ------------------------- |
| **Bulut** | `https://api.twenty.com/` |
| **Kendi Kendine Barındırma** | `https://{your-domain}/` |
## Kimlik Doğrulama
Her API isteği, başlıkta bir API anahtarı gerektirir:
```
Authorization: Bearer YOUR_API_KEY
```
### Bir API Anahtarı Oluştur
1. **Ayarlar → API ve Webhook'lar**'a gidin
2. **+ Anahtar oluştur**'a tıklayın
3. Alanı Yapılandır:
* **Ad**: Anahtar için açıklayıcı bir ad
* **Son Kullanma Tarihi**: Anahtarın ne zaman sona ereceği
4. **Kaydet**'e tıklayın
5. **Hemen kopyalayın** — anahtar yalnızca bir kez gösterilir
<VimeoEmbed videoId="928786722" title="API anahtarı oluşturma" />
<Warning>
API anahtarınız hassas verilere erişim sağlar. Güvenilmeyen hizmetlerle paylaşmayın. Tehlikeye girerse, onu hemen devre dışı bırakın ve yenisini oluşturun.
</Warning>
### Bir API Anahtarına Rol Atama
Daha iyi güvenlik için, erişimi sınırlamak amacıyla belirli bir rol atayın:
1. **Ayarlar → Üyeler → Roller** bölümüne gidin
2. Atamak istediğiniz role tıklayın
3. **Atama** sekmesini açın
4. **API Anahtarları** altında, **+ API anahtarına ata**'ya tıklayın
5. API anahtarını seçin
Anahtar, o rolün izinlerini devralacaktır. Ayrıntılar için [İzinler](/l/tr/user-guide/permissions-access/capabilities/permissions) bölümüne bakın.
### API Anahtarlarını Yönet
**Yeniden Oluştur**: Ayarlar → API ve Webhook'lar → Anahtara tıklayın → **Yeniden Oluştur**
**Sil**: Ayarlar → API ve Webhook'lar → Anahtara tıklayın → **Sil**
## API Oyun Alanı
Yerleşik oyun alanımız ile API'lerinizi doğrudan tarayıcıda test edin — hem **REST** hem de **GraphQL** için kullanılabilir.
### Oyun Alanına Erişin
1. **Ayarlar → API ve Webhook'lar**'a gidin
2. Bir API anahtarı oluşturun (gerekli)
3. Oyun alanını açmak için **REST API** veya **GraphQL API**'ye tıklayın
### Elde Edecekleriniz
* **Etkileşimli dokümantasyon**: Belirli veri modeliniz için oluşturulur
* **Canlı test**: Çalışma alanınıza karşı gerçek API çağrılarını gerçekleştirin
* **Şema gezgini**: Kullanılabilir nesnelere, alanlara ve ilişkilere göz atın
* **İstek oluşturucu**: Otomatik tamamlama ile sorgular oluşturun
Oyun alanı, özel nesnelerinizi ve alanlarınızı yansıtır, bu nedenle dokümantasyon çalışma alanınız için her zaman doğrudur.
## Toplu İşlemler
Hem REST hem de GraphQL, toplu işlemleri destekler:
* **Toplu boyut**: İstek başına 60 kayıt kadar
* **İşlemler**: Birden çok kaydı oluşturma, güncelleme, silme
**Yalnızca GraphQL Özellikleri:**
* **Toplu Ekleme-Güncelleme**: Tek bir çağrıda oluşturun veya güncelleyin
* Çoğul nesne adlarını kullanın (ör. `CreateCompany` yerine `CreateCompanies`)
## Hız Sınırları
Platform kararlılığını sağlamak için API istekleri kısıtlanır:
| Sınır | Değer |
| ---------------- | --------------------- |
| **İstekler** | Dakikada 100 çağrı |
| **Toplu boyutu** | Çağrı başına 60 kayıt |
<Tip>
Verimi en üst düzeye çıkarmak için toplu işlemleri kullanın — tekil istekler yapmak yerine tek bir API çağrısında 60 kayda kadar işleyin.
</Tip>

View File

@@ -0,0 +1,112 @@
---
title: Webhooklar
description: CRM'inizde olaylar gerçekleştiğinde gerçek zamanlı bildirimler alın.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
Webhook'lar, Twenty'de olaylar gerçekleştiğinde verileri sistemlerinize gerçek zamanlı olarak iletir — sürekli sorgulamaya gerek yok. Harici sistemleri senkron tutmak, otomasyonları tetiklemek veya uyarılar göndermek için bunları kullanın.
## Webhook oluştur
1. **Ayarlar → API'ler ve Webhook'lar → Webhook'lar**'a gidin
2. **+ Webhook oluştur**'a tıklayın
3. Webhook URL'nizi girin (herkese açık olarak erişilebilir olmalıdır)
4. **Kaydet**'e tıklayın
Webhook anında etkinleşir ve bildirim göndermeye başlar.
<VimeoEmbed videoId="928786708" title="Webhook oluşturma" />
### Webhook'ları Yönet
**Düzenle**: Webhook'u tıklayın → URL'yi güncelleyin → **Kaydet**
**Sil**: Webhook'u tıklayın → **Sil** → Onayla
## Etkinlikler
Twenty, şu olay türleri için webhook'lar gönderir:
| Etkinlik | Örnek |
| --------------------- | ---------------------------------------------------------- |
| **Kayıt Oluşturuldu** | `person.created`, `company.created`, `note.created` |
| **Kayıt Güncellendi** | `person.updated`, `company.updated`, `opportunity.updated` |
| **Kayıt Silindi** | `person.deleted`, `company.deleted` |
Tüm olay türleri webhook URL'nize gönderilir. Olay filtreleme özelliği ilerideki sürümlerde eklenebilir.
## Yük Biçimi
Her webhook, JSON gövdeli bir HTTP POST gönderir:
```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"
}
```
| Alan | Açıklama |
| --------------- | --------------------------------------------- |
| `etkinlik` | Ne oldu (ör. `person.created`) |
| `veri` | Oluşturulan/güncellenen/silinen kaydın tamamı |
| `zaman damgası` | Olayın ne zaman gerçekleştiği (UTC) |
<Note>
Alındığını onaylamak için **2xx HTTP durumu** (200-299) ile yanıt verin. 2xx dışı yanıtlar teslimat hataları olarak kaydedilir.
</Note>
## Webhook Doğrulaması
Twenty, güvenlik için her webhook isteğini imzalar. İsteklerin gerçekliğini sağlamak için imzaları doğrulayın.
### Üstbilgiler
| Başlık | Açıklama |
| ---------------------------- | ------------------- |
| `X-Twenty-Webhook-Signature` | HMAC SHA256 imzası |
| `X-Twenty-Webhook-Timestamp` | İstek zaman damgası |
### Doğrulama Adımları
1. `X-Twenty-Webhook-Timestamp` değerinden zaman damgasını alın
2. Dizeyi oluşturun: `{timestamp}:{JSON payload}`
3. Webhook gizli anahtarınızı kullanarak HMAC SHA256 hesaplayın
4. `X-Twenty-Webhook-Signature` ile karşılaştırın
### Örnek (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'lar ve İş Akışları
| Yöntem | Yön | Kullanım Senaryosu |
| ---------------------------------- | --- | --------------------------------------------------------------------------- |
| **Webhook'lar** | OUT | Herhangi bir kayıt değişikliğini harici sistemlere otomatik olarak bildirin |
| **İş Akışı + HTTP İsteği** | OUT | Özel mantıkla (filtreler, dönüşümler) verileri dışarı gönderin |
| **İş Akışı Webhook Tetikleyicisi** | IN | Harici sistemlerden Twenty'ye veri alın |
Harici verileri almak için bkz. [Bir Webhook Tetikleyicisi Kurun](/l/tr/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).