Tablo eşitleme API
Tablo eşitleme modülünün tüm işlemleri (7) ve veri modelleri (2): adresler, izinler, girdiler, ön koşullar, olaylar ve örnekler.
Bir tabloyu dış bir veritabanından, Airtable’dan veya bir CSV bağlantısından düzenli olarak doldurun.
Modül kodu data_sync · 7 işlem · 2 veri modeli · 8 olay. Bir anahtar ya da token, arkasındaki kişinin bu modülde yapabildiğinden fazlasını asla yapamaz; satır düzeyindeki güvenlik uygulamadakiyle birebir aynıdır. Yetki kapsamları: data_sync (hepsi), data_sync:read (yalnız okuma) ya da data_sync:<yetenek>.
Kaynaklar
| Kaynak | Tablo | Listeleme ve okuma | POST | PATCH | DELETE |
|---|---|---|---|---|---|
data_sync_runs | data_sync_run | /api/v1/data_sync_runs | |||
data_syncs | data_sync | /api/v1/data_syncs |
Listeler limit (en çok 200), cursor, order (ör. -created_at), fields ve q alır; diğer her sorgu parametresi bir sütun süzgecidir: ?status=paid, ?total[gte]=100, ?id[in]=a,b, ?x=null.
İşlemler
| İşlem | Gereken izin | Ne yapar |
|---|---|---|
data_sync.create_sync | data_sync:manage | Tabloyu bir kaynaktan eşitle |
data_sync.delete_sync | data_sync:manage | Eşitlemeyi kaldır |
data_sync.record_run | data_sync:handle | Eşitleme ilerlemesini kaydet |
data_sync.request_run | data_sync:manage | Şimdi eşitle |
data_sync.retry_run | data_sync:manage | Başarısız çalıştırmayı yeniden dene |
data_sync.set_paused | data_sync:manage | Eşitlemeyi duraklat veya sürdür |
data_sync.update_sync | data_sync:manage | Eşitlemeyi değiştir |
data_sync.create_sync
Tabloyu bir kaynaktan eşitle — Bir Base tablosunu platform dışındaki bir kaynağa bağlar ve alanlarının nasıl eşleneceğini belirtir.
Gereken izin data_sync:manage · dışarıya ulaşır (gönderir, yayımlar ya da ücret alır) · Era çalıştırırken bir kişiye onaylatır
https://app.getera.io/api/v1/data_syncs/actions/create_sync- Asıl adres:
POST /api/v1/actions/data_sync.create_sync
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
dataTableId | uuid | evet | Tablo · kimliği: data_table |
title | string | evet | Ad · en çok 160 |
sourceKind | string (enum) | evet | Kaynak · İzin verilen değerler: postgres, airtable, csv_url, module, google_sheets |
credentialId | uuid | Bağlantı · kimliği: credential | |
sourceConfig | object / array | evet | Okunacak yer |
fieldMap | object / array | evet | Alan eşleştirmesi |
sourceKey | string | evet | Kaynaktaki anahtar alan · en çok 120 |
keyField | string | evet | Tablodaki anahtar alan · en çok 120 |
cursorField | string | İmleç alanı · en çok 120 | |
onSourceDelete | string (enum) | Bir kaynak kaydı kaybolduğunda · İzin verilen değerler: keep, delete | |
scheduleMinutes | number | Çalışma sıklığı (dakika) · en az 5 · en çok 10080 | |
twoWay | boolean | Tablodaki düzenlemeler kayıtları günceller |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
sync_table_not_found | Eşitlemenin yazacağı tablo bulunamadı. |
invalid_source_config | Kaynak nereden okunacağını kendi terimleriyle söylemeli. |
credential_required | Veritabanı veya Airtable kaynağı bir Uygulama bağlantısıyla okur. |
key_field_unknown | Kayıtlar tablonun kayıtlı bir alanına göre eşleşir. |
invalid_field_map | Her kaynak alanı tek bir kayıtlı alana eşlenir. |
Yayımladığı olaylar: data_sync.sync_created
Neye yazar: data_sync (insert) — Writes the sync
curl -X POST https://app.getera.io/api/v1/data_syncs/actions/create_sync \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"dataTableId":"DATA_TABLE_ID","title":"Name","sourceKind":"postgres","sourceConfig":{},"fieldMap":{},"sourceKey":"Source key field"}'{
"ok": true,
"result": "…",
"events": [
"data_sync.sync_created"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.dataSyncs.createSync({
dataTableId: "DATA_TABLE_ID",
title: "Name",
sourceKind: "postgres",
sourceConfig: {},
fieldMap: {},
sourceKey: "Source key field"
})era data_syncs create_sync --data '{"dataTableId":"DATA_TABLE_ID","title":"Name","sourceKind":"postgres","sourceConfig":{},"fieldMap":{},"sourceKey":"Source key field"}'{
"name": "era__data_sync__create_sync",
"arguments": {
"dataTableId": "DATA_TABLE_ID",
"title": "Name",
"sourceKind": "postgres",
"sourceConfig": {},
"fieldMap": {},
"sourceKey": "Source key field"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde data_sync:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 sync_table_not_found, invalid_source_config, credential_required, key_field_unknown, invalid_field_map · 429 çok sık istek
data_sync.delete_sync
Eşitlemeyi kaldır — Eşitlemeyi durdurur. Yazdığı kayıtlar tabloda kalır.
Gereken izin data_sync:manage · siler ya da geri alınamaz · Era çalıştırırken bir kişiye onaylatır
https://app.getera.io/api/v1/data_syncs/{id}/actions/delete_sync- Asıl adres:
POST /api/v1/actions/data_sync.delete_sync
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Eşitle · kimliği: data_sync |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
sync_not_found | Eşitleme bulunmalı. |
sync_running | Çalışan bir eşitleme silinemez. |
Yayımladığı olaylar: data_sync.sync_deleted
Neye yazar: data_sync (delete) — Removes the sync and its run history
curl -X POST https://app.getera.io/api/v1/data_syncs/DATA_SYNC_ID/actions/delete_sync \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"data_sync.sync_deleted"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.dataSyncs.deleteSync("DATA_SYNC_ID")era data_syncs delete_sync DATA_SYNC_ID{
"name": "era__data_sync__delete_sync",
"arguments": {
"id": "DATA_SYNC_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde data_sync:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 sync_not_found, sync_running · 429 çok sık istek
data_sync.record_run
Eşitleme ilerlemesini kaydet — Eşitleme işinin kayıtları: sayılar, kontrol noktası ve sonuç.
Gereken izin data_sync:handle · veriyi değiştirir
https://app.getera.io/api/v1/data_sync_runs/{id}/actions/record_run- Asıl adres:
POST /api/v1/actions/data_sync.record_run
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
runId | uuid | evet | Doldurulduğu yer: adresteki {id} · Çalıştır · kimliği: data_sync_run |
status | string (enum) | evet | Durum · İzin verilen değerler: running, succeeded, failed |
fetched | number | Okundu | |
inserted | number | Eklendi | |
updated | number | Güncellendi | |
deleted | number | Silindi | |
skipped | number | Atlandı | |
cursorAfter | string | Kontrol noktası · en çok 2000 | |
error | string | Hata · en çok 4000 | |
errors | object / array | Kayıt hataları |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
run_not_found | Çalıştırma bulunmalı. |
run_already_finished | Bitmiş bir çalıştırma yeniden yazılmaz. |
Yayımladığı olaylar: data_sync.run_succeeded, data_sync.run_failed
Neye yazar: data_sync_run (update) — Adds the counts and the outcome; data_sync (update) — Moves the checkpoint and the health
curl -X POST https://app.getera.io/api/v1/data_sync_runs/DATA_SYNC_RUN_ID/actions/record_run \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"status":"running"}'{
"ok": true,
"result": "…",
"events": [
"data_sync.run_succeeded",
"data_sync.run_failed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.dataSyncRuns.recordRun("DATA_SYNC_RUN_ID", {
status: "running"
})era data_sync_runs record_run DATA_SYNC_RUN_ID \
--status "running"{
"name": "era__data_sync__record_run",
"arguments": {
"runId": "DATA_SYNC_RUN_ID",
"status": "running"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde data_sync:handle izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 run_not_found, run_already_finished · 429 çok sık istek
data_sync.request_run
Şimdi eşitle — Bir çalıştırmayı sıraya koyar. Tam çalıştırma her şeyi yeniden okur ve silinenleri fark edebilir.
Gereken izin data_sync:manage · veriyi değiştirir
https://app.getera.io/api/v1/data_syncs/{id}/actions/request_run- Asıl adres:
POST /api/v1/actions/data_sync.request_run
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Eşitle · kimliği: data_sync |
fullRefresh | boolean | Her şeyi yeniden oku | |
trigger | string (enum) | Neden · İzin verilen değerler: manual, schedule |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
sync_not_found | Eşitleme bulunmalı. |
sync_paused | Duraklatılmış bir eşitleme çalışmaz. |
sync_running | Eşitleme başına aynı anda tek çalıştırma. |
credential_required | Bağlantı hâlâ yerinde olmalı. |
Yayımladığı olaylar: data_sync.run_requested
Neye yazar: data_sync_run (insert) — Queues the run; data_sync (update) — Marks the sync queued
curl -X POST https://app.getera.io/api/v1/data_syncs/DATA_SYNC_ID/actions/request_run \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"fullRefresh":true}'{
"ok": true,
"result": "…",
"events": [
"data_sync.run_requested"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.dataSyncs.requestRun("DATA_SYNC_ID", {
fullRefresh: true
})era data_syncs request_run DATA_SYNC_ID \
--full-refresh true{
"name": "era__data_sync__request_run",
"arguments": {
"id": "DATA_SYNC_ID",
"fullRefresh": true
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde data_sync:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 sync_not_found, sync_paused, sync_running, credential_required · 429 çok sık istek
data_sync.retry_run
Başarısız çalıştırmayı yeniden dene — Son kaydedilen kontrol noktasından yeni bir çalıştırma sıraya koyar.
Gereken izin data_sync:manage · veriyi değiştirir
https://app.getera.io/api/v1/data_sync_runs/{id}/actions/retry_run- Asıl adres:
POST /api/v1/actions/data_sync.retry_run
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
runId | uuid | evet | Doldurulduğu yer: adresteki {id} · Çalıştır · kimliği: data_sync_run |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
run_not_found | Çalıştırma bulunmalı. |
run_not_failed | Yalnızca başarısız bir çalıştırma yeniden denenir. |
sync_not_found | Eşitleme hâlâ bulunmalı. |
sync_paused | Duraklatılmış bir eşitleme çalışmaz. |
sync_running | Eşitleme başına aynı anda tek çalıştırma. |
credential_required | Bağlantı hâlâ yerinde olmalı. |
Yayımladığı olaylar: data_sync.run_requested
Neye yazar: data_sync_run (insert) — Queues the retry; data_sync (update) — Marks the sync queued
curl -X POST https://app.getera.io/api/v1/data_sync_runs/DATA_SYNC_RUN_ID/actions/retry_run \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{}'{
"ok": true,
"result": "…",
"events": [
"data_sync.run_requested"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.dataSyncRuns.retryRun("DATA_SYNC_RUN_ID")era data_sync_runs retry_run DATA_SYNC_RUN_ID{
"name": "era__data_sync__retry_run",
"arguments": {
"runId": "DATA_SYNC_RUN_ID"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde data_sync:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 run_not_found, run_not_failed, sync_not_found, sync_paused, sync_running, credential_required · 429 çok sık istek
data_sync.set_paused
Eşitlemeyi duraklat veya sürdür — Duraklatılmış eşitleme kontrol noktasını korur ve zamanlaması tetiklenmez.
Gereken izin data_sync:manage · veriyi değiştirir
https://app.getera.io/api/v1/data_syncs/{id}/actions/set_paused- Asıl adres:
POST /api/v1/actions/data_sync.set_paused
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Eşitle · kimliği: data_sync |
paused | boolean | evet | Duraklatıldı |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
sync_not_found | Eşitleme bulunmalı. |
Yayımladığı olaylar: data_sync.sync_paused, data_sync.sync_resumed
Neye yazar: data_sync (update) — Flips it between paused and idle
curl -X POST https://app.getera.io/api/v1/data_syncs/DATA_SYNC_ID/actions/set_paused \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"paused":true}'{
"ok": true,
"result": "…",
"events": [
"data_sync.sync_paused",
"data_sync.sync_resumed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.dataSyncs.setPaused("DATA_SYNC_ID", {
paused: true
})era data_syncs set_paused DATA_SYNC_ID \
--paused true{
"name": "era__data_sync__set_paused",
"arguments": {
"id": "DATA_SYNC_ID",
"paused": true
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde data_sync:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 sync_not_found · 429 çok sık istek
data_sync.update_sync
Eşitlemeyi değiştir — Neyi okuduğunu veya nasıl eşlediğini değiştirir. Anahtar veya kaynak değişirse sonraki çalıştırma baştan başlar.
Gereken izin data_sync:manage · veriyi değiştirir
https://app.getera.io/api/v1/data_syncs/{id}/actions/update_sync- Asıl adres:
POST /api/v1/actions/data_sync.update_sync
Girdi
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
id | uuid | evet | Doldurulduğu yer: adresteki {id} · Eşitle · kimliği: data_sync |
title | string | Ad · en çok 160 | |
credentialId | uuid | Bağlantı · kimliği: credential | |
sourceConfig | object / array | Okunacak yer | |
fieldMap | object / array | Alan eşleştirmesi | |
sourceKey | string | Kaynaktaki anahtar alan · en çok 120 | |
keyField | string | Tablodaki anahtar alan · en çok 120 | |
cursorField | string | İmleç alanı · en çok 120 | |
onSourceDelete | string (enum) | Bir kaynak kaydı kaybolduğunda · İzin verilen değerler: keep, delete | |
scheduleMinutes | number | Çalışma sıklığı (dakika) · en az 5 · en çok 10080 | |
twoWay | boolean | Tablodaki düzenlemeler kayıtları günceller |
Ön koşullar
Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:
| Kod | Ne zaman reddedilir |
|---|---|
sync_not_found | Eşitleme bulunmalı. |
invalid_source_config | Kaynak nereden okunacağını kendi terimleriyle söylemeli. |
credential_required | Veritabanı veya Airtable kaynağı bir Uygulama bağlantısıyla okur. |
key_field_unknown | Kayıtlar tablonun kayıtlı bir alanına göre eşleşir. |
invalid_field_map | Her kaynak alanı tek bir kayıtlı alana eşlenir. |
Yayımladığı olaylar: data_sync.sync_changed
Neye yazar: data_sync (update) — Rewrites the sync
curl -X POST https://app.getera.io/api/v1/data_syncs/DATA_SYNC_ID/actions/update_sync \
-H "Authorization: Bearer $ERA_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"title":"Name"}'{
"ok": true,
"result": "…",
"events": [
"data_sync.sync_changed"
]
}import { createEra } from "@getera/sdk"
const era = createEra({ apiKey: process.env.ERA_API_KEY })
const res = await era.dataSyncs.updateSync("DATA_SYNC_ID", {
title: "Name"
})era data_syncs update_sync DATA_SYNC_ID \
--title "Name"{
"name": "era__data_sync__update_sync",
"arguments": {
"id": "DATA_SYNC_ID",
"title": "Name"
}
}Hatalar: 401 kimlik bilgisi yok ya da süresi dolmuş · 403 kimlik bilgisinde data_sync:manage izni yok · 404 kayıt ya da modül erişim dışında · 422 geçersiz girdi (problems[]) · 409 sync_not_found, invalid_source_config, credential_required, key_field_unknown, invalid_field_map · 429 çok sık istek
Veri modelleri
DataSyncRun
Tablo data_sync_run · Kaynak data_sync_runs
GET /api/v1/data_sync_runsGET /api/v1/data_sync_runs/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
sync_id | string (uuid) · uuid | data_sync | ||
status | string · text | queued, running, succeeded, failed | ||
trigger | string · text | manual, schedule, retry | ||
retry_of | string (uuid) · uuid | evet | data_sync_run | |
cursor_before | string · text | evet | ||
cursor_after | string · text | evet | ||
fetched | integer · int4 | |||
inserted | integer · int4 | |||
updated | integer · int4 | |||
deleted | integer · int4 | |||
skipped | integer · int4 | |||
errors | object · jsonb | |||
error | string · text | evet | ||
started_at | string (date-time) · timestamptz | evet | ||
finished_at | string (date-time) · timestamptz | evet | ||
created_by | string (uuid) · uuid | evet | app_user | |
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz |
Birincil anahtar: id
Denetimler:
CHECK ((jsonb_typeof(errors) = 'array'::text))
DataSync
Tablo data_sync · Kaynak data_syncs
GET /api/v1/data_syncsGET /api/v1/data_syncs/{id}
| Sütun | Tür | Boş olabilir | İzin verilen değerler | Bağlı olduğu tablo |
|---|---|---|---|---|
id | string (uuid) · uuid | |||
organization_id | string (uuid) · uuid | organization | ||
workspace_id | string (uuid) · uuid | workspace | ||
data_table_id | string (uuid) · uuid | data_table | ||
title | string · text | |||
source_kind | string · text | postgres, airtable, csv_url, module, google_sheets | ||
source_config | object · jsonb | |||
field_map | object · jsonb | |||
source_key | string · text | |||
key_field | string · text | |||
cursor_field | string · text | evet | ||
cursor_value | string · text | evet | ||
on_source_delete | string · text | keep, delete | ||
schedule_minutes | integer · int4 | evet | ||
status | string · text | idle, queued, running, error, paused | ||
last_run_at | string (date-time) · timestamptz | evet | ||
last_success_at | string (date-time) · timestamptz | evet | ||
last_error | string · text | evet | ||
consecutive_failures | integer · int4 | |||
created_by | string (uuid) · uuid | evet | app_user | |
created_at | string (date-time) · timestamptz | |||
updated_at | string (date-time) · timestamptz | |||
two_way | boolean · bool |
Birincil anahtar: id
Denetimler:
CHECK (((jsonb_typeof(source_config) = 'object'::text) AND (jsonb_typeof(field_map) = 'object'::text)))CHECK (((schedule_minutes IS NULL) OR ((schedule_minutes >= 5) AND (schedule_minutes <= 10080))))CHECK ((btrim(title) <> ''::text))CHECK (((NOT two_way) OR (source_kind = 'module'::text)))
Olaylar
İş akışları ve webhook'lar bu olaylara tepki verir.
| Olay | Ne olur | Taşıdığı alanlar |
|---|---|---|
data_sync.run_failed | Bir eşitleme çalıştırması başarısız oldu. | syncId, runId |
data_sync.run_requested | Bir eşitleme çalıştırması sıraya alındı. | syncId, runId, trigger |
data_sync.run_succeeded | Bir eşitleme çalıştırması bitti. | syncId, runId |
data_sync.sync_changed | Bir eşitlemenin kaynağı ya da eşlemesi değişti. | id |
data_sync.sync_created | Bir tablo bir kaynaktan eşitlenecek şekilde ayarlandı. | id, dataTableId, sourceKind |
data_sync.sync_deleted | Bir eşitleme kaldırıldı; satırları kaldı. | id |
data_sync.sync_paused | Bir eşitleme duraklatıldı. | id |
data_sync.sync_resumed | Bir eşitleme sürdürüldü. | id |