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

KaynakTabloListeleme ve okumaPOSTPATCHDELETE
data_sync_runsdata_sync_run/api/v1/data_sync_runs
data_syncsdata_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

İşlemGereken izinNe yapar
data_sync.create_syncdata_sync:manageTabloyu bir kaynaktan eşitle
data_sync.delete_syncdata_sync:manageEşitlemeyi kaldır
data_sync.record_rundata_sync:handleEşitleme ilerlemesini kaydet
data_sync.request_rundata_sync:manageŞimdi eşitle
data_sync.retry_rundata_sync:manageBaşarısız çalıştırmayı yeniden dene
data_sync.set_pauseddata_sync:manageEşitlemeyi duraklat veya sürdür
data_sync.update_syncdata_sync:manageEş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

POSThttps://app.getera.io/api/v1/data_syncs/actions/create_sync
API anahtarı ya da OAuth token · data_sync:manage
  • Asıl adres: POST /api/v1/actions/data_sync.create_sync

Girdi

AlanTürZorunluAçıklama
dataTableIduuidevetTablo · kimliği: data_table
titlestringevetAd · en çok 160
sourceKindstring (enum)evetKaynak · İzin verilen değerler: postgres, airtable, csv_url, module, google_sheets
credentialIduuidBağlantı · kimliği: credential
sourceConfigobject / arrayevetOkunacak yer
fieldMapobject / arrayevetAlan eşleştirmesi
sourceKeystringevetKaynaktaki anahtar alan · en çok 120
keyFieldstringevetTablodaki anahtar alan · en çok 120
cursorFieldstringİmleç alanı · en çok 120
onSourceDeletestring (enum)Bir kaynak kaydı kaybolduğunda · İzin verilen değerler: keep, delete
scheduleMinutesnumberÇalışma sıklığı (dakika) · en az 5 · en çok 10080
twoWaybooleanTablodaki düzenlemeler kayıtları günceller

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
sync_table_not_foundEşitlemenin yazacağı tablo bulunamadı.
invalid_source_configKaynak nereden okunacağını kendi terimleriyle söylemeli.
credential_requiredVeritabanı veya Airtable kaynağı bir Uygulama bağlantısıyla okur.
key_field_unknownKayıtlar tablonun kayıtlı bir alanına göre eşleşir.
invalid_field_mapHer 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"}'
Yanıt
{
  "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"}'
tools/call
{
  "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

POSThttps://app.getera.io/api/v1/data_syncs/{id}/actions/delete_sync
API anahtarı ya da OAuth token · data_sync:manage
  • Asıl adres: POST /api/v1/actions/data_sync.delete_sync

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Eşitle · kimliği: data_sync

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
sync_not_foundEş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 '{}'
Yanıt
{
  "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
tools/call
{
  "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

POSThttps://app.getera.io/api/v1/data_sync_runs/{id}/actions/record_run
API anahtarı ya da OAuth token · data_sync:handle
  • Asıl adres: POST /api/v1/actions/data_sync.record_run

Girdi

AlanTürZorunluAçıklama
runIduuidevetDoldurulduğu yer: adresteki {id} · Çalıştır · kimliği: data_sync_run
statusstring (enum)evetDurum · İzin verilen değerler: running, succeeded, failed
fetchednumberOkundu
insertednumberEklendi
updatednumberGüncellendi
deletednumberSilindi
skippednumberAtlandı
cursorAfterstringKontrol noktası · en çok 2000
errorstringHata · en çok 4000
errorsobject / arrayKayıt hataları

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
run_not_foundÇalıştırma bulunmalı.
run_already_finishedBitmiş 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"}'
Yanıt
{
  "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"
tools/call
{
  "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

POSThttps://app.getera.io/api/v1/data_syncs/{id}/actions/request_run
API anahtarı ya da OAuth token · data_sync:manage
  • Asıl adres: POST /api/v1/actions/data_sync.request_run

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Eşitle · kimliği: data_sync
fullRefreshbooleanHer şeyi yeniden oku
triggerstring (enum)Neden · İzin verilen değerler: manual, schedule

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
sync_not_foundEşitleme bulunmalı.
sync_pausedDuraklatılmış bir eşitleme çalışmaz.
sync_runningEşitleme başına aynı anda tek çalıştırma.
credential_requiredBağ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}'
Yanıt
{
  "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
tools/call
{
  "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

POSThttps://app.getera.io/api/v1/data_sync_runs/{id}/actions/retry_run
API anahtarı ya da OAuth token · data_sync:manage
  • Asıl adres: POST /api/v1/actions/data_sync.retry_run

Girdi

AlanTürZorunluAçıklama
runIduuidevetDoldurulduğ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:

KodNe zaman reddedilir
run_not_foundÇalıştırma bulunmalı.
run_not_failedYalnızca başarısız bir çalıştırma yeniden denenir.
sync_not_foundEşitleme hâlâ bulunmalı.
sync_pausedDuraklatılmış bir eşitleme çalışmaz.
sync_runningEşitleme başına aynı anda tek çalıştırma.
credential_requiredBağ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 '{}'
Yanıt
{
  "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
tools/call
{
  "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

POSThttps://app.getera.io/api/v1/data_syncs/{id}/actions/set_paused
API anahtarı ya da OAuth token · data_sync:manage
  • Asıl adres: POST /api/v1/actions/data_sync.set_paused

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Eşitle · kimliği: data_sync
pausedbooleanevetDuraklatıldı

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
sync_not_foundEş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}'
Yanıt
{
  "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
tools/call
{
  "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

POSThttps://app.getera.io/api/v1/data_syncs/{id}/actions/update_sync
API anahtarı ya da OAuth token · data_sync:manage
  • Asıl adres: POST /api/v1/actions/data_sync.update_sync

Girdi

AlanTürZorunluAçıklama
iduuidevetDoldurulduğu yer: adresteki {id} · Eşitle · kimliği: data_sync
titlestringAd · en çok 160
credentialIduuidBağlantı · kimliği: credential
sourceConfigobject / arrayOkunacak yer
fieldMapobject / arrayAlan eşleştirmesi
sourceKeystringKaynaktaki anahtar alan · en çok 120
keyFieldstringTablodaki anahtar alan · en çok 120
cursorFieldstringİmleç alanı · en çok 120
onSourceDeletestring (enum)Bir kaynak kaydı kaybolduğunda · İzin verilen değerler: keep, delete
scheduleMinutesnumberÇalışma sıklığı (dakika) · en az 5 · en çok 10080
twoWaybooleanTablodaki düzenlemeler kayıtları günceller

Ön koşullar

Koşul tutmazsa işlem 409 ve şu kodlardan biriyle reddedilir:

KodNe zaman reddedilir
sync_not_foundEşitleme bulunmalı.
invalid_source_configKaynak nereden okunacağını kendi terimleriyle söylemeli.
credential_requiredVeritabanı veya Airtable kaynağı bir Uygulama bağlantısıyla okur.
key_field_unknownKayıtlar tablonun kayıtlı bir alanına göre eşleşir.
invalid_field_mapHer 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"}'
Yanıt
{
  "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"
tools/call
{
  "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_runs
  • GET /api/v1/data_sync_runs/{id}
SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
sync_idstring (uuid) · uuiddata_sync
statusstring · textqueued, running, succeeded, failed
triggerstring · textmanual, schedule, retry
retry_ofstring (uuid) · uuidevetdata_sync_run
cursor_beforestring · textevet
cursor_afterstring · textevet
fetchedinteger · int4
insertedinteger · int4
updatedinteger · int4
deletedinteger · int4
skippedinteger · int4
errorsobject · jsonb
errorstring · textevet
started_atstring (date-time) · timestamptzevet
finished_atstring (date-time) · timestamptzevet
created_bystring (uuid) · uuidevetapp_user
created_atstring (date-time) · timestamptz
updated_atstring (date-time) · timestamptz

Birincil anahtar: id

Denetimler:

  • CHECK ((jsonb_typeof(errors) = 'array'::text))

DataSync

Tablo data_sync · Kaynak data_syncs

  • GET /api/v1/data_syncs
  • GET /api/v1/data_syncs/{id}
SütunTürBoş olabilirİzin verilen değerlerBağlı olduğu tablo
idstring (uuid) · uuid
organization_idstring (uuid) · uuidorganization
workspace_idstring (uuid) · uuidworkspace
data_table_idstring (uuid) · uuiddata_table
titlestring · text
source_kindstring · textpostgres, airtable, csv_url, module, google_sheets
source_configobject · jsonb
field_mapobject · jsonb
source_keystring · text
key_fieldstring · text
cursor_fieldstring · textevet
cursor_valuestring · textevet
on_source_deletestring · textkeep, delete
schedule_minutesinteger · int4evet
statusstring · textidle, queued, running, error, paused
last_run_atstring (date-time) · timestamptzevet
last_success_atstring (date-time) · timestamptzevet
last_errorstring · textevet
consecutive_failuresinteger · int4
created_bystring (uuid) · uuidevetapp_user
created_atstring (date-time) · timestamptz
updated_atstring (date-time) · timestamptz
two_wayboolean · 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.

OlayNe olurTaşıdığı alanlar
data_sync.run_failedBir eşitleme çalıştırması başarısız oldu.syncId, runId
data_sync.run_requestedBir eşitleme çalıştırması sıraya alındı.syncId, runId, trigger
data_sync.run_succeededBir eşitleme çalıştırması bitti.syncId, runId
data_sync.sync_changedBir eşitlemenin kaynağı ya da eşlemesi değişti.id
data_sync.sync_createdBir tablo bir kaynaktan eşitlenecek şekilde ayarlandı.id, dataTableId, sourceKind
data_sync.sync_deletedBir eşitleme kaldırıldı; satırları kaldı.id
data_sync.sync_pausedBir eşitleme duraklatıldı.id
data_sync.sync_resumedBir eşitleme sürdürüldü.id
Bu sayfa yardımcı oldu mu?