Skip to main content
These endpoints control reverse ETL: querying your warehouse or lakehouse and writing rows into SaaS tools, ads platforms, and custom HTTP destinations. Authenticate with a Bearer API key. Base URL: https://api.planasonix.com
If your workspace uses a versioned base path (for example /v1), prepend it before /api. See API reference.

List syncs

Returns all reverse ETL sync definitions. GET /api/reverse-etl/syncs

Request parameters

string
Filter syncs targeting a given destination connection.
boolean
Filter by active/paused syncs.
integer
default:"50"
Page size.
string
Pagination cursor.

Example response


Create sync

Creates a new sync from a SQL or semantic query to a destination object. POST /api/reverse-etl/syncs

Request body

string
required
Display name for the sync.
string
required
Warehouse query (SQL) or documented semantic reference that resolves to a row set.
string
required
Connection ID for the destination (Salesforce, HubSpot, Iterable, and so on).
string
required
Destination object or resource name (API name for CRM entities, stream name for events APIs).
array
required
Array of mapping objects: source column or expression → destination field (see example).
string
required
One of upsert, insert, update, delete, or connector-specific modes.
object
Optional schedule: for example { "type": "cron", "expression": "0 * * * *", "timezone": "UTC" } or { "type": "manual" }.

Example response


Get sync

GET /api/reverse-etl/syncs/{id}

Request parameters

string
required
Sync ID.

Example response


Update sync

PUT /api/reverse-etl/syncs/{id}

Request parameters

string
required
Sync ID.

Request body

Same fields as create, all optional except where the server requires a full replacement for certain connectors.

Example response


Delete sync

DELETE /api/reverse-etl/syncs/{id}

Request parameters

string
required
Sync ID.

Example response


Trigger sync run

Starts a run for one or more syncs (batch semantics depend on your deployment). POST /api/reverse-etl/sync/run

Request body

string
Run a single sync by ID.
array
Run multiple syncs in one request.
boolean
default:"false"
When supported, ignores incremental watermark and reprocesses the full query result set.

Example response


Toggle sync

Enables or disables a sync without deleting its definition. POST /api/reverse-etl/sync/toggle

Request body

string
required
Sync ID.
boolean
required
Target state.

Example response


List destinations

Lists destination connections available for reverse ETL in the workspace. GET /api/reverse-etl/destinations

Request parameters

string
Filter by connector type (for example salesforce, hubspot).

Example response


List destination objects

Returns objects (entities, streams) you can target for a given destination. GET /api/reverse-etl/objects

Request parameters

string
required
Destination connection ID.
Case-insensitive filter on object label or API name.

Example response


List object fields

Returns fields for a destination object, including types and write constraints. GET /api/reverse-etl/fields

Request parameters

string
required
Destination connection ID.
string
required
Object API name.

Example response


List sync runs

Returns historical reverse ETL run records across syncs. GET /api/reverse-etl/runs

Request parameters

string
Restrict to one sync.
string
Filter by run status.
integer
default:"50"
Page size.
string
Pagination cursor.

Example response


List dead letter queue entries

Returns rows or batches that failed after retries and require manual review. GET /api/reverse-etl/dlq

Request parameters

string
Filter by sync.
boolean
false (default) for open failures; true for history.
integer
default:"50"
Page size.
string
Pagination cursor.

Example response


DLQ statistics

Aggregate counts for monitoring and alerting. GET /api/reverse-etl/dlq/stats

Request parameters

string
Scope stats to one sync; omit for workspace totals.
string
ISO 8601 timestamp; only count entries at or after this time.

Example response


Resolve DLQ entries

Marks entries resolved after you fix data or choose to skip them; optional replay may enqueue new writes. POST /api/reverse-etl/dlq/resolve

Request body

array
required
DLQ entry IDs to resolve.
string
required
Short reason code: fixed_upstream, skipped, manual_push, and so on.
boolean
default:"false"
When true and supported, re-attempts the affected records in a new run.

Example response