{"openapi":"3.0.0","paths":{"/connection_bridges":{"get":{"description":"List all active connection bridges for the current account. Connection bridges are short-lived sessions that expire after 86400 seconds.","operationId":"ConnectionBridgeOpenApiController_listConnectionBridges","parameters":[],"responses":{"200":{"description":"List of Connection Bridges has been successfully retrieved."}},"summary":"List connection bridges","tags":["Connection Bridge"]},"post":{"description":"Create a short-lived connection bridge session that expires after 86400 seconds.","operationId":"ConnectionBridgeOpenApiController_createConnectionBridge","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionBridgeCreateDto"}}}},"responses":{"201":{"description":"The connection bridge is successfully created."}},"summary":"Create a connection bridge","tags":["Connection Bridge"]}},"/connections/{id}/settings":{"get":{"description":"Get settings based on ELT Sync. The configuration is used when we want to create or update an ELT Sync. The connection should be already created before getting the settings.","operationId":"ConnectionsOpenApiController_getEltSettings","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the connection that is created.","schema":{"example":"X4ughggABSd3UY","type":"string"}}],"responses":{"200":{"description":"A JSON Schema (draft-07) describing the available settings and their constraints for the connection. The `dependencies` keyword maps a field name to a list of other field names that must be provided before that field's dependent options (e.g. its `oneOf` list) can be resolved - resolve those dependent options by providing the already-selected values via `partial_settings` in the request body.","content":{"application/json":{"schema":{"type":"object","properties":{"$schema":{"type":"string","example":"http://json-schema.org/draft-07/schema#"},"title":{"type":"string","example":"Salesforce Settings"},"type":{"type":"string","example":"object"},"properties":{"type":"object","additionalProperties":true},"required":{"type":"array","items":{"type":"string"}},"dependencies":{"type":"object","description":"Maps a field name to a list of other field names that must be provided before this field's dependent options (e.g. its `oneOf` list) can be resolved.","additionalProperties":true}},"required":["$schema","title","type","properties"],"additionalProperties":true}}}}},"summary":"Get ELT Settings for a connection","tags":["Connections"]}},"/connections":{"get":{"description":"List all Connections for the current account.","operationId":"ConnectionsOpenApiController_listConnections","parameters":[{"name":"starting_after","required":false,"in":"query","description":"The cursor to use in pagination. Use the value of the `next_cursor` field from the response of a previous list request.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return in a single page.","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}}],"responses":{"200":{"description":"List of Connections has been successfully retrieved."}},"summary":"List Connections","tags":["Connections"]}},"/connections/{id}":{"delete":{"description":"Deletes the specified Connection.","operationId":"ConnectionsOpenApiController_deleteConnection","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the Connection to delete.","schema":{"example":"X4ughggABSd3UY","type":"string"}}],"responses":{"204":{"description":"The Connection has been successfully deleted."}},"summary":"Delete Connection","tags":["Connections"]}},"/custom_reports":{"post":{"description":"Create one or more custom reports (GAQL for Google Ads, ShopifyQL for Shopify) and attach them to the given ELT Syncs. Batchable: pass multiple items to create the same or different reports across many ELT Syncs in a single call. Each item is processed independently, so one failing item does not affect the others.","operationId":"CustomReportsOpenApiController_createCustomReports","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomReportsRequestDto"}}}},"responses":{"201":{"description":"The result of each requested custom report creation, in the same order as the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCustomReportsResponseDto"}}}}},"summary":"Create custom reports","tags":["Custom Reports"]}},"/elt_streams":{"get":{"description":"List all ELT Streams in pages sorted by their creation date.","operationId":"EltStreamsOpenApiController_getEltStreams","parameters":[{"name":"elt_sync_id","required":false,"in":"query","description":"The Id of the ELT Sync that the stream belongs to.","schema":{"type":"string"}},{"name":"starting_after","required":false,"in":"query","description":"The cursor to use in pagination. Use the value of the `next_cursor` field from the response of a previous list request.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return in a single page.","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedEltStreamDto"}}}}},"summary":"List ELT Streams","tags":["ELT Streams"]}},"/elt_streams/{id}":{"get":{"description":"Get details of a specific ELT Stream by its ID.","operationId":"EltStreamsOpenApiController_getEltStream","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT Stream.","schema":{"example":"vBjnEbMi9i3P4K","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltStreamDto"}}}},"404":{"description":"Stream not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDto"}}}}},"summary":"Get ELT Stream","tags":["ELT Streams"]},"delete":{"operationId":"EltStreamsOpenApiController_deleteEltStream","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT Stream to delete.","schema":{"example":"vBjnEbMi9i3P4K","type":"string"}}],"responses":{"204":{"description":"The ELT Stream has been successfully deleted."},"404":{"description":"Stream not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDto"}}}}},"summary":"Delete ELT Stream","tags":["ELT Streams"]}},"/elt_streams/{id}/request_run":{"post":{"description":"Attempts to run the specified ELT Stream immediately.","operationId":"EltStreamsOpenApiController_requestRun","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT Stream to run.","schema":{"example":"vBjnEbMi9i3P4K","type":"string"}}],"responses":{"200":{"description":"The ELT Stream has been successfully scheduled to run now.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltStreamRequestRunResponseDto"}}}},"400":{"description":"Invalid request (e.g. sync not running, job stopped)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDto"}}}},"404":{"description":"Stream or job not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDto"}}}},"409":{"description":"Job is already running or scheduled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltStreamRequestRunConflictResponseDto"}}}}},"summary":"Request ELT Stream Run","tags":["ELT Streams"]}},"/elt_streams/{id}/request_full_refresh":{"post":{"description":"Marks the next scheduled run as a full refresh. This disregards incremental sync settings and may take longer to complete.","operationId":"EltStreamsOpenApiController_requestFullRefresh","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT Stream to refresh.","schema":{"example":"vBjnEbMi9i3P4K","type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltStreamFullRefreshRequestDto"}}}},"responses":{"204":{"description":"The ELT Stream has been successfully scheduled for a full refresh. This does not trigger the job itself — use the Request ELT Stream Run endpoint if you want to start it immediately."},"400":{"description":"Invalid request (e.g. sync not running, job stopped)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDto"}}}},"404":{"description":"Stream or job not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDto"}}}}},"summary":"Request ELT Stream Full Refresh","tags":["ELT Streams"]}},"/elt_streams/{id}/cancel_full_refresh":{"post":{"description":"Cancels a previously requested full refresh for the ELT Stream, reverting it back to incremental sync.","operationId":"EltStreamsOpenApiController_cancelFullRefresh","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT Stream to cancel the full refresh for.","schema":{"example":"vBjnEbMi9i3P4K","type":"string"}}],"responses":{"204":{"description":"The full refresh has been successfully cancelled."},"404":{"description":"Stream or job not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDto"}}}}},"summary":"Cancel ELT Stream Full Refresh","tags":["ELT Streams"]}},"/elt_streams/{id}/set_sync_interval":{"post":{"description":"Sets a custom cron schedule for this stream, pulling it out of its ELT Sync's orchestration (or shared schedule) so it runs independently.","operationId":"EltStreamsOpenApiController_setSyncInterval","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT Stream to set the sync interval for.","schema":{"example":"vBjnEbMi9i3P4K","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltStreamSyncIntervalRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltStreamDto"}}}},"400":{"description":"Invalid cron expression","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDto"}}}},"404":{"description":"Stream not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDto"}}}}},"summary":"Set ELT Stream Sync Interval","tags":["ELT Streams"]}},"/elt_streams/{id}/clear_sync_interval":{"post":{"description":"Clears the stream's custom schedule, reverting it back to its ELT Sync's orchestration/schedule.","operationId":"EltStreamsOpenApiController_clearSyncInterval","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT Stream to clear the sync interval for.","schema":{"example":"vBjnEbMi9i3P4K","type":"string"}}],"responses":{"204":{"description":"The custom sync interval has been successfully cleared."},"404":{"description":"Stream not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorDto"}}}}},"summary":"Clear ELT Stream Sync Interval","tags":["ELT Streams"]}},"/elt_stream_runs/{id}":{"get":{"description":"Get details of a specific ELT Stream Run by its unique identifier.","operationId":"EltStreamRunsOpenApiController_getEltStreamRun","parameters":[{"name":"id","required":true,"in":"path","description":"The opaque ID of the ELT Stream Run.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltStreamRunDto"}}}},"400":{"description":"Invalid run ID format."},"404":{"description":"The ELT Stream Run was not found."}},"summary":"Get ELT Stream Run","tags":["ELT Stream Runs"]}},"/elt_stream_runs":{"get":{"description":"List runs for a specific ELT Stream in pages sorted by their start date. Only runs from the last 3 months are available.","operationId":"EltStreamRunsOpenApiController_getEltStreamRuns","parameters":[{"name":"elt_stream_id","required":true,"in":"query","description":"The ID of the ELT Stream to list runs for.","schema":{"example":"vBjnEbMi9i3P4K","type":"string"}},{"name":"starting_after","required":false,"in":"query","description":"The cursor to use in pagination. Use the value of the `next_cursor` field from the response of a previous list request.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return in a single page.","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}},{"name":"sort_direction","required":false,"in":"query","description":"The direction to sort the results.","schema":{"default":"desc","example":"desc","type":"string","enum":["asc","desc"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedEltStreamRunDto"}}}},"404":{"description":""}},"summary":"List ELT Stream Runs","tags":["ELT Stream Runs"]}},"/elt_syncs/{id}/enable":{"post":{"description":"Enables scheduling for the specified ELT Sync. It will be executed periodically based on its sync interval.","operationId":"EltSyncsOpenApiController_enableEltSync","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT Sync to enable.","schema":{"example":"X4ughggABSd3UY","type":"string"}}],"responses":{"204":{"description":"The ELT Sync has been successfully enabled."}},"summary":"Enable ELT Sync","tags":["ELT Syncs"]}},"/elt_syncs/{id}/disable":{"post":{"description":"Disables scheduling for the specified ELT Sync. It will no longer be executed periodically.","operationId":"EltSyncsOpenApiController_disableEltSync","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT Sync to disable.","schema":{"example":"X4ughggABSd3UY","type":"string"}}],"responses":{"204":{"description":"The ELT Sync has been successfully disabled."}},"summary":"Disable ELT Sync","tags":["ELT Syncs"]}},"/elt_syncs":{"get":{"description":"List all ELT Syncs in pages sorted by their creation date.","operationId":"EltSyncsOpenApiController_getEltSyncs","parameters":[{"name":"starting_after","required":false,"in":"query","description":"The cursor to use in pagination. Use the value of the `next_cursor` field from the response of a previous list request.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return in a single page.","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}},{"name":"connection_id","required":false,"in":"query","description":"Filter ELT Syncs by the associated Source Connection ID.","schema":{"example":"SrcCon_12345","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedEltSyncDto"}}}}},"summary":"List ELT Syncs","tags":["ELT Syncs"]},"post":{"operationId":"EltSyncsOpenApiController_createEltSync","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltSyncCreateRequestDto"}}}},"responses":{"201":{"description":"The ELT Sync has been successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltSyncDto"}}}},"409":{"description":"The connection reached the maximum number of allowed syncs."}},"summary":"Create a new ELT Sync","tags":["ELT Syncs"]}},"/elt_syncs/{id}":{"post":{"operationId":"EltSyncsOpenApiController_updateEltSync","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltSyncUpdateRequestDto"}}}},"responses":{"200":{"description":"The ELT Sync has been successfully updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltSyncDto"}}}}},"summary":"Update an existing ELT Sync","tags":["ELT Syncs"]},"get":{"description":"Get data of a specific ELT sync.","operationId":"EltSyncsOpenApiController_getEltSync","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT sync.","schema":{"example":"X4ughggABSd3UY","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltSyncDto"}}}},"404":{"description":""}},"summary":"Get ELT Sync","tags":["ELT Syncs"]},"delete":{"description":"Delete a specific ELT sync. This will also delete all associated source streams.","operationId":"EltSyncsOpenApiController_deleteEltSync","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT sync.","schema":{"example":"X4ughggABSd3UY","type":"string"}},{"name":"removeDataReferences","required":false,"in":"query","description":"If set to true, all tables created in the destination by this ELT sync will also be removed. Default is false.","schema":{"example":"true","type":"string"}}],"responses":{"204":{"description":"The ELT Sync has been successfully deleted."}},"summary":"Delete ELT sync","tags":["ELT Syncs"]}},"/elt_syncs/{id}/orchestration":{"post":{"description":"Attaches this ELT sync to an Orchestration Workflow, so it runs as part of that workflow's runs instead of on its own schedule.","operationId":"EltSyncsOpenApiController_attachOrchestration","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT sync.","schema":{"example":"X4ughggABSd3UY","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltSyncAttachOrchestrationRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltSyncDto"}}}},"404":{"description":"ELT sync or Orchestration Workflow not found."}},"summary":"Attach ELT sync to an orchestration","tags":["ELT Syncs"]},"delete":{"description":"Detaches this ELT sync from its Orchestration Workflow. Streams with their own sync_interval will resume running on it; streams without one will fall back to the sync_interval on the sync (defaulting to daily if none is set).","operationId":"EltSyncsOpenApiController_detachOrchestration","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT sync.","schema":{"example":"X4ughggABSd3UY","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltSyncDto"}}}},"404":{"description":"ELT sync not found."}},"summary":"Detach ELT sync from its orchestration","tags":["ELT Syncs"]}},"/elt_syncs/{id}/available_source_streams":{"get":{"description":"List all streams that can be created for the given ELT sync.","operationId":"EltSyncsOpenApiController_getSourceStreams","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT sync.","schema":{"example":"X4ughggABSd3UY","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedAvailableEltStreamDto"}}}}},"summary":"Get available streams for ELT sync","tags":["ELT Syncs"]}},"/elt_syncs/{id}/source_streams":{"post":{"description":"Add source streams to the given ELT sync and return the newly created streams. This method will only add new streams and update existing streams","operationId":"EltSyncsOpenApiController_addSourceStreams","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT sync.","schema":{"example":"X4ughggABSd3UY","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltSyncAddSourceStreamsRequestDto"}}}},"responses":{"201":{"description":"The source streams have been successfully added.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltSyncAddSourceStreamsResponseDto"}}}},"400":{"description":""}},"summary":"Add source streams to ELT sync","tags":["ELT Syncs"]}},"/elt_syncs/{id}/status":{"get":{"description":"Get the current status of an ELT sync, including active and latest sync states for each source stream.","operationId":"EltSyncsOpenApiController_getEltSyncStatus","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the ELT sync.","schema":{"example":"X4ughggABSd3UY","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EltSyncStatusDto"}}}}},"summary":"Get ELT Sync Status","tags":["ELT Syncs"]}},"/integrations":{"get":{"description":"List all integrations that are available in Weld for the current account based on their plan and entitlements.","operationId":"IntegrationsOpenApiController_getIntegrations","parameters":[{"name":"ability","required":false,"in":"query","description":"Filter integrations by a supported ability. Defaults to `EltSource` when omitted.","schema":{"$ref":"#/components/schemas/OpenApiIntegrationAbility"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedIntegrationDto"}}}}},"summary":"List integrations","tags":["Integrations"]}},"/orchestration_runs":{"get":{"description":"List all Orchestration Runs in pages, sorted by due date in descending order (most recent first). Optionally filter by Orchestration ID.","operationId":"OrchestrationRunsOpenApiController_getOrchestrationRuns","parameters":[{"name":"starting_after","required":false,"in":"query","description":"The cursor to use in pagination. Use the value of the `next_cursor` field from the response of a previous list request.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return in a single page.","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}},{"name":"orchestration_id","required":false,"in":"query","description":"Filter runs by Orchestration ID.","schema":{"example":"3LIw2FdxoByya9","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedOrchestrationRunDto"}}}}},"summary":"List Orchestration Runs","tags":["Orchestration Runs"]}},"/orchestration_runs/{id}":{"get":{"description":"Get a specific Orchestration Run by its ID.","operationId":"OrchestrationRunsOpenApiController_getOrchestrationRun","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the Orchestration Run.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrchestrationRunDto"}}}},"404":{"description":"Orchestration Run not found."}},"summary":"Get Orchestration Run","tags":["Orchestration Runs"]}},"/orchestrations":{"get":{"description":"List all Orchestrations in pages, sorted by name in alphabetical order.","operationId":"OrchestrationsOpenApiController_getOrchestrations","parameters":[{"name":"starting_after","required":false,"in":"query","description":"The cursor to use in pagination. Use the value of the `next_cursor` field from the response of a previous list request.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return in a single page.","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedOrchestrationDto"}}}}},"summary":"List Orchestrations","tags":["Orchestrations"]},"post":{"description":"Create a new Orchestration with the given name and cron schedule.","operationId":"OrchestrationsOpenApiController_createOrchestration","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrchestrationCreateRequestDto"}}}},"responses":{"201":{"description":"The Orchestration has been successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrchestrationDto"}}}}},"summary":"Create Orchestration","tags":["Orchestrations"]}},"/orchestrations/{id}":{"get":{"description":"Get a specific Orchestration by its ID.","operationId":"OrchestrationsOpenApiController_getOrchestration","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the Orchestration.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrchestrationDto"}}}},"404":{"description":"Orchestration not found."}},"summary":"Get Orchestration","tags":["Orchestrations"]},"post":{"description":"Update an existing Orchestration.","operationId":"OrchestrationsOpenApiController_updateOrchestration","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the Orchestration to update.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrchestrationUpdateRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrchestrationDto"}}}},"404":{"description":"Orchestration not found."}},"summary":"Update Orchestration","tags":["Orchestrations"]},"delete":{"description":"Delete an Orchestration. Any ELT Syncs, Transforms or Reverse ETL Syncs attached to it fall back to the provided cron schedule instead of being left without one.","operationId":"OrchestrationsOpenApiController_deleteOrchestration","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the Orchestration to delete.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}},{"name":"cron_schedule","required":true,"in":"query","description":"Cron expression to fall back to for any items currently attached to this Orchestration.","schema":{"example":"0 0 * * *","type":"string"}}],"responses":{"204":{"description":"The Orchestration has been successfully deleted."},"400":{"description":"cron_schedule is missing or is not a valid cron expression."},"404":{"description":"Orchestration not found."}},"summary":"Delete Orchestration","tags":["Orchestrations"]}},"/orchestrations/{id}/request_run":{"post":{"description":"Attempts to run the specified Orchestration immediately.","operationId":"OrchestrationsOpenApiController_requestRun","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the Orchestration to run.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}}],"responses":{"200":{"description":"The scheduled Orchestration Run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrchestrationRunDto"}}}},"404":{"description":"Orchestration not found."}},"summary":"Request Orchestration Run","tags":["Orchestrations"]}},"/reverse_etl_failed_records":{"get":{"description":"List the unresolved record errors captured for the specified Reverse ETL Sync.","operationId":"ReverseEtlFailedRecordsOpenApiController_getReverseEtlSyncFailedRecordErrors","parameters":[{"name":"reverse_etl_sync_id","required":true,"in":"query","description":"The ID of the Reverse ETL Sync to fetch record errors for.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}},{"name":"limit","required":false,"in":"query","description":"The maximum number of record errors to return.","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEtlSyncFailedRecordErrorsDto"}}}},"404":{"description":""}},"summary":"List Reverse ETL Sync Failed Record Errors","tags":["Reverse ETL Failed Records"]}},"/reverse_etl_failed_records/count":{"get":{"description":"Get the number of unresolved failed records captured for the specified Reverse ETL Sync.","operationId":"ReverseEtlFailedRecordsOpenApiController_getReverseEtlSyncFailedRecordCount","parameters":[{"name":"reverse_etl_sync_id","required":true,"in":"query","description":"The ID of the Reverse ETL Sync to fetch record errors for.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEtlSyncFailedRecordCountDto"}}}},"404":{"description":""}},"summary":"Get Reverse ETL Sync Failed Record count","tags":["Reverse ETL Failed Records"]}},"/reverse_etl_failed_records/retry":{"post":{"description":"Retries the given record IDs on the specified Reverse ETL Sync at the next run by resetting their errors.","operationId":"ReverseEtlFailedRecordsOpenApiController_retryReverseEtlSyncFailedRecords","parameters":[{"name":"reverse_etl_sync_id","required":true,"in":"query","description":"The ID of the Reverse ETL Sync to fetch record errors for.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetryReverseEtlSyncRecordErrorsRequestDto"}}}},"responses":{"204":{"description":"The errors have been successfully reset to be retried at the next run."},"404":{"description":""}},"summary":"Retry Reverse ETL Sync Failed Records","tags":["Reverse ETL Failed Records"]}},"/reverse_etl_failed_records/retry_all":{"post":{"description":"Retries all failed records captured for the specified Reverse ETL Sync at the next run by resetting their errors.","operationId":"ReverseEtlFailedRecordsOpenApiController_retryAllReverseEtlSyncFailedRecords","parameters":[{"name":"reverse_etl_sync_id","required":true,"in":"query","description":"The ID of the Reverse ETL Sync to fetch record errors for.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"responses":{"204":{"description":"All errors have been successfully reset to be retried at the next run."},"404":{"description":""}},"summary":"Retry all Reverse ETL Sync Failed Records","tags":["Reverse ETL Failed Records"]}},"/reverse_etl_sync_runs/{id}":{"get":{"description":"Get details of a specific Reverse ETL Sync Run by its unique identifier.","operationId":"ReverseEtlSyncRunsOpenApiController_getReverseEtlSyncRun","parameters":[{"name":"id","required":true,"in":"path","description":"The opaque ID of the Reverse ETL Sync Run.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEtlSyncRunDto"}}}},"400":{"description":"Invalid run ID format."},"404":{"description":"The Reverse ETL Sync Run was not found."}},"summary":"Get Reverse ETL Sync Run","tags":["Reverse ETL Sync Runs"]}},"/reverse_etl_sync_runs":{"get":{"description":"List runs for a specific Reverse ETL Sync in pages sorted by their start date.","operationId":"ReverseEtlSyncRunsOpenApiController_getReverseEtlSyncRuns","parameters":[{"name":"reverse_etl_sync_id","required":true,"in":"query","description":"The ID of the Reverse ETL Sync to list runs for.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}},{"name":"starting_after","required":false,"in":"query","description":"The cursor to use in pagination. Use the value of the `next_cursor` field from the response of a previous list request.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return in a single page.","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}},{"name":"sort_direction","required":false,"in":"query","description":"The direction to sort the results.","schema":{"default":"desc","example":"desc","type":"string","enum":["asc","desc"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedReverseEtlSyncRunDto"}}}},"404":{"description":""}},"summary":"List Reverse ETL Sync Runs","tags":["Reverse ETL Sync Runs"]}},"/reverse_etl_syncs":{"get":{"description":"List all Reverse ETL Syncs in pages sorted by their creation date.","operationId":"ReverseEtlSyncsOpenApiController_getReverseEtlSyncs","parameters":[{"name":"starting_after","required":false,"in":"query","description":"The cursor to use in pagination. Use the value of the `next_cursor` field from the response of a previous list request.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return in a single page.","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}},{"name":"destination_connection_id","required":false,"in":"query","description":"Filter Reverse ETL Syncs by the associated Destination Connection ID.","schema":{"example":"conn_12345","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedReverseEtlSyncDto"}}}}},"summary":"List Reverse ETL Syncs","tags":["Reverse ETL Syncs"]},"post":{"description":"Create a Reverse ETL Sync that reads from a source Transform and writes to a destination connection. The sync is activated immediately so it runs on its schedule (or as part of its Orchestration Workflow). The `settings` are validated against the settings schema (see the \"Get Reverse ETL Settings Schema for a connection\" endpoint).","operationId":"ReverseEtlSyncsOpenApiController_createReverseEtlSync","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReverseEtlSyncRequestDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEtlSyncWithSettingsDto"}}}},"400":{"description":"The request is invalid (e.g. invalid `settings`, object type, or schedule)."}},"summary":"Create Reverse ETL Sync","tags":["Reverse ETL Syncs"]}},"/reverse_etl_syncs/destination_schema":{"get":{"description":"List the properties available in the destination connection for a given object type. These are the properties used as the right-hand side of a Reverse ETL mapping.","operationId":"ReverseEtlSyncsOpenApiController_getReverseEtlDestinationSchema","parameters":[{"name":"connection_id","required":true,"in":"query","description":"The ID of the (already created) destination connection to read the schema from.","schema":{"example":"X4ughggABSd3UY","type":"string"}},{"name":"object_type_id","required":true,"in":"query","description":"The ID of the object type as used by the destination.","schema":{"example":"Q29udGFjdHx8Y29udGFjdA","type":"string"}},{"name":"operation_mode","required":true,"in":"query","description":"The operation mode the destination properties are resolved for (e.g. `MERGE`).","schema":{"example":"MERGE","type":"string"}},{"name":"source_id","required":true,"in":"query","description":"The ID of the source Transform the sync reads from.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEtlDestinationSchemaDto"}}}}},"summary":"Get Reverse ETL destination schema","tags":["Reverse ETL Syncs"]}},"/reverse_etl_syncs/available_operations":{"get":{"description":"List the operations available in the destination connection for a given object type. These determine how records are written to the destination (e.g. the operation type and mode).","operationId":"ReverseEtlSyncsOpenApiController_getReverseEtlAvailableOperations","parameters":[{"name":"connection_id","required":true,"in":"query","description":"The ID of the (already created) destination connection to read the available operations from.","schema":{"example":"X4ughggABSd3UY","type":"string"}},{"name":"object_type_id","required":true,"in":"query","description":"The opaque ID of the object type as used by the destination.","schema":{"example":"Q29udGFjdHx8Y29udGFjdA","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEtlAvailableOperationsDto"}}}}},"summary":"List available Reverse ETL operations","tags":["Reverse ETL Syncs"]}},"/reverse_etl_syncs/object_types":{"get":{"description":"List the object types available in the destination connection. These are the objects (e.g. Contact, Company) that a Reverse ETL Sync can write to. The connection should already be created before fetching the object types.","operationId":"ReverseEtlSyncsOpenApiController_getReverseEtlObjectTypes","parameters":[{"name":"connection_id","required":true,"in":"query","description":"The ID of the (already created) destination connection.","schema":{"example":"X4ughggABSd3UY","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEtlObjectTypesDto"}}}}},"summary":"List Reverse ETL Object Types for a connection","tags":["Reverse ETL Syncs"]}},"/reverse_etl_syncs/settings_schema":{"post":{"description":"Get the settings for a connection, used when creating or updating a Reverse ETL Sync. The connection should already be created before getting the settings. Some settings have options that depend on other settings (e.g. the available sheets depend on the selected file URL) - provide the already-selected values via `partial_settings` to resolve those dependent options. This is a read-only operation - it does not create or modify a Reverse ETL Sync; POST is used so the (potentially large) `partial_settings` can be sent in the request body.","operationId":"ReverseEtlSyncsOpenApiController_getReverseEtlSettingsSchema","parameters":[{"name":"connection_id","required":true,"in":"query","description":"The ID of the (already created) destination connection.","schema":{"example":"X4ughggABSd3UY","type":"string"}},{"name":"object_type","required":true,"in":"query","description":"The ID of the object type to get the settings for (e.g. `contact`).","schema":{"example":"contact","type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEtlSettingsRequestDto"}}}},"responses":{"200":{"description":"A JSON Schema (draft-07) describing the available settings and their constraints for the connection. The `dependencies` keyword maps a field name to a list of other field names that must be provided before that field's dependent options (e.g. its `oneOf` list) can be resolved - resolve those dependent options by providing the already-selected values via `partial_settings` in the request body.","content":{"application/json":{"schema":{"type":"object","properties":{"$schema":{"type":"string","example":"http://json-schema.org/draft-07/schema#"},"title":{"type":"string","example":"Salesforce Settings"},"type":{"type":"string","example":"object"},"properties":{"type":"object","additionalProperties":true},"required":{"type":"array","items":{"type":"string"}},"dependencies":{"type":"object","description":"Maps a field name to a list of other field names that must be provided before this field's dependent options (e.g. its `oneOf` list) can be resolved.","additionalProperties":true}},"required":["$schema","title","type","properties"],"additionalProperties":true}}}}},"summary":"Get Reverse ETL Settings Schema for a connection","tags":["Reverse ETL Syncs"]}},"/reverse_etl_syncs/{id}":{"get":{"description":"Get data of a specific Reverse ETL Sync.","operationId":"ReverseEtlSyncsOpenApiController_getReverseEtlSync","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the Reverse ETL Sync.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEtlSyncWithSettingsDto"}}}},"404":{"description":""}},"summary":"Get Reverse ETL Sync","tags":["Reverse ETL Syncs"]},"post":{"description":"Updates a Reverse ETL Sync. The sync must be paused (deactivated) before it can be updated. The `settings` are validated against the settings schema (see the \"Get Reverse ETL Settings Schema for a connection\" endpoint).","operationId":"ReverseEtlSyncsOpenApiController_updateReverseEtlSync","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the Reverse ETL Sync to update.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateReverseEtlSyncRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEtlSyncWithSettingsDto"}}}},"400":{"description":"The request is invalid (e.g. invalid `settings`, object type, or the sync is still active)."},"404":{"description":""}},"summary":"Update Reverse ETL Sync","tags":["Reverse ETL Syncs"]},"delete":{"description":"Deletes the specified Reverse ETL Sync.","operationId":"ReverseEtlSyncsOpenApiController_deleteReverseEtlSync","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the Reverse ETL Sync to delete.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"responses":{"204":{"description":"The Reverse ETL Sync has been successfully deleted."},"404":{"description":""}},"summary":"Delete Reverse ETL Sync","tags":["Reverse ETL Syncs"]}},"/reverse_etl_syncs/{id}/activate":{"post":{"description":"Activates the specified Reverse ETL Sync so it runs periodically based on its schedule.","operationId":"ReverseEtlSyncsOpenApiController_activateReverseEtlSync","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the Reverse ETL Sync to activate.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"responses":{"204":{"description":"The Reverse ETL Sync has been successfully activated."},"404":{"description":""}},"summary":"Activate Reverse ETL Sync","tags":["Reverse ETL Syncs"]}},"/reverse_etl_syncs/{id}/deactivate":{"post":{"description":"Deactivates the specified Reverse ETL Sync so it no longer runs on its schedule.","operationId":"ReverseEtlSyncsOpenApiController_deactivateReverseEtlSync","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the Reverse ETL Sync to deactivate.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"responses":{"204":{"description":"The Reverse ETL Sync has been successfully deactivated."},"404":{"description":""}},"summary":"Deactivate Reverse ETL Sync","tags":["Reverse ETL Syncs"]}},"/reverse_etl_syncs/{id}/request_run":{"post":{"description":"Attempts to run the specified Reverse ETL Sync immediately.","operationId":"ReverseEtlSyncsOpenApiController_requestRun","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the Reverse ETL Sync to run.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"responses":{"200":{"description":"The Reverse ETL Sync has been successfully scheduled to run now.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEtlSyncRequestRunResponseDto"}}}},"400":{"description":"The Reverse ETL Sync is not eligible to run now."},"409":{"description":"The Reverse ETL Sync already has an active run","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseEtlSyncRequestRunConflictResponseDto"}}}}},"summary":"Request Reverse ETL Sync Run","tags":["Reverse ETL Syncs"]}},"/transforms":{"get":{"description":"List all transforms (models) in pages sorted by creation date.","operationId":"TransformOpenApiController_listTransforms","parameters":[{"name":"starting_after","required":false,"in":"query","description":"The cursor to use in pagination. Use the value of the `next_cursor` field from the response of a previous list request.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return in a single page.","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}},{"name":"status","required":false,"in":"query","description":"Filter by status.","schema":{"enum":["draft","published"],"type":"string"}},{"name":"name","required":false,"in":"query","description":"Filter by name (case-insensitive substring match).","schema":{"type":"string"}},{"name":"folder_path","required":false,"in":"query","description":"Filter by folder path (e.g. \"analytics/marketing\").","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedTransformDto"}}}}},"summary":"List transforms","tags":["Transforms"]},"post":{"description":"Create a new transform. Provide sql_template with {{weldTag}} references. Set publish=true to immediately materialize in the data warehouse. With publish=true and materialization \"table\", cron_expression puts the transform on its own materialization schedule.","operationId":"TransformOpenApiController_createTransform","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformCreateRequestDto"}}}},"responses":{"201":{"description":"The transform has been successfully created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformDto"}}}}},"summary":"Create transform","tags":["Transforms"]}},"/transforms/available_references":{"get":{"description":"List all available {{weldTag}} references that can be used in sql_template. This includes raw views from synced sources and published transforms.","operationId":"TransformOpenApiController_getAvailableReferences","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailableReferencesResponseDto"}}}}},"summary":"List available references","tags":["Transforms"]}},"/transforms/{id}":{"get":{"description":"Get a specific transform by ID.","operationId":"TransformOpenApiController_getTransform","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the transform.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformDto"}}}},"404":{"description":"Transform not found."}},"summary":"Get transform","tags":["Transforms"]},"patch":{"description":"Update an existing transform. All fields are optional. If the transform is published and publish=true, changes to sql_template or materialization will trigger a re-publish to the DWH. Use cron_expression to set the transform's own materialization schedule (published table transforms only), or null to clear it.","operationId":"TransformOpenApiController_updateTransform","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the transform.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformUpdateRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformDto"}}}},"404":{"description":"Transform not found."}},"summary":"Update transform","tags":["Transforms"]},"delete":{"description":"Soft-delete a transform. If the transform is published, its view/table will be removed from the data warehouse.","operationId":"TransformOpenApiController_deleteTransform","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the transform.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"responses":{"204":{"description":"The transform has been successfully deleted."}},"summary":"Delete transform","tags":["Transforms"]}},"/transforms/{id}/schema":{"get":{"description":"List the columns of a transform. These can be used as the source (left-hand side) of a Reverse ETL mapping.","operationId":"TransformOpenApiController_getTransformSchema","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the transform.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformSchemaDto"}}}},"404":{"description":"Transform not found."}},"summary":"Get transform schema","tags":["Transforms"]}},"/transforms/{id}/orchestration":{"post":{"description":"Attaches this transform to an Orchestration Workflow, so it materializes as part of that workflow's runs instead of on its own schedule.","operationId":"TransformOpenApiController_attachOrchestration","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the transform.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformAttachOrchestrationRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformDto"}}}},"400":{"description":"Transform must be published to attach to an orchestration."},"404":{"description":"Transform or Orchestration Workflow not found."}},"summary":"Attach transform to an orchestration","tags":["Transforms"]},"delete":{"description":"Detaches this transform from its Orchestration Workflow, reverting it to its own schedule. Pass `cron_expression` to give it one in the same call — without it, a transform that has no schedule of its own is left with nothing to rebuild it (`rebuild_trigger` becomes \"none\").","operationId":"TransformOpenApiController_detachOrchestration","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the transform.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}},{"name":"cron_expression","required":false,"in":"query","description":"Cron expression (UTC) to schedule the transform on as it detaches. Requires a published transform materialized as a table. Omit to leave the existing schedule, if any, untouched.","schema":{"example":"0 6 * * *","type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformDto"}}}},"400":{"description":"The cron expression is invalid, or the transform is not a published table."},"404":{"description":"Transform not found."}},"summary":"Detach transform from its orchestration","tags":["Transforms"]}},"/transforms/bulk":{"post":{"description":"Create multiple transforms in a single request. Each transform is processed independently; failures on individual items do not affect others. Maximum 50 transforms per request.","operationId":"TransformOpenApiController_bulkCreateTransforms","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformBulkCreateRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformBulkCreateResponseDto"}}}}},"summary":"Bulk create transforms","tags":["Transforms"]}},"/transforms/{id}/versions":{"get":{"description":"List the SQL revision history for a transform, ordered by most recent first.","operationId":"TransformOpenApiController_listVersions","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the transform.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}},{"name":"starting_after","required":false,"in":"query","description":"The cursor to use in pagination. Use the value of the `next_cursor` field from the response of a previous list request.","schema":{"example":"ewK8sDoLNI4CFR","type":"string"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return in a single page.","schema":{"minimum":1,"maximum":100,"default":10,"type":"integer"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedTransformVersionDto"}}}},"404":{"description":"Transform not found."}},"summary":"List transform versions","tags":["Transforms"]}},"/transforms/{id}/publish":{"post":{"description":"Publish or re-publish a transform to the data warehouse. This materializes the latest SQL as a view or table. You can optionally override name, folder_path, and materialization for this publish.","operationId":"TransformOpenApiController_publishTransform","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the transform.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformPublishRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformDto"}}}},"404":{"description":"Transform not found."}},"summary":"Publish transform","tags":["Transforms"]}},"/transforms/{id}/rematerialize":{"post":{"description":"Rebuild a published transform's current definition in the data warehouse without changing it — re-runs the existing published SQL to fix a stale materialization. Unlike publish it takes no SQL/name/folder/materialization overrides, so it stays available in GitHub mode (where creating or editing transforms must come from Git). The transform must already be published.","operationId":"TransformOpenApiController_rematerializeTransform","parameters":[{"name":"id","required":true,"in":"path","description":"The ID of the transform.","schema":{"example":"OoORhGXUVjsqFG","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformRematerializeRequestDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransformDto"}}}},"404":{"description":"Transform not found."}},"summary":"Rematerialize transform","tags":["Transforms"]}},"/transforms/query_previews":{"post":{"description":"Execute a SQL template asynchronously against the data warehouse. The {{weldTag}} references in the template are automatically resolved. Returns a query_execution_id that can be used to poll for status and retrieve results.","operationId":"TransformOpenApiController_createQueryPreview","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryPreviewCreateRequestDto"}}}},"responses":{"201":{"description":"The query has been submitted for execution.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryPreviewCreateResponseDto"}}}}},"summary":"Create async query preview","tags":["Transforms"]}},"/transforms/query_previews/{queryExecutionId}/status":{"get":{"description":"Check the execution status of an async query preview. Poll this endpoint until the status is \"DONE\", then retrieve results.","operationId":"TransformOpenApiController_getQueryPreviewStatus","parameters":[{"name":"queryExecutionId","required":true,"in":"path","description":"The query execution ID returned from the create query preview endpoint.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryPreviewStatusResponseDto"}}}}},"summary":"Get query preview status","tags":["Transforms"]}},"/transforms/query_previews/{queryExecutionId}/result":{"get":{"description":"Retrieve the results of a completed async query preview. Only call this endpoint after the status endpoint returns \"DONE\".","operationId":"TransformOpenApiController_getQueryPreviewResult","parameters":[{"name":"queryExecutionId","required":true,"in":"path","description":"The query execution ID returned from the create query preview endpoint.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryPreviewResultResponseDto"}}}}},"summary":"Get query preview result","tags":["Transforms"]}}},"info":{"title":"Weld REST API","description":"With the Weld REST API you can programmatically control your syncs","version":"0.1","contact":{}},"tags":[],"servers":[{"url":"https://connect.weld.app"}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","name":"x-api-key","in":"header","description":"The API key from Settings -> API Keys"}},"schemas":{"Account":{"type":"object","properties":{}},"EltSync":{"type":"object","properties":{}},"SourceStream":{"type":"object","properties":{}},"Connection":{"type":"object","properties":{}},"EnhancedIntegration":{"type":"object","properties":{}},"Sync":{"type":"object","properties":{}},"Object":{"type":"object","properties":{}},"TemplateConfig":{"type":"object","properties":{}},"ApiKeyResponse":{"type":"object","properties":{}},"ConnectionBridgeCreateDto":{"type":"object","properties":{"redirect_uri":{"type":"string","description":"The redirect URI of the connection authentication flow. Must be a valid URL with https:// protocol, except for localhost. No port is allowed except for localhost. No query parameters are allowed.","example":"https://subdomain.mypage.com/page"},"integration_id":{"type":"string","description":"The integration id.","example":"google-drive"},"connection_id":{"type":"string","description":"Id of an existing Connection if the connection is being reauthorized.","example":"q4Rk8vp_fhTjqf"},"state":{"type":"string","description":"State that will be passed back to the redirect URI after the user has authorized the connection.","maxLength":255,"example":"giOoRgo5G7L8REPyWZrO"},"label":{"type":"string","description":"Label for the connection. This is a user-friendly name for the connection.","example":"google-drive-business-folder","minLength":1}},"required":["redirect_uri","integration_id","label"]},"CustomReportCreateItemDto":{"type":"object","properties":{"elt_sync_id":{"type":"string","description":"The ID of the ELT Sync to attach the custom report to.","example":"X4ughggABSd3UY"},"name":{"type":"string","description":"The name of the custom report. Used to derive the resulting source stream name.","example":"Weekly Spend by Campaign"},"query":{"type":"string","description":"The query defining the report. GAQL for Google Ads connections, ShopifyQL for Shopify connections.","example":"SELECT campaign.id, campaign.name, metrics.cost_micros FROM campaign"}},"required":["elt_sync_id","name","query"]},"CreateCustomReportsRequestDto":{"type":"object","properties":{"reports":{"description":"The custom reports to create. To duplicate the same report across many ELT Syncs, repeat the same name/query with a different elt_sync_id for each entry.","type":"array","items":{"$ref":"#/components/schemas/CustomReportCreateItemDto"}},"add_as_source_stream":{"type":"boolean","description":"Whether to also register each created report as an active source stream on its ELT Sync so it starts syncing on the next run. Defaults to true.","default":true}},"required":["reports"]},"CustomReportCreateErrorDto":{"type":"object","properties":{"error_code":{"enum":["connection_error","connection_lost_access","invalid_query","not_found","unknown","unsupported_integration"],"type":"string","description":"A machine-readable category for the error. \"connection_lost_access\" means the connection needs to be reauthorized before retrying."},"message":{"type":"string","description":"A human-readable message describing the error."}},"required":["error_code","message"]},"CustomReportCreateResultDto":{"type":"object","properties":{"elt_sync_id":{"type":"string","description":"The ID of the ELT Sync the report was requested for."},"name":{"type":"string","description":"The name of the custom report, as requested."},"source_stream_name":{"type":"string","description":"The resulting source stream name. Present when the report was created successfully."},"error":{"description":"Present when creation failed. Absence of this field means the report was created successfully.","allOf":[{"$ref":"#/components/schemas/CustomReportCreateErrorDto"}]}},"required":["elt_sync_id","name"]},"CreateCustomReportsResponseDto":{"type":"object","properties":{"results":{"description":"One result per requested custom report.","type":"array","items":{"$ref":"#/components/schemas/CustomReportCreateResultDto"}}},"required":["results"]},"EltStreamDto":{"type":"object","properties":{"id":{"type":"string","description":"The Id of the ELT Stream.","example":"SCTVdLAcyDTgNx"},"elt_sync_id":{"type":"string","description":"The Id of the ELT Sync that the ELT Stream belongs to.","example":"3LIw2FdxoByya9"},"name":{"type":"string","description":"The name of the ELT Stream","example":"users"},"incremental_primary_key_name":{"description":"The name of the primary key field used for incremental sync. Most commonly used for database incremental syncs.","example":["id"],"type":"array","items":{"type":"string"}},"incremental_pointer_id":{"type":"string","description":"The name of the field used for incremental sync cursor.","example":"updated_at"},"full_sync_at_midnight":{"type":"boolean","description":"Indicates whether the full sync should be performed at midnight.","example":false},"full_sync_always":{"type":"boolean","description":"Indicates whether the full sync should always be performed.","example":false},"protected_from_full_sync":{"type":"boolean","description":"Indicates whether the stream is protected from full sync.","example":false},"created_at":{"format":"date-time","type":"string","description":"The datetime when the ELT Stream was created.","example":"2020-01-01T00:00:00.000Z"},"updated_at":{"format":"date-time","type":"string","description":"The datetime when the ELT Stream was last updated.","example":"2020-01-01T00:00:00.000Z"},"excluded_substreams":{"description":"Excluded substreams from syncing.","example":["substream1","substream2"],"type":"array","items":{"type":"string"}},"enabled_history_table":{"type":"boolean","description":"Whether history table(s) are enabled for this stream","example":false},"sync_interval":{"type":"string","nullable":true,"description":"Custom cron schedule for this stream. When set, the stream is pulled out of its ELT Sync (orchestration or schedule) and runs on its own schedule. Null means it follows the parent ELT Sync.","example":"0 0 * * *"}},"required":["id","elt_sync_id","name","full_sync_at_midnight","full_sync_always","protected_from_full_sync","created_at","updated_at","excluded_substreams","enabled_history_table"]},"PagedEltStreamDto":{"type":"object","properties":{"has_more":{"type":"boolean","description":"Indicates whether there are more items to be fetched in the subsequent pages.","example":true},"next_cursor":{"type":"string","description":"The cursor to use in pagination. Use this value as `starting_after` to get the next page.","example":"VeN1GjhVIq1D9h"},"data":{"description":"List of ELT Streams","type":"array","items":{"$ref":"#/components/schemas/EltStreamDto"}}},"required":["has_more","data"]},"ErrorDto":{"type":"object","properties":{"error_code":{"type":"string","description":"A specific error code representing the error type"},"message":{"type":"string","description":"A human-readable message describing the error"}},"required":["error_code","message"]},"EltStreamRequestRunResponseDto":{"type":"object","properties":{"status_url":{"type":"string","description":"URL to poll for the status of the triggered run. Run scheduling is asynchronous and may take minutes or even up to an hour depending on the integration API constraints. An empty response from this URL does not indicate failure — it means the run has not yet been scheduled.","example":"/elt_stream_runs?elt_stream_id=vBjnEbMi9i3P4K&starting_after=c3RyZWFtLXN5bmMtMTIzfDIwMjQtMDMtMjBUMDk6MDA6MDAuMDAwWg&limit=1&sort_direction=asc"}},"required":["status_url"]},"EltStreamRequestRunConflictResponseDto":{"type":"object","properties":{"error_code":{"type":"string","description":"A specific error code representing the error type"},"message":{"type":"string","description":"A human-readable message describing the error"},"active_run_id":{"type":"string","description":"The ID of the currently active run that caused the conflict. Provided when the request to run conflicts with an already running run.","example":"c3RyZWFtLXN5bmMtMTIzfDIwMjQtMDMtMjBUMDk6MDA6MDAuMDAwWg"}},"required":["error_code","message"]},"EltStreamFullRefreshRequestDto":{"type":"object","properties":{"reset_history_table":{"type":"boolean","description":"Whether to also reset the history table(s). This causes permanent data loss of previously accumulated historical records.","default":false}}},"EltStreamSyncIntervalRequestDto":{"type":"object","properties":{"sync_interval":{"type":"string","description":"Cron expression for the stream to run on its own schedule (e.g. \"0 0 * * *\").","example":"0 0 * * *"}},"required":["sync_interval"]},"EltStreamRunDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique run identifier (opaque)","example":"c3RyZWFtLXN5bmMtMTIzfDIwMjQtMDMtMjBUMDk6MDA6MDAuMDAwWg"},"elt_sync_id":{"type":"string","description":"The ELT Sync ID","example":"X4ughggABSd3UY"},"elt_stream_id":{"type":"string","description":"The ELT stream ID","example":"X4ughggABSd3UY"},"started_at":{"type":"string","description":"When the run started","example":"2024-03-20T09:00:00.000Z"},"finished_at":{"type":"string","description":"When the run finished","example":"2024-03-20T09:05:00.000Z"},"status":{"enum":["CHUNK_COMPLETED","COMPLETED","FAILED","RUNNING"],"type":"string","description":"Run status"},"rows_synced":{"type":"number","description":"Number of rows synced","example":500}},"required":["id","elt_sync_id","elt_stream_id","started_at"]},"PagedEltStreamRunDto":{"type":"object","properties":{"has_more":{"type":"boolean","description":"Indicates whether there are more items to be fetched in the subsequent pages.","example":true},"next_cursor":{"type":"string","description":"The cursor to use in pagination. Use this value as `starting_after` to get the next page.","example":"VeN1GjhVIq1D9h"},"data":{"description":"List of ELT Stream Runs. Only runs from the last 3 months are returned.","type":"array","items":{"$ref":"#/components/schemas/EltStreamRunDto"}}},"required":["has_more","data"]},"EltSyncDto":{"type":"object","properties":{"account_id":{"type":"string","description":"The Id of the Account.","example":"acc_789"},"config":{"type":"object","description":"The configuration for the ELT sync.","example":{"sourceSettings":{}}},"created_at":{"format":"date-time","type":"string","description":"The datetime when the ELT Sync was created.","example":"2020-01-01T00:00:00.000Z"},"destination_connection_id":{"type":"string","description":"The Id of the Destination Connection.","example":"conn_456"},"destination_integration_id":{"type":"string","description":"The Id of the Destination Integration.","example":"bigquery"},"destination_schema_name":{"type":"string","description":"The name of the destination schema.","example":"my_schema"},"enabled":{"type":"boolean","description":"Whether the ELT sync is enabled and running on its schedule.","example":true},"id":{"type":"string","description":"The Id of the ELT Sync.","example":"OoORhGXUVjsqFG"},"orchestration_workflow_id":{"type":"string","description":"The Id of the Orchestration Workflow that the sync is attached to.","example":"3LIw2FdxoByya9"},"source_connection_id":{"type":"string","description":"The Id of the Source Connection.","example":"conn_123"},"source_integration_id":{"type":"string","description":"The Id of the Source Integration.","example":"excel"},"source_streams":{"description":"The source streams that belong to this ELT sync.","type":"array","items":{"$ref":"#/components/schemas/EltStreamDto"}},"start_date":{"format":"date-time","type":"string","description":"The date from when the sync should synchronize the data.","example":"2020-01-01T00:00:00.000Z"},"status":{"type":"string","description":"The status of the sync.","example":"RUNNING","enum":["NOT_STARTED","RUNNING","FAILED","PAUSED"]},"sync_interval":{"type":"string","description":"The cron expression when the sync should run. Provided if sync is not attached to an Orchestration.","format":"cron expression","example":"0 0 * * *"},"updated_at":{"format":"date-time","type":"string","description":"The datetime when the ELT Sync was last updated.","example":"2020-01-01T00:00:00.000Z"}},"required":["account_id","created_at","destination_connection_id","destination_integration_id","enabled","id","source_connection_id","source_integration_id","status","updated_at"]},"PagedEltSyncDto":{"type":"object","properties":{"has_more":{"type":"boolean","description":"Indicates whether there are more items to be fetched in the subsequent pages.","example":true},"next_cursor":{"type":"string","description":"The cursor to use in pagination. Use this value as `starting_after` to get the next page.","example":"VeN1GjhVIq1D9h"},"data":{"description":"List of ELT Syncs","type":"array","items":{"$ref":"#/components/schemas/EltSyncDto"}}},"required":["has_more","data"]},"EltSyncCreateRequestDto":{"type":"object","properties":{"connection_id":{"type":"string","description":"The connection id."},"destination_schema_name":{"type":"string","description":"The name of the destination schema that will contain the synced tables."},"elt_settings":{"type":"object","description":"The ELT settings for a sync."},"sync_interval":{"type":"string","description":"Cron expression for the elt sync schedule.","example":"0 0 * * *"},"start_date":{"type":"string","description":"The earliest date from which data will be synced. Defaults to a predefined date if not set. Support varies by integration; see the supports_start_date field in the Integrations endpoint.","format":"YYYY-MM-DD","example":"2020-01-01"}},"required":["connection_id","destination_schema_name","sync_interval"]},"EltSyncUpdateRequestDto":{"type":"object","properties":{"elt_settings":{"type":"object","description":"The elt settings for a sync."},"sync_interval":{"type":"string","description":"Cron expression for the elt sync schedule.","example":"0 0 * * *"}}},"EltSyncAttachOrchestrationRequestDto":{"type":"object","properties":{"orchestration_workflow_id":{"type":"string","description":"The ID of the Orchestration Workflow to attach this ELT sync to.","example":"3LIw2FdxoByya9"}},"required":["orchestration_workflow_id"]},"RetirementDetails":{"type":"object","properties":{"in_favor_of":{"type":"string","description":"In favor of another stream that should be used instead"},"removal_date":{"type":"string","description":"Due date when stream will stop syncing","format":"ISO 8601 date string"},"details":{"type":"string","description":"Optional details of the retirement"},"link":{"type":"string","description":"Optional link to official documentation that describes the retirement and migration details"}}},"AvailableStreamDto":{"type":"object","properties":{"name":{"type":"string","description":"The name of the stream","example":"users"},"is_selectable":{"type":"boolean","description":"Whether it is possible to select it. It is false for not used source streams"},"preselect":{"type":"boolean","description":"Whether the source stream should be pre-selected by default"},"sub_streams":{"description":"An array of the substreams","example":["user_address"],"type":"array","items":{"type":"string"}},"retired":{"type":"boolean","description":"If the stream is retired and should not be used anymore","example":false},"retirement_details":{"description":"Details for the retired stream","allOf":[{"$ref":"#/components/schemas/RetirementDetails"}]}},"required":["name","retired"]},"PagedAvailableEltStreamDto":{"type":"object","properties":{"has_more":{"type":"boolean","description":"Indicates whether there are more items to be fetched in the subsequent pages.","example":true},"next_cursor":{"type":"string","description":"The cursor to use in pagination. Use this value as `starting_after` to get the next page.","example":"VeN1GjhVIq1D9h"},"data":{"description":"List of the available streams for the integration","type":"array","items":{"$ref":"#/components/schemas/AvailableStreamDto"}}},"required":["has_more","data"]},"SourceStreamDto":{"type":"object","properties":{"name":{"type":"string","description":"The name of the source stream."},"incremental_pointer_id":{"type":"string","description":"Incremental pointer ID for the source stream."},"excluded_columns":{"description":"Columns to exclude from the sync.","type":"array","items":{"type":"string"}},"hashed_columns":{"description":"Columns to hash during the sync.","type":"array","items":{"type":"string"}},"full_sync_always":{"type":"boolean","description":"Whether to always perform a full sync."},"full_sync_at_midnight":{"type":"boolean","description":"Whether to perform a full sync at midnight."},"protected_from_full_sync":{"type":"boolean","description":"Whether the stream is protected from full sync."},"excluded_substreams":{"description":"Excluded substreams from syncing.","example":["substream1","substream2"],"type":"array","items":{"type":"string"}},"enabled_history_table":{"type":"boolean","description":"Whether history table(s) are enabled for this stream","default":false}},"required":["name"]},"EltSyncAddSourceStreamsRequestDto":{"type":"object","properties":{"source_streams":{"description":"The source streams for the elt sync.","type":"array","items":{"$ref":"#/components/schemas/SourceStreamDto"}}}},"EltSyncAddSourceStreamsResponseDto":{"type":"object","properties":{"source_streams":{"description":"The updated list of source streams for the ELT sync.","type":"array","items":{"$ref":"#/components/schemas/EltStreamDto"}}},"required":["source_streams"]},"SourceStreamSnapshotDto":{"type":"object","properties":{"bytes_synced":{"type":"number","description":"Number of bytes synced","example":1024},"error_message":{"type":"string","description":"Error message if any","example":"Connection timeout"},"estimated_total_count":{"type":"number","description":"Estimated total count of records","example":1000},"finished_at":{"type":"string","description":"When the sync finished","example":"2024-03-20T10:00:00Z"},"full_sync_trigger":{"enum":["ALWAYS_FULL","ERROR","INITIAL_SYNC","LOOKBACK","MIDNIGHT","MIGRATION","NONE","SCHEMA_CHANGE","USER"],"type":"string","description":"Full sync trigger type"},"operation_mode":{"enum":["APPEND","FULL","INCREMENTAL"],"type":"string","description":"Operation mode"},"records_synced":{"type":"number","description":"Number of records synced","example":500},"retry_attempt":{"type":"number","description":"Retry attempt number","example":0},"started_at":{"type":"string","description":"When the sync started","example":"2024-03-20T09:00:00Z"},"status":{"enum":["COMPLETED","DELAYED","FAILED","RETRYING","RUNNING","SCHEDULED"],"type":"string","description":"Sync status"},"details":{"type":"string","description":"Additional details","example":"Processing chunk 1/5"}},"required":["bytes_synced"]},"SourceStreamSnapshotStatesDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the source stream","example":"users"},"active_sync":{"description":"Currently active sync if any","allOf":[{"$ref":"#/components/schemas/SourceStreamSnapshotDto"}]},"latest_sync":{"description":"Latest completed sync if any","allOf":[{"$ref":"#/components/schemas/SourceStreamSnapshotDto"}]}},"required":["name"]},"EltSyncStatusDto":{"type":"object","properties":{"elt_sync_id":{"type":"string","description":"Sync ID","example":"X4ughggABSd3UY"},"source_streams":{"description":"List of source stream states","type":"array","items":{"$ref":"#/components/schemas/SourceStreamSnapshotStatesDto"}}},"required":["elt_sync_id","source_streams"]},"OpenApiIntegrationAbility":{"type":"string","enum":["EltSource","ReverseEtlDestination"]},"IntegrationDto":{"type":"object","properties":{"id":{"type":"string","description":"The Id of the integration.","example":"amazon-ads"},"name":{"type":"string","description":"The integration name.","example":"Amazon Ads"},"min_required_plan":{"type":"string","description":"The minimum required plan to use this integration.","example":"BUSINESS"},"supports_start_date":{"type":"boolean","description":"Whether the integration supports setting a start date to limit historical syncs."},"abilities":{"type":"array","items":{"$ref":"#/components/schemas/OpenApiIntegrationAbility"},"description":"The abilities that this integration supports.","example":["EltSource"]}},"required":["id","name","supports_start_date","abilities"]},"PagedIntegrationDto":{"type":"object","properties":{"has_more":{"type":"boolean","description":"Indicates whether there are more items to be fetched in the subsequent pages.","example":true},"next_cursor":{"type":"string","description":"The cursor to use in pagination. Use this value as `starting_after` to get the next page.","example":"VeN1GjhVIq1D9h"},"data":{"description":"List of available integrations","type":"array","items":{"$ref":"#/components/schemas/IntegrationDto"}}},"required":["has_more","data"]},"OrchestrationRunDto":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the Orchestration Run.","example":"ewK8sDoLNI4CFR"},"orchestration_id":{"type":"string","description":"The ID of the Orchestration this run belongs to.","example":"3LIw2FdxoByya9"},"status":{"enum":["CANCELED","COMPLETED","FAILED","NOT_STARTED","RUNNING"],"type":"string","description":"The status of the run.","example":"COMPLETED"},"due_at":{"format":"date-time","type":"string","description":"The datetime when the run was due to start.","example":"2024-01-01T00:00:00.000Z"},"started_at":{"format":"date-time","type":"string","description":"The datetime when the run actually started.","example":"2024-01-01T00:00:05.000Z"},"finished_at":{"format":"date-time","type":"string","description":"The datetime when the run finished.","example":"2024-01-01T00:05:00.000Z"}},"required":["id","orchestration_id","status","due_at"]},"PagedOrchestrationRunDto":{"type":"object","properties":{"has_more":{"type":"boolean","description":"Indicates whether there are more items to be fetched in the subsequent pages.","example":true},"next_cursor":{"type":"string","description":"The cursor to use in pagination. Use this value as `starting_after` to get the next page.","example":"VeN1GjhVIq1D9h"},"data":{"description":"List of Orchestration Runs","type":"array","items":{"$ref":"#/components/schemas/OrchestrationRunDto"}}},"required":["has_more","data"]},"OrchestrationDto":{"type":"object","properties":{"id":{"type":"string","description":"The Id of the Orchestration.","example":"ewK8sDoLNI4CFR"},"name":{"type":"string","description":"The name of the Orchestration.","example":"My Orchestration"},"cron_expression":{"type":"string","description":"The cron expression defining when the Orchestration runs.","example":"0 0 * * *"},"description":{"type":"string","nullable":true,"description":"The description of the Orchestration.","example":"Daily sync of all marketing data."},"active":{"type":"boolean","description":"Whether the Orchestration is active.","example":true}},"required":["id","name","cron_expression","description","active"]},"PagedOrchestrationDto":{"type":"object","properties":{"has_more":{"type":"boolean","description":"Indicates whether there are more items to be fetched in the subsequent pages.","example":true},"next_cursor":{"type":"string","description":"The cursor to use in pagination. Use this value as `starting_after` to get the next page.","example":"VeN1GjhVIq1D9h"},"data":{"description":"List of Orchestrations","type":"array","items":{"$ref":"#/components/schemas/OrchestrationDto"}}},"required":["has_more","data"]},"OrchestrationCreateRequestDto":{"type":"object","properties":{"name":{"type":"string","description":"The name of the Orchestration.","example":"My Orchestration"},"cron_expression":{"type":"string","description":"Cron expression defining when the Orchestration runs.","example":"0 0 * * *"},"description":{"type":"string","description":"The description of the Orchestration.","example":"Daily sync of all marketing data."}},"required":["name","cron_expression"]},"OrchestrationUpdateRequestDto":{"type":"object","properties":{"name":{"type":"string","description":"The name of the Orchestration.","example":"My Orchestration"},"cron_expression":{"type":"string","description":"Cron expression defining when the Orchestration runs.","example":"0 0 * * *"},"description":{"type":"string","description":"The description of the Orchestration.","example":"Daily sync of all marketing data."}}},"ReverseEtlSyncRecordErrorDto":{"type":"object","properties":{"sync_id":{"type":"string","description":"The ID of the Reverse ETL Sync the record belongs to.","example":"OoORhGXUVjsqFG"},"record_id":{"type":"string","description":"The ID of the record that failed to sync.","example":"rec_123"},"error":{"type":"string","description":"The error message describing why the record failed to sync."}},"required":["sync_id","record_id","error"]},"ReverseEtlSyncFailedRecordErrorsDto":{"type":"object","properties":{"data":{"description":"The record errors captured for the Reverse ETL Sync.","type":"array","items":{"$ref":"#/components/schemas/ReverseEtlSyncRecordErrorDto"}}},"required":["data"]},"ReverseEtlSyncFailedRecordCountDto":{"type":"object","properties":{"count":{"type":"number","description":"The number of unresolved failed records captured for the Reverse ETL Sync.","example":3}},"required":["count"]},"RetryReverseEtlSyncRecordErrorsRequestDto":{"type":"object","properties":{"record_ids":{"description":"The IDs of the records whose errors should be reset so they are retried.","example":["rec_123","rec_456"],"type":"array","items":{"type":"string"}}},"required":["record_ids"]},"ReverseEtlSyncRunDto":{"type":"object","properties":{"id":{"type":"string","description":"Unique run identifier (opaque)","example":"T29PUmhHWFVWanNxRkd8MjAyNC0wMy0yMFQwOTowMDowMC4wMDBa"},"reverse_etl_sync_id":{"type":"string","description":"The Reverse ETL Sync ID","example":"OoORhGXUVjsqFG"},"started_at":{"type":"string","description":"When the run started","example":"2024-03-20T09:00:00.000Z"},"finished_at":{"type":"string","description":"When the run finished","example":"2024-03-20T09:05:00.000Z"},"status":{"enum":["COMPLETED","FAILED","RUNNING","SCHEDULED"],"type":"string","description":"Run status"},"total_rows":{"type":"number","description":"The total number of rows retrieved from the source model during the sync job.","example":500},"distinct_rows":{"type":"number","description":"The number of distinct rows retrieved from the source model during the sync job.","example":400},"new_rows":{"type":"number","description":"The number of rows that are new or have changed since the last sync. This is the number of rows submitted to the destination. It is 0, if no changes were detected in the source model since the last sync.","example":300},"synced_rows":{"type":"number","description":"The number of rows successfully synced to the destination.","example":200},"failed_rows":{"type":"number","description":"The number of rows that failed to sync to the destination.","example":100},"error":{"type":"string","description":"Error message if the whole run has failed.","example":"Connection timed out"}},"required":["id","reverse_etl_sync_id","started_at","status"]},"PagedReverseEtlSyncRunDto":{"type":"object","properties":{"has_more":{"type":"boolean","description":"Indicates whether there are more items to be fetched in the subsequent pages.","example":true},"next_cursor":{"type":"string","description":"The cursor to use in pagination. Use this value as `starting_after` to get the next page.","example":"VeN1GjhVIq1D9h"},"data":{"description":"List of Reverse ETL Sync Runs.","type":"array","items":{"$ref":"#/components/schemas/ReverseEtlSyncRunDto"}}},"required":["has_more","data"]},"ReverseEtlSyncMappingDto":{"type":"object","properties":{"source_property_id":{"type":"string","description":"The ID of the source property (a column of the source Transform) the mapping reads from.","example":"email"},"destination_property_id":{"type":"string","description":"The ID of the destination property the mapping writes to.","example":"email"},"primary_key":{"type":"boolean","description":"Whether this mapping is used as the primary key for matching records in the destination.","example":true}},"required":["source_property_id","destination_property_id"]},"ReverseEtlSyncOperationDto":{"type":"object","properties":{"mode":{"enum":["insert","mirror","update","upsert"],"type":"string","description":"The mode of the operation, defining how records are written to the destination.","example":"upsert"},"mappings":{"description":"The property mappings that define how source properties are written to the destination.","type":"array","items":{"$ref":"#/components/schemas/ReverseEtlSyncMappingDto"}}},"required":["mode","mappings"]},"ReverseEtlSyncDto":{"type":"object","properties":{"id":{"type":"string","description":"The Id of the Reverse ETL Sync.","example":"OoORhGXUVjsqFG"},"enabled":{"type":"boolean","description":"Whether the Reverse ETL Sync is enabled and running on its schedule.","example":true},"source_type":{"enum":["RawView","Transform"],"type":"string","description":"The type of the source the Reverse ETL Sync reads from.","example":"Transform"},"source_id":{"type":"string","description":"The Id of the source (Transform or Raw View) the Reverse ETL Sync reads from.","example":"mdl_123"},"transform_id":{"type":"string","description":"The Id of the Transform the Reverse ETL Sync reads from, if the source is a Transform.","example":"mdl_123"},"destination_connection_id":{"type":"string","description":"The Id of the Destination Connection.","example":"conn_456"},"destination_integration_id":{"type":"string","description":"The Id of the Destination Integration.","example":"hubspot"},"object_type_id":{"type":"string","description":"The Id of the object in the destination that the Reverse ETL Sync writes to.","example":"Q29udGFjdHx8Y29udGFjdA"},"sync_interval":{"type":"string","description":"The cron expression when the sync should run. Provided if the sync is not attached to an Orchestration.","format":"cron expression","example":"0 0 * * *"},"orchestration_workflow_id":{"type":"string","description":"The Id of the Orchestration Workflow that the sync is attached to.","example":"3LIw2FdxoByya9"},"operation":{"description":"The operation that defines how records are written to the destination object type.","allOf":[{"$ref":"#/components/schemas/ReverseEtlSyncOperationDto"}]},"created_at":{"format":"date-time","type":"string","description":"The datetime when the Reverse ETL Sync was created.","example":"2020-01-01T00:00:00.000Z"},"updated_at":{"format":"date-time","type":"string","description":"The datetime when the Reverse ETL Sync was last updated.","example":"2020-01-01T00:00:00.000Z"}},"required":["id","enabled","source_type","source_id","destination_connection_id","destination_integration_id","object_type_id","created_at","updated_at"]},"PagedReverseEtlSyncDto":{"type":"object","properties":{"has_more":{"type":"boolean","description":"Indicates whether there are more items to be fetched in the subsequent pages.","example":true},"next_cursor":{"type":"string","description":"The cursor to use in pagination. Use this value as `starting_after` to get the next page.","example":"VeN1GjhVIq1D9h"},"data":{"description":"List of Reverse ETL Syncs","type":"array","items":{"$ref":"#/components/schemas/ReverseEtlSyncDto"}}},"required":["has_more","data"]},"ReverseEtlSyncMappingRequestDto":{"type":"object","properties":{"source_property_id":{"type":"string","description":"The ID of the source property (a column of the source Transform) the mapping reads from.","example":"email"},"destination_property_id":{"type":"string","description":"The ID of the destination property the mapping writes to (as returned by the \"Get Reverse ETL destination schema\" endpoint).","example":"email"},"primary_key":{"type":"boolean","description":"Whether this mapping is used as the primary key for matching records in the destination.","example":true}},"required":["source_property_id","destination_property_id"]},"ReverseEtlSyncOperationRequestDto":{"type":"object","properties":{"mode":{"enum":["insert","mirror","update","upsert"],"type":"string","description":"The mode of the available operation to perform (as returned by the \"List available Reverse ETL operations\" endpoint).","example":"insert"},"mappings":{"description":"The property mappings that define how source properties are written to the destination.","type":"array","items":{"$ref":"#/components/schemas/ReverseEtlSyncMappingRequestDto"}}},"required":["mode","mappings"]},"CreateReverseEtlSyncRequestDto":{"type":"object","properties":{"destination_connection_id":{"type":"string","description":"The ID of the (already created) destination connection the Reverse ETL Sync writes to.","example":"X4ughggABSd3UY"},"source_id":{"type":"string","description":"The ID of the source Transform the Reverse ETL Sync reads from.","example":"OoORhGXUVjsqFG"},"object_type_id":{"type":"string","description":"The opaque ID of the destination object type to write to (as returned by the object types endpoint).","example":"Q29udGFjdHx8Y29udGFjdA"},"operation":{"description":"The operation that defines how records are written to the destination object type.","allOf":[{"$ref":"#/components/schemas/ReverseEtlSyncOperationRequestDto"}]},"sync_interval":{"type":"string","description":"The cron expression defining when the sync runs. Required unless the sync is attached to an Orchestration Workflow via `orchestration_workflow_id`.","format":"cron expression","example":"0 0 * * *"},"orchestration_workflow_id":{"type":"string","description":"The ID of the Orchestration Workflow to attach the sync to. When provided, the sync runs as part of the Orchestration instead of on its own `sync_interval`.","example":"3LIw2FdxoByya9"},"settings":{"type":"object","description":"The destination settings for the sync, validated against the settings schema (see the \"Get Reverse ETL Settings Schema for a connection\" endpoint).","example":{"listId":"12345","sheetId":"abc123"}}},"required":["destination_connection_id","source_id","object_type_id","operation"]},"ReverseEtlSyncWithSettingsDto":{"type":"object","properties":{"id":{"type":"string","description":"The Id of the Reverse ETL Sync.","example":"OoORhGXUVjsqFG"},"enabled":{"type":"boolean","description":"Whether the Reverse ETL Sync is enabled and running on its schedule.","example":true},"source_type":{"enum":["RawView","Transform"],"type":"string","description":"The type of the source the Reverse ETL Sync reads from.","example":"Transform"},"source_id":{"type":"string","description":"The Id of the source (Transform or Raw View) the Reverse ETL Sync reads from.","example":"mdl_123"},"transform_id":{"type":"string","description":"The Id of the Transform the Reverse ETL Sync reads from, if the source is a Transform.","example":"mdl_123"},"destination_connection_id":{"type":"string","description":"The Id of the Destination Connection.","example":"conn_456"},"destination_integration_id":{"type":"string","description":"The Id of the Destination Integration.","example":"hubspot"},"object_type_id":{"type":"string","description":"The Id of the object in the destination that the Reverse ETL Sync writes to.","example":"Q29udGFjdHx8Y29udGFjdA"},"sync_interval":{"type":"string","description":"The cron expression when the sync should run. Provided if the sync is not attached to an Orchestration.","format":"cron expression","example":"0 0 * * *"},"orchestration_workflow_id":{"type":"string","description":"The Id of the Orchestration Workflow that the sync is attached to.","example":"3LIw2FdxoByya9"},"operation":{"description":"The operation that defines how records are written to the destination object type.","allOf":[{"$ref":"#/components/schemas/ReverseEtlSyncOperationDto"}]},"created_at":{"format":"date-time","type":"string","description":"The datetime when the Reverse ETL Sync was created.","example":"2020-01-01T00:00:00.000Z"},"updated_at":{"format":"date-time","type":"string","description":"The datetime when the Reverse ETL Sync was last updated.","example":"2020-01-01T00:00:00.000Z"},"settings":{"type":"object","description":"The settings for the Reverse ETL Sync, provided when creating/updating the sync.","example":{"listId":"12345","sheetId":"abc123"}}},"required":["id","enabled","source_type","source_id","destination_connection_id","destination_integration_id","object_type_id","created_at","updated_at","settings"]},"ReverseEtlDestinationPropertyDto":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the destination property as used by the destination.","example":"email"},"property_name":{"type":"string","description":"The human-readable name of the destination property.","example":"Email"},"property_type":{"type":"string","description":"The data type of the destination property.","example":"string"},"readonly":{"type":"boolean","description":"Whether the destination property is read-only.","example":false},"is_required":{"type":"boolean","description":"Whether the destination property is required.","example":true},"is_primary_key":{"type":"boolean","description":"Whether the destination property can be used as a primary key for matching.","example":true}},"required":["id","property_name","property_type","readonly","is_required","is_primary_key"]},"ReverseEtlDestinationSchemaDto":{"type":"object","properties":{"data":{"description":"The properties available in the destination, used as the right-hand side of a Reverse ETL mapping.","type":"array","items":{"$ref":"#/components/schemas/ReverseEtlDestinationPropertyDto"}}},"required":["data"]},"ReverseEtlAvailableOperationDto":{"type":"object","properties":{"type":{"enum":["association","primary"],"type":"string","description":"The type of the operation.","example":"primary"},"mode":{"enum":["insert","mirror","update","upsert"],"type":"string","description":"The mode of the operation.","example":"upsert"},"primary_key_required":{"type":"boolean","description":"Whether a primary key is required for this operation.","example":true}},"required":["type","mode","primary_key_required"]},"ReverseEtlAvailableOperationsDto":{"type":"object","properties":{"data":{"description":"The operations available in the destination for the given object type.","type":"array","items":{"$ref":"#/components/schemas/ReverseEtlAvailableOperationDto"}}},"required":["data"]},"ReverseEtlObjectTypeDto":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the object type.","example":"Q29udGFjdHx8Y29udGFjdA"},"name":{"type":"string","description":"The human-readable name of the object type.","example":"Contact"},"type":{"type":"string","description":"Whether the object type is a standard or custom object.","example":"standard"},"associations":{"description":"The object types this object type can be associated with.","example":["company"],"type":"array","items":{"type":"string"}}},"required":["id","name","type","associations"]},"ReverseEtlObjectTypesDto":{"type":"object","properties":{"data":{"description":"The list of object types available in the destination connection.","type":"array","items":{"$ref":"#/components/schemas/ReverseEtlObjectTypeDto"}}},"required":["data"]},"ReverseEtlSettingsRequestDto":{"type":"object","properties":{"partial_settings":{"type":"object","description":"A JSON object of already-selected setting values, used to resolve options that depend on other settings (e.g. `{\"url\":\"https://...\"}` to resolve the available sheets with the Excel integration).","example":{"url":"https://onedrive.live.com/..."}}}},"UpdateReverseEtlSyncRequestDto":{"type":"object","properties":{"object_type_id":{"type":"string","description":"The opaque ID of the destination object type to write to (as returned by the object types endpoint).","example":"Q29udGFjdHx8Y29udGFjdA"},"operation":{"description":"The operation that defines how records are written to the destination object type.","allOf":[{"$ref":"#/components/schemas/ReverseEtlSyncOperationRequestDto"}]},"sync_interval":{"type":"string","description":"The cron expression defining when the sync runs. Required unless the sync is attached to an Orchestration Workflow via `orchestration_workflow_id`.","format":"cron expression","example":"0 0 * * *"},"orchestration_workflow_id":{"type":"string","description":"The ID of the Orchestration Workflow to attach the sync to. When provided, the sync runs as part of the Orchestration instead of on its own `sync_interval`.","example":"3LIw2FdxoByya9"},"settings":{"type":"object","description":"The destination settings for the sync, validated against the settings schema (see the \"Get Reverse ETL Settings Schema for a connection\" endpoint).","example":{"listId":"12345","sheetId":"abc123"}}},"required":["object_type_id","operation"]},"ReverseEtlSyncRequestRunResponseDto":{"type":"object","properties":{"status_url":{"type":"string","description":"URL to poll for the status of the triggered run. Run scheduling is asynchronous and may take a few minutes. An empty response from this URL does not indicate failure — it means the run has not yet been scheduled.","example":"/reverse_etl_sync_runs?reverse_etl_sync_id=OoORhGXUVjsqFG&starting_after=T29PUmhHWFVWanNxRkd8MjAyNC0wMy0yMFQwOTowMDowMC4wMDBa&limit=1&sort_direction=asc"}},"required":["status_url"]},"ReverseEtlSyncRequestRunConflictResponseDto":{"type":"object","properties":{"error_code":{"type":"string","description":"A specific error code representing the error type"},"message":{"type":"string","description":"A human-readable message describing the error"},"active_run_id":{"type":"string","description":"The ID of the currently active run that caused the conflict. Provided when the request to run conflicts with an already running run.","example":"T29PUmhHWFVWanNxRkd8MjAyNC0wMy0yMFQwOTowMDowMC4wMDBa"}},"required":["error_code","message"]},"TransformParameterDto":{"type":"object","properties":{"weld_tag":{"type":"string","description":"The weld tag reference used in the SQL template.","example":"raw.stripe.payments"},"type":{"type":"string","description":"The type of dependency.","enum":["raw_view","model_view","materialized_table"],"example":"raw_view"},"dw_item_id":{"type":"string","description":"The fully-qualified data warehouse item identifier.","example":"stripe_schema.payments"}},"required":["weld_tag","type","dw_item_id"]},"TransformDto":{"type":"object","properties":{"id":{"type":"string","description":"The ID of the transform.","example":"OoORhGXUVjsqFG"},"name":{"type":"string","description":"The name of the transform.","example":"marketing_attribution"},"folder_path":{"type":"string","description":"The folder path for the transform.","example":"analytics/marketing"},"status":{"type":"string","description":"The status of the transform.","enum":["draft","published"],"example":"published"},"materialization":{"type":"string","description":"The materialization type.","enum":["view","table"],"example":"view"},"sql_template":{"type":"string","description":"The SQL template with {{weldTag}} parameter references. For a published transform this is the currently published SQL — an unpublished draft edit does NOT change it. Check has_unpublished_changes and read draft_sql_template to see such an edit.","example":"SELECT * FROM {{raw.stripe.payments}} WHERE created_at > CURRENT_DATE - 30"},"has_unpublished_changes":{"type":"boolean","description":"True when the transform is published and a newer, still-unpublished SQL version exists — for example after updating it without publish=true. Always false for a transform that has never been published, where status \"draft\" already says so and sql_template is the draft itself.","example":false},"draft_sql_template":{"type":"string","description":"The SQL template of the newest unpublished version, present only when has_unpublished_changes is true. Publish it with the publish endpoint (or publish_transform) to make it live.","example":"SELECT * FROM {{raw.stripe.payments}} WHERE created_at > CURRENT_DATE - 7"},"parameters":{"description":"The parameters (dependencies) referenced in the SQL template.","type":"array","items":{"$ref":"#/components/schemas/TransformParameterDto"}},"documentation":{"type":"string","description":"Documentation for the transform.","example":"Calculates marketing attribution."},"materialization_status":{"type":"string","description":"The status of the table materialization in the data warehouse. Set to \"running\", \"completed\", or \"failed\" for published table transforms, or null for drafts and view-type transforms.","enum":["running","completed","failed"],"example":"completed","nullable":true},"materialization_error":{"type":"string","description":"Error message from the data warehouse if table materialization failed.","example":"Column \"foo\" not found in table \"bar\"."},"orchestration_workflow_id":{"type":"string","description":"The ID of the Orchestration Workflow that this transform is attached to, if any. Only reported while the attachment is actually in effect, so it can be relied on as the answer to \"does this transform build as part of a workflow?\".","example":"3LIw2FdxoByya9"},"rebuild_trigger":{"enum":["none","not_applicable","not_scheduled","orchestration","schedule"],"type":"string","description":"What will cause this transform to be rebuilt from now on. `orchestration` — it runs as part of an Orchestration Workflow. `schedule` — it runs on its own `cron_expression`. `not_scheduled` — it is deliberately set to build once and never update. `not_applicable` — it is a view, which has no independent build; a view is always current because it is a query, not a stored table. `none` — nothing will rebuild it and that is not intentional: either it is still a draft, or it is a published table that lost its schedule, which can happen after detaching it from a workflow. `none` is the only value that indicates a problem, so to find transforms that have silently stopped building look for status \"published\" with rebuild_trigger \"none\".","example":"schedule"},"cron_expression":{"type":"string","nullable":true,"description":"Cron expression (UTC) configured as the transform's own materialization schedule, or null if none has been set. It is only *acted on* while the transform is published, materialized as a \"table\", and not attached to an Orchestration Workflow. It is still reported in the other cases — a draft, a view, or a transform running as part of a workflow (see orchestration_workflow_id) — so you can see the schedule the transform would fall back to once it is published as a table again or detached from the workflow. Read rebuild_trigger to tell whether it is currently in effect: it reports \"schedule\" exactly when this cron is what rebuilds the transform.","example":"0 6 * * *"},"created_at":{"format":"date-time","type":"string","description":"The datetime when the transform was created.","example":"2020-01-01T00:00:00.000Z"},"updated_at":{"format":"date-time","type":"string","description":"The datetime when the transform was last updated.","example":"2020-01-01T00:00:00.000Z"}},"required":["id","name","folder_path","status","materialization","sql_template","has_unpublished_changes","parameters","rebuild_trigger","created_at","updated_at"]},"PagedTransformDto":{"type":"object","properties":{"has_more":{"type":"boolean","description":"Indicates whether there are more items to be fetched in the subsequent pages.","example":true},"next_cursor":{"type":"string","description":"The cursor to use in pagination. Use this value as `starting_after` to get the next page.","example":"VeN1GjhVIq1D9h"},"data":{"description":"List of transforms","type":"array","items":{"$ref":"#/components/schemas/TransformDto"}}},"required":["has_more","data"]},"AvailableReferenceDto":{"type":"object","properties":{"weld_tag":{"type":"string","description":"The weld tag to use in {{}} syntax in sql_template.","example":"raw.stripe.payments"},"type":{"type":"string","description":"The type of the reference.","enum":["raw_view","model_view","materialized_table"],"example":"raw_view"},"dw_item_id":{"type":"string","description":"The fully-qualified data warehouse item identifier.","example":"stripe_schema.payments"}},"required":["weld_tag","type","dw_item_id"]},"AvailableReferencesResponseDto":{"type":"object","properties":{"data":{"description":"List of available references for use in sql_template.","type":"array","items":{"$ref":"#/components/schemas/AvailableReferenceDto"}}},"required":["data"]},"TransformSchemaFieldDto":{"type":"object","properties":{"name":{"type":"string","description":"The name of the column.","example":"email"},"type":{"type":"string","description":"The data type of the column.","example":"STRING"},"nullable":{"type":"boolean","description":"Whether the column is nullable.","example":true}},"required":["name","type","nullable"]},"TransformSchemaDto":{"type":"object","properties":{"data":{"description":"The columns of the transform. These can be used as the source (left-hand side) of a Reverse ETL mapping.","type":"array","items":{"$ref":"#/components/schemas/TransformSchemaFieldDto"}}},"required":["data"]},"TransformCreateRequestDto":{"type":"object","properties":{"name":{"type":"string","description":"The name of the transform.","example":"marketing_attribution"},"folder_path":{"type":"string","description":"The folder path for the transform. Intermediate folders will be auto-created if they do not exist.","example":"analytics/marketing"},"sql_template":{"type":"string","description":"The SQL template with {{weldTag}} parameter references.","example":"SELECT * FROM {{raw.stripe.payments}} WHERE created_at > CURRENT_DATE - 30"},"materialization":{"type":"string","description":"The materialization type. Defaults to \"view\".","enum":["view","table"],"example":"view"},"documentation":{"type":"string","description":"Documentation for the transform.","example":"Calculates marketing attribution from ad spend and conversions."},"publish":{"type":"boolean","description":"If true, the transform will be published (materialized to DWH) immediately after creation.","example":false,"default":false},"cron_expression":{"type":"string","description":"Cron expression (UTC) defining the transform's own materialization schedule, applied once it has been published. Requires publish=true and materialization \"table\". Omit for a transform that should only be materialized on demand.","example":"0 6 * * *"},"wait_for_completion":{"type":"boolean","description":"If true, the API will wait for table materialization to complete before returning, up to a configured timeout (default ~45 seconds; may differ per environment). Only relevant when publishing with materialization set to \"table\". If the materialization does not complete within the timeout, the response will still succeed with materialization_status \"running\".","example":false,"default":false}},"required":["name","sql_template"]},"TransformUpdateRequestDto":{"type":"object","properties":{"name":{"type":"string","description":"The new name for the transform.","example":"marketing_attribution_v2"},"folder_path":{"type":"string","description":"The new folder path. Intermediate folders will be auto-created if they do not exist.","example":"analytics/marketing"},"sql_template":{"type":"string","description":"The updated SQL template with {{weldTag}} parameter references.","example":"SELECT * FROM {{raw.stripe.payments}} WHERE created_at > CURRENT_DATE - 7"},"materialization":{"type":"string","description":"The materialization type.","enum":["view","table"],"example":"view"},"documentation":{"type":"string","description":"Documentation for the transform.","example":"Calculates marketing attribution."},"cron_expression":{"type":"string","nullable":true,"description":"Cron expression (UTC) defining the transform's own materialization schedule. Requires a published transform with materialization \"table\" that is not attached to an Orchestration Workflow. Pass null to clear the schedule, which stops the transform from being rebuilt automatically.","example":"0 6 * * *"},"publish":{"type":"boolean","description":"If true and the transform is currently published, changes to sql_template or materialization will trigger an automatic re-publish to the DWH. If false (default), the changes are saved but the DWH is not updated until an explicit publish call.","example":false,"default":false},"wait_for_completion":{"type":"boolean","description":"If true, the API will wait for table materialization to complete before returning, up to a configured timeout (default ~45 seconds; may differ per environment). Only relevant when publishing with materialization set to \"table\". If the materialization does not complete within the timeout, the response will still succeed with materialization_status \"running\".","example":false,"default":false}}},"TransformAttachOrchestrationRequestDto":{"type":"object","properties":{"orchestration_workflow_id":{"type":"string","description":"The ID of the Orchestration Workflow to attach this transform to.","example":"3LIw2FdxoByya9"}},"required":["orchestration_workflow_id"]},"TransformBulkCreateRequestDto":{"type":"object","properties":{"transforms":{"description":"Array of transforms to create. Maximum 50 transforms per request.","type":"array","items":{"$ref":"#/components/schemas/TransformCreateRequestDto"}}},"required":["transforms"]},"TransformBulkResultItemDto":{"type":"object","properties":{"name":{"type":"string","description":"The name of the transform from the request.","example":"my_transform"},"success":{"type":"boolean","description":"Whether the operation succeeded.","example":true},"id":{"type":"string","description":"The ID of the created transform, if successful.","example":"OoORhGXUVjsqFG","nullable":true},"error":{"type":"string","description":"Error message if the operation failed.","example":null,"nullable":true}},"required":["name","success"]},"TransformBulkCreateResponseDto":{"type":"object","properties":{"results":{"description":"Results for each transform in the request.","type":"array","items":{"$ref":"#/components/schemas/TransformBulkResultItemDto"}}},"required":["results"]},"TransformVersionDto":{"type":"object","properties":{"id":{"type":"string","description":"The ID of this SQL query version.","example":"sqlq_abc123"},"sql_template":{"type":"string","description":"The SQL template with {{weldTag}} parameter references.","example":"SELECT * FROM {{raw.stripe.payments}}"},"parameters":{"description":"The parameters (dependencies) referenced in this version.","type":"array","items":{"$ref":"#/components/schemas/TransformParameterDto"}},"is_published":{"type":"boolean","description":"Whether this version is the currently published version.","example":true},"user_id":{"type":"string","description":"The user ID who created this version.","example":"user_123"},"created_at":{"format":"date-time","type":"string","description":"The datetime when this version was created.","example":"2020-01-01T00:00:00.000Z"}},"required":["id","sql_template","parameters","is_published","created_at"]},"PagedTransformVersionDto":{"type":"object","properties":{"has_more":{"type":"boolean","description":"Indicates whether there are more items to be fetched in the subsequent pages.","example":true},"next_cursor":{"type":"string","description":"The cursor to use in pagination. Use this value as `starting_after` to get the next page.","example":"VeN1GjhVIq1D9h"},"data":{"description":"List of transform versions","type":"array","items":{"$ref":"#/components/schemas/TransformVersionDto"}}},"required":["has_more","data"]},"TransformPublishRequestDto":{"type":"object","properties":{"version_id":{"type":"string","description":"The ID of a specific SQL version to publish. If omitted, the latest version is used. Use the list versions endpoint to find available version IDs.","example":"abc123def456"},"materialization":{"type":"string","description":"Override the materialization type for this publish.","enum":["view","table"],"example":"view"},"folder_path":{"type":"string","description":"Override the folder path for this publish. Intermediate folders will be auto-created.","example":"analytics/marketing"},"name":{"type":"string","description":"Override the name for this publish.","example":"marketing_attribution"},"wait_for_completion":{"type":"boolean","description":"If true, the API will wait for table materialization to complete before returning, up to a configured timeout (default ~45 seconds; may differ per environment). Only relevant when materialization is set to \"table\". If the materialization does not complete within the timeout, the response will still succeed with materialization_status \"running\".","example":false,"default":false}}},"TransformRematerializeRequestDto":{"type":"object","properties":{"wait_for_completion":{"type":"boolean","description":"If true, the API will wait for table materialization to complete before returning, up to a configured timeout (default ~45 seconds; may differ per environment). Only relevant for table-materialized transforms. If the materialization does not complete within the timeout, the response will still succeed with materialization_status \"running\".","example":false,"default":false}}},"QueryPreviewCreateRequestDto":{"type":"object","properties":{"sql_template":{"type":"string","description":"The SQL template with {{weldTag}} parameter references to preview.","example":"SELECT * FROM {{raw.stripe.payments}} WHERE created_at > CURRENT_DATE - 30"}},"required":["sql_template"]},"QueryPreviewCreateResponseDto":{"type":"object","properties":{"query_execution_id":{"type":"string","description":"The unique identifier for the query execution. Use this to poll for status and results.","example":"qe_abc123def456"},"dw_sql":{"type":"string","description":"The translated data warehouse SQL that was executed.","example":"SELECT * FROM stripe_schema.payments WHERE created_at > CURRENT_DATE - 30"}},"required":["query_execution_id","dw_sql"]},"QueryPreviewStatusResponseDto":{"type":"object","properties":{"status":{"type":"string","description":"The current status of the query execution.","enum":["RUNNING","DONE","FAILED"],"example":"DONE"},"error":{"type":"string","description":"Error message when the query execution has failed. Only present when status is FAILED.","example":"SQL compilation error: Object does not exist"}},"required":["status"]},"QueryPreviewResultResponseDto":{"type":"object","properties":{"rows":{"type":"array","description":"The result rows of the query execution.","items":{"type":"object"},"example":[{"id":1,"name":"John"},{"id":2,"name":"Jane"}]},"num_rows_total":{"type":"number","description":"The total number of rows matching the query (may be larger than the returned rows).","example":1000}},"required":["rows","num_rows_total"]}}},"security":[{"api_key":[]}]}