openapi: 3.1.0 info: description: External API endpoints for Artie title: Artie API version: v1.0.92 servers: - url: https://api.artie.com paths: /column-hashing-salts: get: description: Lists all column hashing salts for the authenticated company. operationId: column_hashing_salt_list responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyColumnHashingSalt' description: OK "500": description: Internal Server Error summary: List column hashing salts tags: - Column Hashing Salts x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: column_hashing_salt_list outputSensitivity: none readOnlyHint: true requiredScopes: - column_hashing_salts:read retrySemantics: safe title: List column hashing salts triggerDescription: Lists column hashing salt names and UUIDs (no secret). post: description: Creates a new column hashing salt for the authenticated company. operationId: column_hashing_salt_create requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterCreateColumnHashingSaltRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterCreateColumnHashingSaltResponse' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Create a column hashing salt tags: - Column Hashing Salts x-artie-mcp: destructiveHint: false exclusionReason: Accepts and returns a column-hashing salt. exposure: excluded idempotentHint: false inputSensitivity: restricted-credentials openWorldHint: false operationId: column_hashing_salt_create outputSensitivity: restricted-credentials readOnlyHint: false remediation: Create column-hashing salts through the authenticated Dashboard setup flow. requiredScopes: - column_hashing_salts:write retrySemantics: unsafe title: Create a column hashing salt triggerDescription: Use when you need to create a column hashing salt. /column-hashing-salts/{uuid}: delete: description: Deletes a column hashing salt by UUID. operationId: column_hashing_salt_delete parameters: - in: path name: uuid required: true schema: type: string responses: "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Delete a column hashing salt tags: - Column Hashing Salts x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: column_hashing_salt_delete outputSensitivity: none readOnlyHint: false requiredScopes: - column_hashing_salts:delete retrySemantics: safe-after-state-check title: Delete a column hashing salt triggerDescription: Deletes a column hashing salt by UUID. Does not unhash already-landed columns. get: description: Retrieves a column hashing salt by UUID, including the decrypted salt. Requires company admin. operationId: column_hashing_salt_detail parameters: - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsColumnHashingSaltDetail' description: OK "404": description: Not Found "500": description: Internal Server Error summary: Get a column hashing salt tags: - Column Hashing Salts x-artie-mcp: destructiveHint: false exclusionReason: Returns the decrypted column-hashing salt. exposure: excluded idempotentHint: true inputSensitivity: none openWorldHint: false operationId: column_hashing_salt_detail outputSensitivity: restricted-credentials readOnlyHint: true remediation: Use column_hashing_salt_list for non-secret salt references. requiredScopes: - column_hashing_salts:read retrySemantics: safe title: Get a column hashing salt triggerDescription: Use when you need to get a column hashing salt. post: description: Updates the name and description of a column hashing salt. operationId: column_hashing_salt_update parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterUpdateColumnHashingSaltRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsColumnHashingSalt' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Update a column hashing salt tags: - Column Hashing Salts x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: column_hashing_salt_update outputSensitivity: none readOnlyHint: false requiredScopes: - column_hashing_salts:write retrySemantics: unsafe title: Update a column hashing salt triggerDescription: Updates the name and description of an existing column hashing salt. Does not rotate the secret. /column-hashing-salts/{uuid}/preview: post: description: Hashes a sample string value with this salt using the same function used by Artie's pipelines (HMAC-SHA256 keyed on the salt, or SHA-256 if the salt is empty). Returns the hex-encoded hash. operationId: column_hashing_salt_preview parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPreviewColumnHashingSaltRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterPreviewColumnHashingSaltResponse' description: OK "400": description: Bad Request "404": description: Not Found "500": description: Internal Server Error summary: Preview a column hashing salt tags: - Column Hashing Salts x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: column_hashing_salt_preview outputSensitivity: none readOnlyHint: true requiredScopes: - column_hashing_salts:read retrySemantics: safe title: Preview a column hashing salt triggerDescription: Hashes a sample string with this salt and returns the hex digest. /company/automatic-schema-changes: post: description: Enqueues automatic schema changes for all eligible running pipelines in the authenticated company. The request is accepted before reconciliation completes. operationId: company_trigger_automatic_schema_changes responses: "202": description: Accepted "403": description: Forbidden "500": description: Internal Server Error summary: Trigger automatic schema changes tags: - Company x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: company_trigger_automatic_schema_changes outputSensitivity: none readOnlyHint: false requiredScopes: - pipelines:write retrySemantics: safe-after-state-check title: Trigger automatic schema changes for a company triggerDescription: Enqueues automatic schema changes for all eligible running pipelines. For one pipeline, use pipeline_trigger_automatic_schema_changes. /connectors: get: description: Returns all destination connectors for the authenticated company. Pass includeSourceConnectors=true to also include source connectors. operationId: connector_list parameters: - in: query name: includeSourceConnectors schema: type: boolean responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyLightConnector' description: OK "500": description: Internal Server Error summary: List connectors tags: - Connectors x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: connector_list outputSensitivity: none readOnlyHint: true requiredScopes: - connectors:read retrySemantics: safe title: List connectors triggerDescription: Lists saved connectors. Defaults to destinations; pass includeSourceConnectors=true for sources. Call this before connector_fetch_databases, connector_fetch_schemas, connector_fetch_tables, or connector_fetch_table_detail — those tools need a uuid from this list, not a pipeline uuid or sourceReaderUUID from pipeline_list. post: description: Creates a new source or destination connector for your Artie deployment. Configure database connections, authentication, and replication settings programmatically. operationId: connector_create requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsConnectorPayload' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsFullConnector' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Create a connector tags: - Connectors x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: restricted-credentials openWorldHint: false operationId: connector_create outputSensitivity: restricted-credentials readOnlyHint: false requiredScopes: - connectors:write retrySemantics: unsafe title: Create a connector triggerDescription: Creates a saved source or destination connector. Pass type, label, and sharedConfig (host, user, password, and type-specific fields). Keep the returned UUID for pipeline_create_from_source. /connectors/{uuid}: delete: description: Permanently removes a connector and its associated configuration. This stops any active replication pipelines that depend on the connector. operationId: connector_delete parameters: - in: path name: uuid required: true schema: type: string responses: "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Delete a connector tags: - Connectors x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: connector_delete outputSensitivity: none readOnlyHint: false requiredScopes: - connectors:delete retrySemantics: safe-after-state-check title: Delete a connector triggerDescription: Permanently deletes a saved connector by UUID and stops pipelines that depend on it. get: description: Retrieves the full configuration of a saved connector by uuid from connector_list, including type, label, and sharedConfig. Sensitive fields may be masked. operationId: connector_detail parameters: - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsFullConnector' description: OK "404": description: Not Found "500": description: Internal Server Error summary: Get a saved connector tags: - Connectors x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: connector_detail outputSensitivity: restricted-credentials readOnlyHint: true requiredScopes: - connectors:read retrySemantics: safe title: Get a saved connector triggerDescription: Returns a saved connector by uuid from connector_list, not a pipeline uuid or sourceReaderUUID. Includes type, label, and sharedConfig. Sensitive fields may be masked placeholders. To ping that connector, pass this payload into unsaved_connector_ping and keep uuid set so stored secrets unmask. post: description: Updates the configuration of an existing source or destination connector. Modify connection settings, credentials, or replication parameters for a running pipeline. operationId: connector_update parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsConnectorPayload' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsFullConnector' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Update a connector tags: - Connectors x-artie-mcp: destructiveHint: false exclusionReason: Accepts and returns connector configuration that can contain credentials. exposure: excluded idempotentHint: false inputSensitivity: restricted-credentials openWorldHint: false operationId: connector_update outputSensitivity: restricted-credentials readOnlyHint: false remediation: Update connector credentials through the authenticated Dashboard setup flow. requiredScopes: - connectors:write retrySemantics: unsafe title: Update a connector triggerDescription: Use when you need to update a connector. /connectors/{uuid}/databases: get: description: Lists available databases on the target using a saved connector's configuration. Response metadata may include Iceberg S3 table bucket maintenance defaults. operationId: connector_fetch_databases parameters: - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsConnectorFetchDatabasesResponse' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Fetch databases for a saved connector tags: - Connectors x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: true operationId: connector_fetch_databases outputSensitivity: none readOnlyHint: true requiredScopes: - connectors:read retrySemantics: safe title: Fetch databases for a saved connector triggerDescription: Lists database names a saved source can see. uuid must come from connector_list with includeSourceConnectors=true. Do not pass a pipeline uuid or sourceReaderUUID. /connectors/{uuid}/detail: get: description: Returns detailed metadata for a specific table on the saved connector. tableName is required; databaseName defaults to the connector's configured database, schemaName defaults to the connector type's default schema, and isView is optional. operationId: connector_fetch_table_detail parameters: - in: path name: uuid required: true schema: type: string - in: query name: databaseName schema: type: string - in: query name: schemaName schema: type: string - in: query name: tableName required: true schema: type: string - in: query name: isView schema: type: boolean responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsConnectorTableDetailResponse' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Fetch table detail for a saved connector tags: - Connectors x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: true operationId: connector_fetch_table_detail outputSensitivity: none readOnlyHint: true requiredScopes: - connectors:read retrySemantics: safe title: Fetch table detail for a saved connector triggerDescription: Returns columns and metadata for one table on a saved connector. uuid must come from connector_list (includeSourceConnectors=true for sources). Do not pass a pipeline uuid or sourceReaderUUID. tableName is required. This is column metadata, not pipeline lag or row counts. /connectors/{uuid}/generate-shadow-script: post: description: Generates the SQL script to create shadow tables required for Oracle change data capture (CDC). Run this script on your Oracle source before starting replication. operationId: connector_generate_shadow_script parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterConnectorGenerateShadowScriptRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterConnectorGenerateShadowScriptResponse' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Generate Oracle shadow table script tags: - Connectors x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: connector_generate_shadow_script outputSensitivity: none readOnlyHint: true requiredScopes: - connectors:read retrySemantics: safe title: Generate Oracle shadow table script triggerDescription: Returns SQL to create Oracle shadow tables for CDC. Oracle sources only. /connectors/{uuid}/postgres-drop-replication-slot: post: description: Drops a PostgreSQL replication slot that is inactive or orphaned. Use this to clean up stale replication slots that may be preventing WAL cleanup on the source. operationId: connector_drop_postgres_replication_slot parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterConnectorDropReplicationSlotRequest' required: true responses: "204": description: No Content "400": description: Bad Request "404": description: Not Found "500": description: Internal Server Error summary: Drop a PostgreSQL replication slot tags: - Connectors x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: connector_drop_postgres_replication_slot outputSensitivity: none readOnlyHint: false requiredScopes: - connectors:write retrySemantics: unsafe title: Drop a PostgreSQL replication slot triggerDescription: Drops an inactive PostgreSQL replication slot. Confirm the slot is unused. /connectors/{uuid}/schemas: get: description: Lists available schemas on the target using a saved connector's configuration. Pass 'databaseName' as a query parameter. operationId: connector_fetch_schemas parameters: - in: path name: uuid required: true schema: type: string - in: query name: databaseName schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodySchemaResponse' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Fetch schemas for a saved connector tags: - Connectors x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: true operationId: connector_fetch_schemas outputSensitivity: none readOnlyHint: true requiredScopes: - connectors:read retrySemantics: safe title: Fetch schemas for a saved connector triggerDescription: Lists schemas on a saved connector. uuid must come from connector_list. Do not pass a pipeline uuid or sourceReaderUUID. Pass schemaName into connector_fetch_tables when the destination requires it. /connectors/{uuid}/start-dynamodb-export: post: description: Initiates a point-in-time export from Amazon DynamoDB for the specified connector. Use this to backfill your destination with existing DynamoDB table data. operationId: connector_start_dynamo_db_export parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterConnectorStartDynamoDBExportRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterConnectorStartDynamoDBExportResponse' description: OK "500": description: Internal Server Error summary: Start a DynamoDB export tags: - Connectors x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: connector_start_dynamo_db_export outputSensitivity: none readOnlyHint: false requiredScopes: - connectors:write retrySemantics: unsafe title: Start a DynamoDB export triggerDescription: Starts a DynamoDB point-in-time export. DynamoDB sources only; for SQL CDC use pipeline_start. /connectors/{uuid}/tables: get: description: Lists available tables on the target using a saved connector's configuration. databaseName defaults to the connector's configured database; schemaName defaults to the connector type's default schema (e.g. 'public' for Postgres, 'dbo' for SQL Server). operationId: connector_fetch_tables parameters: - in: path name: uuid required: true schema: type: string - in: query name: databaseName schema: type: string - in: query name: schemaName schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyConnectorTableDetailResponse' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Fetch tables for a saved connector tags: - Connectors x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: true operationId: connector_fetch_tables outputSensitivity: none readOnlyHint: true requiredScopes: - connectors:read retrySemantics: safe title: Fetch tables for a saved connector triggerDescription: Lists tables on a saved connector. uuid must come from connector_list. Do not pass a pipeline uuid or sourceReaderUUID. Use to choose names for pipeline_update.tables. /connectors/databases: post: description: Lists available databases on the target using an unsaved connector configuration. Useful during connector setup to discover existing databases. Response metadata may include Iceberg S3 table bucket maintenance defaults. operationId: unsaved_connector_fetch_databases requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsConnectorPayload' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsConnectorFetchDatabasesResponse' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Fetch databases for an unsaved connector tags: - Connectors x-artie-mcp: destructiveHint: false exclusionReason: Accepts an unsaved connector configuration that can contain credentials. exposure: excluded idempotentHint: true inputSensitivity: restricted-credentials openWorldHint: true operationId: unsaved_connector_fetch_databases outputSensitivity: none readOnlyHint: true remediation: Save the connector before discovering databases. requiredScopes: - connectors:read retrySemantics: safe title: Fetch databases for an unsaved connector triggerDescription: Use when you need to fetch databases for an unsaved connector. /connectors/new-database: post: description: Creates a new database on the target destination using a connector configuration that has not yet been saved. Useful during initial setup to prepare the destination. operationId: unsaved_connector_create_database requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterConnectorCreateDatabaseRequest' required: true responses: "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Create a database on an unsaved connector tags: - Connectors x-artie-mcp: bodilessSuccess: true destructiveHint: false exclusionReason: Accepts an unsaved connector configuration that can contain credentials. exposure: excluded idempotentHint: false inputSensitivity: restricted-credentials openWorldHint: true operationId: unsaved_connector_create_database outputSensitivity: none readOnlyHint: false remediation: Create the database through the authenticated Dashboard setup flow. requiredScopes: - connectors:write retrySemantics: unsafe title: Create a database on an unsaved connector triggerDescription: Use when you need to create a database on an unsaved connector. /connectors/new-schema: post: description: Creates a new schema on the target destination using a connector configuration that has not yet been saved. Useful during initial setup to organize destination tables. operationId: unsaved_connector_create_schema requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterConnectorCreateSchemaRequest' required: true responses: "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Create a schema on an unsaved connector tags: - Connectors x-artie-mcp: bodilessSuccess: true destructiveHint: false exclusionReason: Accepts an unsaved connector configuration that can contain credentials. exposure: excluded idempotentHint: false inputSensitivity: restricted-credentials openWorldHint: true operationId: unsaved_connector_create_schema outputSensitivity: none readOnlyHint: false remediation: Create the schema through the authenticated Dashboard setup flow. requiredScopes: - connectors:write retrySemantics: unsafe title: Create a schema on an unsaved connector triggerDescription: Use when you need to create a schema on an unsaved connector. /connectors/new-snowflake-warehouse: post: description: Creates a new Snowflake virtual warehouse using an unsaved connector configuration. Useful during initial setup to provision compute resources for data replication. operationId: unsaved_connector_create_snowflake_warehouse requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterConnectorCreateSnowflakeWarehouseRequest' required: true responses: "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Create a Snowflake warehouse on an unsaved connector tags: - Connectors x-artie-mcp: bodilessSuccess: true destructiveHint: false exclusionReason: Accepts an unsaved connector configuration that can contain credentials. exposure: excluded idempotentHint: false inputSensitivity: restricted-credentials openWorldHint: true operationId: unsaved_connector_create_snowflake_warehouse outputSensitivity: none readOnlyHint: false remediation: Create the warehouse through the authenticated Dashboard setup flow. requiredScopes: - connectors:write retrySemantics: unsafe title: Create a Snowflake warehouse on an unsaved connector triggerDescription: Use when you need to create a Snowflake warehouse on an unsaved connector. /connectors/ping: post: description: Tests network connectivity and authentication for a connector configuration before saving it. Pass type, sharedConfig, and connectionRole. Success is 204. operationId: unsaved_connector_ping requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterConnectorPingRequest' required: true responses: "204": description: No Content "400": description: Bad Request summary: Ping a connector tags: - Connectors x-artie-mcp: bodilessSuccess: true destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: restricted-credentials openWorldHint: true operationId: unsaved_connector_ping outputSensitivity: none readOnlyHint: true requiredScopes: - connectors:read retrySemantics: safe title: Ping a connector triggerDescription: 'Pings a connector before connector_create. Pass type, sharedConfig (host, user, password, and type-specific fields), and connectionRole (source or destination). This is not a uuid ping — do not pass a pipeline uuid or sourceReaderUUID. Postgres needs a database name, Oracle a service name, S3 a bucket. Success is {"success": true}; a JSON error field means the host or credentials failed.' /connectors/postgres-publications: post: description: Lists logical replication publications on a PostgreSQL source using an unsaved connector configuration. Useful during connector setup to let users select an existing publication. operationId: unsaved_connector_fetch_postgres_publications requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterConnectorFetchPostgresPublicationsRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyPostgresPublication' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: List PostgreSQL publications for an unsaved connector tags: - Connectors x-artie-mcp: destructiveHint: false exclusionReason: Accepts an unsaved connector configuration that can contain credentials. exposure: excluded idempotentHint: true inputSensitivity: restricted-credentials openWorldHint: true operationId: unsaved_connector_fetch_postgres_publications outputSensitivity: none readOnlyHint: true remediation: Save the connector before discovering PostgreSQL publications. requiredScopes: - connectors:read retrySemantics: safe title: List PostgreSQL publications for an unsaved connector triggerDescription: Use when you need to list PostgreSQL publications for an unsaved connector. /connectors/schemas: post: description: Lists available schemas in a specific database using an unsaved connector configuration. Useful during connector setup to discover existing schemas. operationId: unsaved_connector_fetch_schemas requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterConnectorFetchSchemasRequest' required: true responses: "200": description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Fetch schemas for an unsaved connector tags: - Connectors x-artie-mcp: destructiveHint: false exclusionReason: Accepts an unsaved connector configuration that can contain credentials. exposure: excluded idempotentHint: true inputSensitivity: restricted-credentials openWorldHint: true operationId: unsaved_connector_fetch_schemas outputSensitivity: none readOnlyHint: true remediation: Save the connector before discovering schemas. requiredScopes: - connectors:read retrySemantics: safe title: Fetch schemas for an unsaved connector triggerDescription: Use when you need to fetch schemas for an unsaved connector. /connectors/tables: post: description: Lists available tables in a specific database and schema using an unsaved connector configuration. Results are cached when a connector UUID is provided. operationId: unsaved_connector_fetch_tables requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterConnectorFetchTablesRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyConnectorTable' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Fetch tables for an unsaved connector tags: - Connectors x-artie-mcp: destructiveHint: false exclusionReason: Accepts an unsaved connector configuration that can contain credentials. exposure: excluded idempotentHint: true inputSensitivity: restricted-credentials openWorldHint: true operationId: unsaved_connector_fetch_tables outputSensitivity: none readOnlyHint: true remediation: Save the connector before discovering tables. requiredScopes: - connectors:read retrySemantics: safe title: Fetch tables for an unsaved connector triggerDescription: Use when you need to fetch tables for an unsaved connector. /data-catalog/search: post: description: Searches across the company's data catalog using full-text search. operationId: data_catalog_search requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsDataCatalogSearchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyDataCatalogMatch' description: OK "500": description: Internal Server Error summary: Search the data catalog tags: - Data Catalog x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: data_catalog_search outputSensitivity: none readOnlyHint: true requiredScopes: - data_catalog:read retrySemantics: safe title: Search the data catalog triggerDescription: Searches ingested catalog metadata. For live source tables, use connector_fetch_tables. /encryption-keys: get: description: Lists all encryption keys for the authenticated company. operationId: encryption_key_list responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyEncryptionKey' description: OK "500": description: Internal Server Error summary: List encryption keys tags: - Encryption Keys x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: encryption_key_list outputSensitivity: none readOnlyHint: true requiredScopes: - encryption_keys:read retrySemantics: safe title: List encryption keys triggerDescription: Lists encryption key names and UUIDs (no secret material). post: description: Creates a new encryption key for the authenticated company. operationId: encryption_key_create requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterCreateEncryptionKeyRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterCreateEncryptionKeyResponse' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Create an encryption key tags: - Encryption Keys x-artie-mcp: destructiveHint: false exclusionReason: Returns a newly generated encryption key. exposure: excluded idempotentHint: false inputSensitivity: none openWorldHint: false operationId: encryption_key_create outputSensitivity: restricted-credentials readOnlyHint: false remediation: Create encryption keys through the authenticated Dashboard setup flow. requiredScopes: - encryption_keys:write retrySemantics: unsafe title: Create an encryption key triggerDescription: Use when you need to create an encryption key. /encryption-keys/{uuid}: delete: description: Deletes an encryption key by UUID. operationId: encryption_key_delete parameters: - in: path name: uuid required: true schema: type: string responses: "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Delete an encryption key tags: - Encryption Keys x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: encryption_key_delete outputSensitivity: none readOnlyHint: false requiredScopes: - encryption_keys:delete retrySemantics: safe-after-state-check title: Delete an encryption key triggerDescription: Deletes an encryption key by UUID. Does not decrypt already-landed columns. get: description: Retrieves an encryption key by UUID, including the decrypted key. Requires company admin. operationId: encryption_key_detail parameters: - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsEncryptionKeyDetail' description: OK "404": description: Not Found "500": description: Internal Server Error summary: Get an encryption key tags: - Encryption Keys x-artie-mcp: destructiveHint: false exclusionReason: Returns the decrypted encryption key. exposure: excluded idempotentHint: true inputSensitivity: none openWorldHint: false operationId: encryption_key_detail outputSensitivity: restricted-credentials readOnlyHint: true remediation: Use encryption_key_list for non-secret key references. requiredScopes: - encryption_keys:read retrySemantics: safe title: Get an encryption key triggerDescription: Use when you need to get an encryption key. post: description: Updates the name and description of an encryption key. operationId: encryption_key_update parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterUpdateEncryptionKeyRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsEncryptionKey' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Update an encryption key tags: - Encryption Keys x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: encryption_key_update outputSensitivity: none readOnlyHint: false requiredScopes: - encryption_keys:write retrySemantics: unsafe title: Update an encryption key triggerDescription: Updates the name and description of an existing encryption key. Does not rotate the key material. /ingestion-api-keys: post: description: Creates a new ingestion API key for a source reader. Returns the key and its secret (only shown once). operationId: ingestion_api_key_create requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterCreateIngestionAPIKeyRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterCreateIngestionAPIKeyResponse' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Create an ingestion API key tags: - Ingestion API Keys x-artie-mcp: destructiveHint: false exclusionReason: Returns an ingestion API key secret that is shown only once. exposure: excluded idempotentHint: false inputSensitivity: none openWorldHint: false operationId: ingestion_api_key_create outputSensitivity: restricted-credentials readOnlyHint: false remediation: Create ingestion API keys through the authenticated Dashboard setup flow. requiredScopes: - ingestion_api_keys:write retrySemantics: unsafe title: Create an ingestion API key triggerDescription: Use when you need to create an ingestion API key. /ingestion-api-keys/{uuid}: delete: description: Deletes an ingestion API key by UUID. operationId: ingestion_api_key_delete parameters: - in: path name: uuid required: true schema: type: string responses: "204": description: No Content "500": description: Internal Server Error summary: Delete an ingestion API key tags: - Ingestion API Keys x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: ingestion_api_key_delete outputSensitivity: none readOnlyHint: false requiredScopes: - ingestion_api_keys:delete retrySemantics: safe-after-state-check title: Delete an ingestion API key triggerDescription: Deletes an ingestion API key by UUID. post: description: Updates an existing ingestion API key by UUID. operationId: ingestion_api_key_update parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterUpdateIngestionAPIKeyRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsIngestionAPIKey' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Update an ingestion API key tags: - Ingestion API Keys x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: ingestion_api_key_update outputSensitivity: none readOnlyHint: false requiredScopes: - ingestion_api_keys:write retrySemantics: unsafe title: Update an ingestion API key triggerDescription: Updates metadata on an existing ingestion API key. Does not mint a new key. /pipelines: get: description: Returns pipelines for the authenticated company, optionally filtered by environment. operationId: pipeline_list responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyLightPipeline' description: OK "500": description: Internal Server Error summary: List pipelines tags: - Pipelines x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: pipeline_list outputSensitivity: none readOnlyHint: true requiredScopes: - pipelines:read retrySemantics: safe title: List pipelines triggerDescription: Lists pipelines with uuid, name, and status. This is not a full configuration — do not send it to pipeline_update. Full config, per-table status, and table UUIDs are pipeline_detail. sourceReaderUUID is not a connector id; call connector_list before connector_fetch_table_detail or other connector_fetch_* tools. post: description: Creates a pipeline attached to an existing source reader (pipeline.sourceReaderUUID). The reader must have no pipeline yet, or be shared. To start a new capture from a source connector, use POST /pipelines/create-from-source. operationId: pipeline_create requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPipelineCreateRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsFullPipeline' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Create a pipeline on an existing source reader tags: - Pipelines x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: pipeline_create outputSensitivity: none readOnlyHint: false requiredScopes: - pipelines:write retrySemantics: unsafe title: Create a pipeline on an existing source reader triggerDescription: 'Attaches a new pipeline to an existing sourceReaderUUID. The reader must be unused or already shared (fan-out: one CDC capture, many destinations). To start a new capture from a source connector, use pipeline_create_from_source.' /pipelines/{uuid}: delete: description: Deletes a pipeline by UUID. operationId: pipeline_delete parameters: - in: path name: uuid required: true schema: type: string responses: "204": description: No Content "500": description: Internal Server Error summary: Delete pipeline tags: - Pipelines x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: pipeline_delete outputSensitivity: none readOnlyHint: false requiredScopes: - pipelines:delete retrySemantics: safe-after-state-check title: Delete pipeline triggerDescription: Permanently deletes a pipeline by UUID. Does not delete connectors. get: description: Returns FullPipeline for the pipeline uuid (tables with uuid/status, destinationUUID, specificDestCfg, sourceReaderUUID). MCP clients must omit includeRelatedObjects. The Dashboard UI may pass includeRelatedObjects=true to wrap sourceReader and connectors; that body is not the documented 200 schema. operationId: pipeline_detail parameters: - in: path name: uuid required: true schema: type: string - in: query name: includeRelatedObjects schema: type: boolean responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsFullPipeline' description: OK "404": description: Not Found "500": description: Internal Server Error summary: Get pipeline configuration tags: - Pipelines x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: pipeline_detail outputSensitivity: none readOnlyHint: true requiredScopes: - pipelines:read retrySemantics: safe title: Get pipeline configuration triggerDescription: 'Returns FullPipeline for a uuid from pipeline_list: tables (uuid, name, schema, status), destinationUUID, specificDestCfg, and sourceReaderUUID. Echo this into pipeline_update; do not send pipeline_list. Use for per-table status and backfill table UUIDs. sourceReaderUUID is the uuid for source_reader_detail and source_reader_update, not a connector uuid. This is not lag (pipeline_usage). Omit includeRelatedObjects — that Dashboard flag wraps connectors and is not this tool''s success shape.' post: description: 'Full replace of an existing pipeline by UUID. Omitted fields are written as zero values: missing dataPlaneName 400s, missing tables deletes every table. Clients must echo the last FullPipeline and change only the intended fields.' operationId: pipeline_update parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPipelineUpdateRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsFullPipeline' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Update pipeline tags: - Pipelines x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: pipeline_update outputSensitivity: none readOnlyHint: false requiredScopes: - pipelines:write retrySemantics: unsafe title: Update pipeline triggerDescription: Replaces the full pipeline configuration (not a PATCH). Echo the last FullPipeline from pipeline_create_from_source, pipeline_update, or pipeline_detail — not pipeline_list — and send destinationUUID and tables together; a destination-only body is rejected and omitting tables deletes all tables. /pipelines/{uuid}/automatic-schema-changes: post: description: Enqueues automatic schema changes for one eligible pipeline. Set forceRefresh to bypass the two-hour cooldown for this execution. The request is accepted before reconciliation completes. operationId: pipeline_trigger_automatic_schema_changes parameters: - in: path name: uuid required: true schema: type: string - in: query name: forceRefresh schema: type: boolean responses: "202": description: Accepted "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error summary: Trigger automatic schema changes tags: - Pipelines x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: pipeline_trigger_automatic_schema_changes outputSensitivity: none readOnlyHint: false requiredScopes: - pipelines:write retrySemantics: safe-after-state-check title: Trigger automatic schema changes for a pipeline triggerDescription: Applies detected source DDL on one pipeline. For every eligible pipeline, use company_trigger_automatic_schema_changes. /pipelines/{uuid}/backfill: post: description: Triggers a backfill for specified tables in the pipeline. Supports options for pre-backfill behavior (drop, truncate, or do nothing) and schema/database filtering. operationId: pipeline_backfill_tables parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPipelineBackfillRequest' required: true responses: "204": description: No Content "400": description: Bad Request "403": description: Forbidden "500": description: Internal Server Error summary: Backfill pipeline tables tags: - Pipelines x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: pipeline_backfill_tables outputSensitivity: none readOnlyHint: false requiredScopes: - pipelines:write retrySemantics: unsafe title: Backfill pipeline tables triggerDescription: Backfills tables already on a running pipeline by table UUID from pipeline_detail (not connector_fetch_tables). To attach tables, use pipeline_update. /pipelines/{uuid}/backfill/cancel: post: description: Cancels backfilling for the given table UUIDs and/or history table UUIDs. operationId: pipeline_cancel_backfill_tables parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPipelineCancelBackfillRequest' required: true responses: "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Cancel backfill tags: - Pipelines x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: pipeline_cancel_backfill_tables outputSensitivity: none readOnlyHint: false requiredScopes: - pipelines:write retrySemantics: safe-after-state-check title: Cancel backfill triggerDescription: Cancels an in-progress backfill for the given table UUIDs. /pipelines/{uuid}/detect-schema-changes: post: description: Enqueues a background job that checks the pipeline's source database for new, removed, or altered tables. If the pipeline has auto-replicate or auto-history mode enabled, any newly discovered tables will be added to the pipeline automatically. An email summary is sent if changes are detected. operationId: pipeline_detect_schema_changes parameters: - in: path name: uuid required: true schema: type: string responses: "204": description: No Content "404": description: Not Found "500": description: Internal Server Error summary: Detect schema changes tags: - Pipelines x-artie-mcp: bodilessSuccess: true destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: pipeline_detect_schema_changes outputSensitivity: none readOnlyHint: false requiredScopes: - pipelines:write retrySemantics: unsafe title: Detect schema changes triggerDescription: Checks the source for table or schema drift. To apply destination DDL, use pipeline_trigger_automatic_schema_changes. /pipelines/{uuid}/start: post: description: 'Starts or resumes a pipeline. Fails if the pipeline has no destination, no tables, or (Postgres/Cockroach/Oracle) a source reader with an empty database. Optional body: keepPaused, disableBackFill.' operationId: pipeline_start parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPipelineStartRequest' responses: "204": description: No Content "400": description: Bad Request "403": description: Forbidden "500": description: Internal Server Error summary: Start pipeline tags: - Pipelines x-artie-mcp: bodilessSuccess: true destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: pipeline_start outputSensitivity: none readOnlyHint: false requiredScopes: - pipelines:write retrySemantics: unsafe title: Start pipeline triggerDescription: Deploys a draft or resumes a paused pipeline once destination, tables, and (Postgres/Cockroach/Oracle) reader database are set. Do not call immediately after create-from-source. If start 400s that two source readers share replication slot artie, GET source_reader_detail for sourceReaderUUID from pipeline_detail, set settings.replicationSlotOverride to a unique name, POST source_reader_update with the echoed reader, then retry start. /pipelines/{uuid}/status: post: description: Changes the status of a pipeline (e.g. running, paused). Validates the pipeline before resuming and deploys the configuration change. operationId: pipeline_update_status parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPipelineUpdateStatusRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterPipelineUpdateStatusResponse' description: OK "400": description: Bad Request "403": description: Forbidden "409": description: Conflict "500": description: Internal Server Error summary: Update pipeline status tags: - Pipelines x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: pipeline_update_status outputSensitivity: none readOnlyHint: false requiredScopes: - pipelines:write retrySemantics: safe-after-state-check title: Update pipeline status triggerDescription: Pauses or resumes an already-configured pipeline. For first deploy, use pipeline_start. /pipelines/{uuid}/update-with-source-reader: post: description: Updates pipeline and optionally its source reader in one request. Accepts gzip-encoded body. operationId: pipeline_update_with_source_reader parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPipelineUpdateWithSourceReaderRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterPipelineUpdateWithSourceReaderResponse' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Update pipeline with source reader tags: - Pipelines x-artie-mcp: destructiveHint: false exclusionReason: Accepts and returns source-reader configuration that can contain credentials. exposure: excluded idempotentHint: false inputSensitivity: restricted-credentials openWorldHint: false operationId: pipeline_update_with_source_reader outputSensitivity: restricted-credentials readOnlyHint: false remediation: Update the pipeline separately and manage source-reader credentials outside MCP. requiredScopes: - pipelines:write retrySemantics: unsafe title: Update pipeline with source reader triggerDescription: Use when you need to update pipeline with source reader. /pipelines/{uuid}/usage: get: description: Returns table-level usage statistics for the specified pipeline within a given time range. Requires 'from' and 'to' query parameters in RFC3339 format. operationId: pipeline_usage parameters: - in: path name: uuid required: true schema: type: string - in: query name: from required: true schema: format: date-time type: string - in: query name: to required: true schema: format: date-time type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterPipelineUsageResponse' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Get pipeline usage tags: - Pipelines x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: true operationId: pipeline_usage outputSensitivity: none readOnlyHint: true requiredScopes: - pipelines:read retrySemantics: safe title: Get pipeline usage triggerDescription: Returns per-table ingestion lag and row counts for a saved pipeline over a time range. Pass the pipeline uuid plus from and to as RFC3339 timestamps. Use when the user asks about lag, throughput, or rows processed. This is not slot health, warehouse correctness, pipeline_list status, or pipeline_detail table status. /pipelines/create-from-source: post: description: Creates a draft pipeline and a dedicated source reader. Provide sourceConnectorUUID to use an existing source, or sourceType to create a stub source connector. Optional destinationType creates a stub destination. To attach another pipeline to the same reader, use POST /pipelines with a shared sourceReaderUUID. operationId: pipeline_create_from_source requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPipelineCreateFromSourceRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsFullPipeline' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Create a new pipeline from a source tags: - Pipelines x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: pipeline_create_from_source outputSensitivity: none readOnlyHint: false requiredScopes: - pipelines:write retrySemantics: unsafe title: Create a new pipeline from a source triggerDescription: Creates a draft pipeline plus a new dedicated (non-shared) source reader. Pass sourceConnectorUUID to reuse a saved source; sourceType alone inserts an empty connector. For Postgres, Cockroach, and Oracle, pass database (from connector_fetch_databases) so the new reader can start. For a second destination on the same capture, use pipeline_create on a shared reader. /pipelines/validate-unsaved-destination: post: description: Validates destination configuration without persisting. Returns 204 on success or 200 with error message on validation failure. operationId: pipeline_validate_unsaved_destination requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPipelineValidateUnsavedDestinationRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterValidateErrorResponse' description: OK "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Validate unsaved destination tags: - Pipelines x-artie-mcp: bodilessSuccess: true destructiveHint: false exclusionReason: Accepts an unsaved destination connector configuration that can contain credentials. exposure: excluded idempotentHint: true inputSensitivity: restricted-credentials openWorldHint: true operationId: pipeline_validate_unsaved_destination outputSensitivity: none readOnlyHint: true remediation: Save the destination connector first, then use a safe pipeline tool. requiredScopes: - pipelines:read retrySemantics: safe title: Validate unsaved destination triggerDescription: Use when you need to validate unsaved destination. /pipelines/validate-unsaved-source: post: description: Validates source reader and connector configuration without persisting. Returns 204 on success or 200 with error message on validation failure. operationId: pipeline_validate_unsaved_source requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPipelineValidateUnsavedSourceRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterValidateErrorResponse' description: OK "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Validate unsaved source tags: - Pipelines x-artie-mcp: bodilessSuccess: true destructiveHint: false exclusionReason: Accepts an unsaved source connector and source-reader configuration that can contain credentials. exposure: excluded idempotentHint: true inputSensitivity: restricted-credentials openWorldHint: true operationId: pipeline_validate_unsaved_source outputSensitivity: none readOnlyHint: true remediation: Save the source configuration first, then use the safe pipeline tools. requiredScopes: - pipelines:read retrySemantics: safe title: Validate unsaved source triggerDescription: Use when you need to validate unsaved source. /privatelink-connections: post: description: Creates a new PrivateLink connection for the authenticated company. operationId: private_link_connection_create requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPrivateLinkConnectionCreateRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsPrivateLinkConnection' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Create a PrivateLink connection tags: - PrivateLink Connections x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: private_link_connection_create outputSensitivity: none readOnlyHint: false requiredScopes: - private_link_connections:write retrySemantics: unsafe title: Create a PrivateLink connection triggerDescription: Creates an AWS PrivateLink connection. Keep the returned UUID; there is no list tool. /privatelink-connections/{uuid}: delete: description: Permanently deletes a PrivateLink connection by UUID. This action cannot be undone and will remove the connection from your account. operationId: private_link_connection_delete parameters: - in: path name: uuid required: true schema: type: string responses: "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Delete a PrivateLink connection tags: - PrivateLink Connections x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: private_link_connection_delete outputSensitivity: none readOnlyHint: false requiredScopes: - private_link_connections:delete retrySemantics: safe-after-state-check title: Delete a PrivateLink connection triggerDescription: Permanently deletes a PrivateLink connection by UUID. get: description: Retrieves the details of a PrivateLink connection by UUID, including its status, VPC service name, region, DNS entry, and availability zones. operationId: private_link_connection_detail parameters: - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsPrivateLinkConnection' description: OK "404": description: Not Found "500": description: Internal Server Error summary: Get a PrivateLink connection tags: - PrivateLink Connections x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: private_link_connection_detail outputSensitivity: none readOnlyHint: true requiredScopes: - private_link_connections:read retrySemantics: safe title: Get a PrivateLink connection triggerDescription: Returns one PrivateLink connection by UUID. post: description: Updates an existing PrivateLink connection by UUID. The name can always be updated. The config fields (region / VPC service name / data plane / availability zones) are only mutable while the connection is under review or errored — once it is being provisioned or live they are immutable. operationId: private_link_connection_update parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterPrivateLinkConnectionUpdateRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsPrivateLinkConnection' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Update a PrivateLink connection tags: - PrivateLink Connections x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: private_link_connection_update outputSensitivity: none readOnlyHint: false requiredScopes: - private_link_connections:write retrySemantics: unsafe title: Update a PrivateLink connection triggerDescription: Updates a PrivateLink connection. Region, VPC service name, data plane, and AZs are only mutable while under review or errored. /source-readers: get: description: Lists all source readers for the authenticated company. operationId: source_reader_list responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/PayloadsSourceReader' type: array description: OK "500": description: Internal Server Error summary: List source readers tags: - Source Readers x-artie-mcp: destructiveHint: false exclusionReason: Returns source-reader configuration that can contain credentials. exposure: excluded idempotentHint: true inputSensitivity: none openWorldHint: false operationId: source_reader_list outputSensitivity: restricted-credentials readOnlyHint: true remediation: Use safe pipeline metadata tools and manage source-reader credentials outside MCP. requiredScopes: - source_readers:read retrySemantics: safe title: List source readers triggerDescription: Use when you need to list source readers. post: description: Creates a new source reader for the authenticated company. operationId: source_reader_create requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterSourceReaderCreateRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsSourceReader' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Create a source reader tags: - Source Readers x-artie-mcp: destructiveHint: false exclusionReason: Accepts and returns source-reader configuration that can contain credentials. exposure: excluded idempotentHint: false inputSensitivity: restricted-credentials openWorldHint: false operationId: source_reader_create outputSensitivity: restricted-credentials readOnlyHint: false remediation: Create source readers through the authenticated Dashboard setup flow. requiredScopes: - source_readers:write retrySemantics: unsafe title: Create a source reader triggerDescription: Use when you need to create a source reader. /source-readers/{uuid}: delete: description: Permanently deletes a source reader by UUID. The source reader must not be associated with any active pipelines before deletion. operationId: source_reader_delete parameters: - in: path name: uuid required: true schema: type: string responses: "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Delete a source reader tags: - Source Readers x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: true operationId: source_reader_delete outputSensitivity: none readOnlyHint: false requiredScopes: - source_readers:delete retrySemantics: safe-after-state-check title: Delete a source reader triggerDescription: Deletes a source reader unused by any active pipeline. Does not delete the source connector. get: description: Retrieves a source reader by UUID, including database, settings, and table configuration. Sensitive fields may be present. MCP clients should echo this payload into source_reader_update. operationId: source_reader_detail parameters: - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsSourceReader' description: OK "404": description: Not Found "500": description: Internal Server Error summary: Get a source reader tags: - Source Readers x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: source_reader_detail outputSensitivity: restricted-credentials readOnlyHint: true requiredScopes: - source_readers:read retrySemantics: safe title: Get a source reader triggerDescription: Returns a source reader by uuid from pipeline_detail.sourceReaderUUID, not a pipeline uuid or connector uuid. Includes database, tablesConfig, and settings (replicationSlotOverride, publicationNameOverride, heartbeats). Sensitive fields may be present. Echo this into source_reader_update; do not invent a partial body. If pipeline_start 400s that two readers share slot artie, GET this, set settings.replicationSlotOverride to a unique lowercase name (digits and underscores, <=63), POST source_reader_update, then retry start. post: description: Updates an existing source reader by UUID. Echo the last source_reader_detail payload and change only the intended fields; omitting name, database, or connectorUUID overwrites them with empty values. operationId: source_reader_update parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsSourceReader' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsSourceReader' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Update a source reader tags: - Source Readers x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: restricted-credentials openWorldHint: false operationId: source_reader_update outputSensitivity: restricted-credentials readOnlyHint: false requiredScopes: - source_readers:write retrySemantics: unsafe title: Update a source reader triggerDescription: Applies a SourceReader from source_reader_detail. Echo the last GET and change only the intended fields. Omitting name, database, or connectorUUID blanks them. To fix a duplicate Postgres slot (pipeline_start 400 that two readers share artie), set settings.replicationSlotOverride to a unique lowercase name, then pipeline_start. This is not pipeline_update or connector_update. /source-readers/{uuid}/deploy: post: description: Deploys a shared source reader to the data plane. The source reader must be shared and pass validation before it can be deployed. operationId: source_reader_deploy parameters: - in: path name: uuid required: true schema: type: string responses: "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Deploy a source reader tags: - Source Readers x-artie-mcp: bodilessSuccess: true destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: true operationId: source_reader_deploy outputSensitivity: none readOnlyHint: false requiredScopes: - source_readers:write retrySemantics: safe-after-state-check title: Deploy a source reader triggerDescription: Deploys a shared, validated source reader. To take a draft pipeline live, use pipeline_start. /source-readers/{uuid}/status: post: description: Changes the status of a shared source reader (e.g. running, paused). Only shared source readers are supported; for non-shared source readers, use the pipeline status endpoint instead. operationId: source_reader_update_status parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterSourceReaderUpdateStatusRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsSourceReader' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Update source reader status tags: - Source Readers x-artie-mcp: destructiveHint: false exclusionReason: Returns source-reader configuration that can contain credentials. exposure: excluded idempotentHint: false inputSensitivity: none openWorldHint: true operationId: source_reader_update_status outputSensitivity: restricted-credentials readOnlyHint: false remediation: Change source-reader status through the authenticated Dashboard setup flow. requiredScopes: - source_readers:write retrySemantics: safe-after-state-check title: Update source reader status triggerDescription: Use when you need to update source reader status. /source-readers/validate-unsaved: post: description: Validates a source reader configuration without persisting it. operationId: source_reader_validate_unsaved requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterSourceReaderValidateUnsavedRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterSourceReaderValidateUnsavedResponse' description: OK "204": description: No Content "500": description: Internal Server Error summary: Validate an unsaved source reader tags: - Source Readers x-artie-mcp: bodilessSuccess: true destructiveHint: false exclusionReason: Accepts unsaved source-reader configuration that can contain credentials. exposure: excluded idempotentHint: true inputSensitivity: restricted-credentials openWorldHint: true operationId: source_reader_validate_unsaved outputSensitivity: none readOnlyHint: true remediation: Validate source-reader credentials through the authenticated Dashboard setup flow. requiredScopes: - source_readers:read retrySemantics: safe title: Validate an unsaved source reader triggerDescription: Use when you need to validate an unsaved source reader. /ssh-tunnels: post: description: Creates a new SSH tunnel for the authenticated company. operationId: ssh_tunnel_create requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterSSHTunnelCreateRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsSSHTunnel' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Create an SSH tunnel tags: - SSH Tunnels x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: ssh_tunnel_create outputSensitivity: none readOnlyHint: false requiredScopes: - ssh_tunnels:write retrySemantics: unsafe title: Create an SSH tunnel triggerDescription: Creates an SSH tunnel record. Keep the returned UUID; there is no list tool. /ssh-tunnels/{uuid}: delete: description: Permanently deletes an SSH tunnel by UUID. The tunnel must not be in use by any connectors or pipelines before it can be deleted. operationId: ssh_tunnel_delete parameters: - in: path name: uuid required: true schema: type: string responses: "204": description: No Content "400": description: Bad Request "500": description: Internal Server Error summary: Delete an SSH tunnel tags: - SSH Tunnels x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: ssh_tunnel_delete outputSensitivity: none readOnlyHint: false requiredScopes: - ssh_tunnels:delete retrySemantics: safe-after-state-check title: Delete an SSH tunnel triggerDescription: Deletes an SSH tunnel unused by any connector or pipeline. get: description: Retrieves the details of an SSH tunnel by UUID, including its host, port, username, public key, and whether it is currently in use. operationId: ssh_tunnel_detail parameters: - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsSSHTunnel' description: OK "404": description: Not Found "500": description: Internal Server Error summary: Get an SSH tunnel tags: - SSH Tunnels x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: ssh_tunnel_detail outputSensitivity: none readOnlyHint: true requiredScopes: - ssh_tunnels:read retrySemantics: safe title: Get an SSH tunnel triggerDescription: Returns one SSH tunnel by UUID (no private key). post: description: Updates an existing SSH tunnel by UUID. You can modify the name, host, port, and username. Changes will mark associated pipelines as having undeployed changes. operationId: ssh_tunnel_update parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsSSHTunnel' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsSSHTunnel' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Update an SSH tunnel tags: - SSH Tunnels x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: ssh_tunnel_update outputSensitivity: none readOnlyHint: false requiredScopes: - ssh_tunnels:write retrySemantics: unsafe title: Update an SSH tunnel triggerDescription: Updates name, host, port, or username on an existing SSH tunnel. Does not rotate keys. webhooks: backfill.completed: post: description: Backfill completed requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookBackfillCompleted' required: true responses: "200": description: Acknowledge delivery backfill.failed: post: description: Backfill failed requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookBackfillFailed' required: true responses: "200": description: Acknowledge delivery backfill.started: post: description: Backfill started requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookBackfillStarted' required: true responses: "200": description: Acknowledge delivery connection.failed: post: description: Connection failed requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookConnectionFailed' required: true responses: "200": description: Acknowledge delivery database.discovered: post: description: Database discovered requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookDatabaseDiscovered' required: true responses: "200": description: Acknowledge delivery database.discovery_failed: post: description: Database discovery failed requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookDatabaseDiscovery_failed' required: true responses: "200": description: Acknowledge delivery database.removed: post: description: Database removed requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookDatabaseRemoved' required: true responses: "200": description: Acknowledge delivery ddl.applied: post: description: DDL applied requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookDdlApplied' required: true responses: "200": description: Acknowledge delivery ddl.seen: post: description: DDL seen requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookDdlSeen' required: true responses: "200": description: Acknowledge delivery dedupe.completed: post: description: Deduplication completed requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookDedupeCompleted' required: true responses: "200": description: Acknowledge delivery dedupe.failed: post: description: Deduplication failed requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookDedupeFailed' required: true responses: "200": description: Acknowledge delivery dedupe.started: post: description: Deduplication started requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookDedupeStarted' required: true responses: "200": description: Acknowledge delivery dek.generated: post: description: Data Encryption Key (DEK) generated requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookDekGenerated' required: true responses: "200": description: Acknowledge delivery replication.error: post: description: Replication error requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookReplicationError' required: true responses: "200": description: Acknowledge delivery replication.failed: post: description: Replication failed requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookReplicationFailed' required: true responses: "200": description: Acknowledge delivery replication.started: post: description: Replication started requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookReplicationStarted' required: true responses: "200": description: Acknowledge delivery row.skipped: post: description: Row skipped requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookRowSkipped' required: true responses: "200": description: Acknowledge delivery components: schemas: EnumsConnectorSlug: enum: - api - bigquery - clickhouse - cockroach - databricks - documentdb - delta - dynamodb - gcs - iceberg - keyspaces - mongodb - motherduck - mssql - mysql - oracle - planetscale - postgresql - redis - redshift - s3 - snowflake type: string EnumsPipelineStatus: enum: - draft - paused - transfer paused - running type: string EnumsSourceReaderStatus: enum: - draft - paused - running type: string ListResponseBodyColumnHashingSalt: properties: items: items: $ref: '#/components/schemas/PayloadsColumnHashingSalt' type: array required: - items type: object ListResponseBodyConnectorTable: properties: items: items: $ref: '#/components/schemas/RouterConnectorTable' type: array required: - items type: object ListResponseBodyConnectorTableDetailResponse: properties: items: items: $ref: '#/components/schemas/PayloadsConnectorTableDetailResponse' type: array required: - items type: object ListResponseBodyDataCatalogMatch: properties: items: items: $ref: '#/components/schemas/PayloadsDataCatalogMatch' type: array required: - items type: object ListResponseBodyEncryptionKey: properties: items: items: $ref: '#/components/schemas/PayloadsEncryptionKey' type: array required: - items type: object ListResponseBodyLightConnector: properties: items: items: $ref: '#/components/schemas/PayloadsLightConnector' type: array required: - items type: object ListResponseBodyLightPipeline: properties: items: items: $ref: '#/components/schemas/PayloadsLightPipeline' type: array required: - items type: object ListResponseBodyPostgresPublication: properties: items: items: $ref: '#/components/schemas/PayloadsPostgresPublication' type: array required: - items type: object ListResponseBodySchemaResponse: properties: items: items: $ref: '#/components/schemas/PayloadsSchemaResponse' type: array required: - items type: object PayloadsAdvancedPipelineSettingsPayload: properties: appendOnly: type: - "null" - boolean autoEnableHistoryForNewTables: type: - "null" - boolean autoEnableHistoryIgnoreRegex: type: - "null" - string autoReplicateIgnoreRegex: type: - "null" - string autoReplicateNewTables: type: - "null" - boolean bigQueryReservation: type: - "null" - string bufferRows: type: - "null" - integer castAllColumnsToString: type: - "null" - boolean defaultSourceSchema: type: - "null" - string disableAlerts: type: - "null" - boolean dropDeletedColumns: type: - "null" - boolean dynamoDBBackfillConfig: $ref: '#/components/schemas/PayloadsDynamoDBSnapshotConfig' enableSoftDelete: type: - "null" - boolean flushIntervalSeconds: type: - "null" - integer flushSizeKb: type: - "null" - integer forceUTCTimezone: type: - "null" - boolean includeArtieOperationColumn: type: - "null" - boolean includeArtieUpdatedAtColumn: type: - "null" - boolean includeDatabaseUpdatedAtColumn: type: - "null" - boolean includeFullSourceTableNameColumn: type: - "null" - boolean includeFullSourceTableNameColumnAsPrimaryKey: type: - "null" - boolean includeSourceMetadataColumn: type: - "null" - boolean maxConcurrentSnapshots: minimum: 0 type: - "null" - integer snowpipeStreamingMaxChannels: type: - "null" - integer splitEventsByType: type: - "null" - boolean stagingSchema: type: - "null" - string staticColumns: items: $ref: '#/components/schemas/PayloadsStaticColumn' type: - "null" - array truncateExceededValues: type: - "null" - boolean turboLatencyThresholdMinutes: type: - "null" - integer turboRowThreshold: type: - "null" - integer turboWarehouse: type: - "null" - string useBQBatchPriority: type: - "null" - boolean useBigNumericForVariableNumeric: type: - "null" - boolean useDoubleForVariableNumeric: type: - "null" - boolean useNewStringMethod: type: - "null" - boolean useSnowpipeStreaming: type: - "null" - boolean writeRawBinaryValues: type: - "null" - boolean type: object PayloadsAdvancedTableSettingsPayload: properties: alias: type: - "null" - string bufferRows: type: - "null" - integer columnsToCompress: items: type: string type: array columnsToEncrypt: items: type: string type: array columnsToHash: items: type: string type: array columnsToTrim: items: type: string type: array ctidSettings: $ref: '#/components/schemas/PayloadsCTIDSettings' encryptJSONBColumns: type: - "null" - boolean excludeColumns: items: type: string type: array flushIntervalSeconds: type: - "null" - integer flushSizeKb: type: - "null" - integer includeColumns: items: type: string type: array k8sRequestCPU: minimum: 0 type: - "null" - integer k8sRequestMemoryMB: minimum: 0 type: - "null" - integer mergePredicates: items: $ref: '#/components/schemas/PayloadsMergePredicates' type: array msmFlushCount: minimum: 0 type: - "null" - integer primaryKeysOverride: items: type: string type: - array - "null" rangeSettings: $ref: '#/components/schemas/PayloadsRangeSettings' shouldBackfillHistoryTable: type: - "null" - boolean skipBackfill: type: - "null" - boolean skipDelete: type: - "null" - boolean skipNoOpUpdates: type: - "null" - boolean softPartitioning: $ref: '#/components/schemas/PayloadsSoftPartitioning' streamARN: type: - "null" - string unifyAcrossDatabases: type: - "null" - boolean unifyAcrossSchemas: type: - "null" - boolean type: object PayloadsAzureBlobStorageConfig: properties: accountURL: type: string containerName: type: string sasToken: type: string type: object PayloadsBigQuerySettings: properties: partitionBy: type: string partitionField: type: string partitionType: type: string type: object PayloadsCTIDSettings: properties: chunkSize: minimum: 0 type: integer enabled: type: boolean maxParallelism: minimum: 0 type: integer type: object PayloadsCatalogTableProperty: properties: isDate: type: boolean key: type: string value: $ref: '#/components/schemas/PayloadsJSONValue' type: object PayloadsColumnHashingSalt: properties: createdAt: format: date-time type: string description: type: string name: type: string updatedAt: format: date-time type: string uuid: format: uuid type: string required: - uuid - name type: object PayloadsColumnHashingSaltDetail: properties: createdAt: format: date-time type: string description: type: string name: type: string salt: type: string updatedAt: format: date-time type: string uuid: format: uuid type: string required: - uuid - name - salt type: object PayloadsCompactionConfig: properties: enabled: type: boolean everySeconds: type: integer quietWindow: $ref: '#/components/schemas/PayloadsCompactionQuietWindow' type: object PayloadsCompactionQuietWindow: properties: end: type: string start: type: string type: object PayloadsConnectorColumn: properties: metadata: $ref: '#/components/schemas/PayloadsConnectorColumnMetadata' name: type: string type: object PayloadsConnectorColumnMetadata: properties: comment: type: string dataType: type: string defaultValue: type: - "null" - string isPrimaryKey: type: - "null" - boolean notNull: type: boolean type: object PayloadsConnectorFetchDatabasesResponse: properties: items: items: $ref: '#/components/schemas/PayloadsDatabaseListItem' type: - array - "null" metadata: items: $ref: '#/components/schemas/PayloadsCatalogTableProperty' type: array type: object PayloadsConnectorPayload: properties: dataPlaneName: type: string defaultDatabase: type: - "null" - string environmentUUID: format: uuid type: - "null" - string label: type: string privateLinkUUID: format: uuid type: - "null" - string sharedConfig: additionalProperties: {} type: - object - "null" snapshotPrivateLinkUUID: format: uuid type: - "null" - string sshTunnelUUID: format: uuid type: - "null" - string type: type: string uuid: type: string type: object PayloadsConnectorTableDetailResponse: properties: columns: items: $ref: '#/components/schemas/PayloadsConnectorColumn' type: array createdAt: format: date-time type: - "null" - string isView: type: boolean metadata: items: $ref: '#/components/schemas/PayloadsCatalogTableProperty' type: array modifiedAt: format: date-time type: - "null" - string name: type: string schema: type: string unreadable: type: boolean type: object PayloadsDataCatalogDatabase: properties: name: type: string type: object PayloadsDataCatalogMatch: properties: connectorUUID: format: uuid type: string object: $ref: '#/components/schemas/PayloadsDataCatalogMatchedObject' score: format: double type: number type: object PayloadsDataCatalogMatchedObject: properties: database: $ref: '#/components/schemas/PayloadsDataCatalogDatabase' schema: $ref: '#/components/schemas/PayloadsDataCatalogSchema' table: $ref: '#/components/schemas/PayloadsDataCatalogTable' type: object PayloadsDataCatalogSchema: properties: databaseName: type: string name: type: string type: object PayloadsDataCatalogSearchRequest: properties: query: type: string type: object PayloadsDataCatalogTable: properties: databaseName: type: string name: type: string schemaName: type: string type: object PayloadsDatabaseListItem: properties: name: type: string type: object PayloadsDynamoDBSnapshotConfig: properties: bucket: type: string enabled: type: boolean exportArn: type: string optionalFolder: type: string type: object PayloadsEncryptionKey: properties: createdAt: format: date-time type: string description: type: string kmsKeyUUID: format: uuid type: - "null" - string name: type: string type: type: string updatedAt: format: date-time type: string uuid: format: uuid type: string required: - uuid - name - type type: object PayloadsEncryptionKeyDetail: properties: createdAt: format: date-time type: string description: type: string key: type: string kmsKeyUUID: format: uuid type: - "null" - string name: type: string type: type: string updatedAt: format: date-time type: string uuid: format: uuid type: string required: - uuid - name - type - key type: object PayloadsFullConnector: properties: companyUUID: format: uuid type: string connectionLabel: type: string createdAt: format: date-time type: string dataPlaneName: type: - "null" - string defaultDatabase: type: string environmentUUID: format: uuid type: string isValid: type: boolean label: type: string privateLinkUUID: format: uuid type: - "null" - string sharedConfig: $ref: '#/components/schemas/PayloadsJSONValue' snapshotPrivateLinkUUID: format: uuid type: - "null" - string sshTunnelUUID: format: uuid type: - "null" - string type: $ref: '#/components/schemas/EnumsConnectorSlug' updatedAt: format: date-time type: string uuid: format: uuid type: string required: - label - uuid - createdAt - updatedAt - type - companyUUID - environmentUUID - isValid type: object PayloadsFullPipeline: properties: advancedSettings: $ref: '#/components/schemas/PayloadsPipelineAdvancedSettings' columnHashingSaltUUID: format: uuid type: - "null" - string companyUUID: format: uuid type: string createdAt: format: date-time type: string dataPlaneName: type: string destinationUUID: format: uuid type: - "null" - string encryptionKeyUUID: format: uuid type: - "null" - string environmentUUID: format: uuid type: string hasBackfillingTables: type: boolean hasUndeployedChanges: type: boolean isDeploying: type: boolean lastDeployedAt: format: date-time type: - "null" - string lastUpdatedAt: format: date-time type: string name: type: string snowflakeEcoScheduleUUID: format: uuid type: - "null" - string sourceReaderUUID: format: uuid type: string sourceType: $ref: '#/components/schemas/EnumsConnectorSlug' specificDestCfg: $ref: '#/components/schemas/PayloadsSpecificConfig' status: $ref: '#/components/schemas/EnumsPipelineStatus' tables: items: $ref: '#/components/schemas/PayloadsTable' type: array uuid: format: uuid type: string required: - uuid - companyUUID - dataPlaneName - environmentUUID - name - createdAt - lastUpdatedAt - isDeploying - sourceType - hasUndeployedChanges - tables - specificDestCfg - advancedSettings type: object PayloadsIngestionAPIKey: properties: companyUUID: format: uuid type: string createdAt: format: date-time type: string expiresAt: format: date-time type: - "null" - string last4: type: string name: type: string sourceReaderUUID: format: uuid type: string updatedAt: format: date-time type: string uuid: format: uuid type: string required: - uuid - createdAt - updatedAt - name - last4 - sourceReaderUUID - companyUUID type: object PayloadsJSONValue: anyOf: - $ref: '#/components/schemas/PayloadsJsonValueString' - $ref: '#/components/schemas/PayloadsJsonValueNumber' - $ref: '#/components/schemas/PayloadsJsonValueBoolean' - $ref: '#/components/schemas/PayloadsJsonValueObject' - $ref: '#/components/schemas/PayloadsJsonValueArray' - $ref: '#/components/schemas/PayloadsJsonValueNull' PayloadsJsonValueArray: items: $ref: '#/components/schemas/PayloadsJsonValueArrayItem' type: array PayloadsJsonValueArrayItem: anyOf: - $ref: '#/components/schemas/PayloadsJsonValueString' - $ref: '#/components/schemas/PayloadsJsonValueNumber' - $ref: '#/components/schemas/PayloadsJsonValueBoolean' - $ref: '#/components/schemas/PayloadsJsonValueObject' - $ref: '#/components/schemas/PayloadsJsonValueNull' PayloadsJsonValueBoolean: oneOf: - type: boolean type: boolean PayloadsJsonValueNull: oneOf: - type: "null" type: "null" PayloadsJsonValueNumber: oneOf: - type: number type: number PayloadsJsonValueObject: additionalProperties: true type: object PayloadsJsonValueString: oneOf: - type: string type: string PayloadsLightConnector: properties: companyUUID: format: uuid type: string connectionLabel: type: string createdAt: format: date-time type: string dataPlaneName: type: - "null" - string environmentUUID: format: uuid type: string isValid: type: boolean label: type: string privateLinkUUID: format: uuid type: - "null" - string snapshotPrivateLinkUUID: format: uuid type: - "null" - string sshTunnelUUID: format: uuid type: - "null" - string type: $ref: '#/components/schemas/EnumsConnectorSlug' updatedAt: format: date-time type: string uuid: format: uuid type: string required: - label - uuid - createdAt - updatedAt - type - companyUUID - environmentUUID - isValid type: object PayloadsLightPipeline: properties: columnHashingSaltUUID: format: uuid type: - "null" - string companyUUID: format: uuid type: string createdAt: format: date-time type: string dataPlaneName: type: string destinationUUID: format: uuid type: - "null" - string encryptionKeyUUID: format: uuid type: - "null" - string environmentUUID: format: uuid type: string hasBackfillingTables: type: boolean hasUndeployedChanges: type: boolean isDeploying: type: boolean lastDeployedAt: format: date-time type: - "null" - string lastUpdatedAt: format: date-time type: string name: type: string snowflakeEcoScheduleUUID: format: uuid type: - "null" - string sourceReaderUUID: format: uuid type: string sourceType: $ref: '#/components/schemas/EnumsConnectorSlug' status: $ref: '#/components/schemas/EnumsPipelineStatus' uuid: format: uuid type: string required: - uuid - companyUUID - dataPlaneName - environmentUUID - name - createdAt - lastUpdatedAt - isDeploying - sourceType - hasUndeployedChanges type: object PayloadsMergePredicates: properties: partitionBy: type: string partitionField: type: string partitionType: type: string type: object PayloadsPipelineAdvancedSettings: properties: appendOnly: type: boolean autoEnableHistoryForNewTables: type: boolean autoEnableHistoryIgnoreRegex: type: string autoReplicateIgnoreRegex: type: string autoReplicateNewTables: type: boolean bigQueryReservation: type: string bufferRows: type: integer castAllColumnsToString: type: boolean defaultSourceSchema: type: string disableAlerts: type: boolean dropDeletedColumns: type: boolean dynamoDBBackfillConfig: $ref: '#/components/schemas/PayloadsDynamoDBSnapshotConfig' enableSoftDelete: type: boolean flushIntervalSeconds: type: integer flushSizeKb: type: integer forceUTCTimezone: type: boolean includeArtieOperationColumn: type: boolean includeArtieUpdatedAtColumn: type: boolean includeDatabaseUpdatedAtColumn: type: boolean includeFullSourceTableNameColumn: type: boolean includeFullSourceTableNameColumnAsPrimaryKey: type: boolean includeSourceMetadataColumn: type: boolean maxConcurrentSnapshots: minimum: 0 type: integer nullOutInvalidValues: type: boolean reuseStagingTable: type: boolean sessionDriverMemory: type: string sessionExecutorMemory: type: string snowpipeStreamingMaxChannels: type: integer splitEventsByType: type: boolean stagingSchema: type: string staticColumns: items: $ref: '#/components/schemas/PayloadsStaticColumn' type: - array - "null" tablesPerTransferPod: minimum: 0 type: integer truncateExceededValues: type: boolean turboLatencyThresholdMinutes: type: integer turboRowThreshold: type: integer turboWarehouse: type: string useBQBatchPriority: type: boolean useBigNumericForVariableNumeric: type: boolean useDoubleForVariableNumeric: type: boolean useNewStringMethod: type: - "null" - boolean useSnowpipeStreaming: type: boolean waitForTopics: type: boolean writeRawBinaryValues: type: boolean type: object PayloadsPipelinePayload: properties: advancedSettings: $ref: '#/components/schemas/PayloadsAdvancedPipelineSettingsPayload' columnHashingSaltUUID: format: uuid type: - "null" - string dataPlaneName: type: string destinationUUID: format: uuid type: - "null" - string encryptionKeyUUID: format: uuid type: - "null" - string name: type: string snowflakeEcoScheduleUUID: format: uuid type: - "null" - string sourceReaderUUID: format: uuid type: string specificDestCfg: $ref: '#/components/schemas/PayloadsSpecificConfig' tables: items: $ref: '#/components/schemas/PayloadsTablePayload' type: - array - "null" type: object PayloadsPostgresPublication: properties: allTables: type: boolean name: type: string publishViaPartitionRoot: type: boolean required: - name type: object PayloadsPrivateLinkConnection: properties: approvedAt: format: date-time type: - "null" - string availabilityZoneIds: items: type: string type: array companyUUID: format: uuid type: string createdAt: format: date-time type: string createdBy: type: string dataPlaneName: type: - "null" - string dnsEntry: type: string environmentUUID: format: uuid type: string name: type: string provisioningError: type: string region: type: string status: type: string updatedAt: format: date-time type: string uuid: format: uuid type: string vpcEndpointId: type: string vpcServiceName: type: string required: - uuid - companyUUID - environmentUUID - createdAt - updatedAt - name - vpcServiceName - status - region - dnsEntry - availabilityZoneIds type: object PayloadsRangeSettings: properties: batchSize: minimum: 0 type: integer chunksSize: minimum: 0 type: integer enabled: type: boolean maxParallelism: minimum: 0 type: integer type: object PayloadsSSHTunnel: properties: companyUUID: format: uuid type: string createdAt: format: date-time type: string environmentUUID: format: uuid type: string host: type: string isInUse: type: - "null" - boolean name: type: string port: type: integer publicKey: type: string updatedAt: format: date-time type: string username: type: string uuid: format: uuid type: string required: - uuid - companyUUID - environmentUUID - name - host - port - publicKey - username type: object PayloadsSchemaResponse: properties: name: type: string unreadable: type: boolean unreadableReason: type: string type: object PayloadsSeenTableColumn: properties: metadata: $ref: '#/components/schemas/PayloadsSeenTableColumnMetadata' name: type: string required: - name - metadata type: object PayloadsSeenTableColumnMetadata: properties: dataType: type: string defaultValue: type: - "null" - string isPrimaryKey: type: - "null" - boolean notNull: type: boolean required: - dataType - notNull type: object PayloadsSoftPartitioning: properties: enabled: type: boolean maxPartitions: type: integer partitionColumn: type: string partitionFrequency: type: string partitionSchema: type: string type: object PayloadsSourceReader: properties: apiBaseURL: type: string companyUUID: format: uuid type: string connectorUUID: format: uuid type: string containerName: type: string createdAt: format: date-time type: string dataPlaneName: type: string database: type: string environmentUUID: format: uuid type: string isShared: type: - "null" - boolean isValid: type: boolean name: type: string settings: $ref: '#/components/schemas/PayloadsSourceReaderSettingsPayload' status: $ref: '#/components/schemas/EnumsSourceReaderStatus' tablesConfig: $ref: '#/components/schemas/PayloadsSourceReaderTablesConfig' updatedAt: format: date-time type: string uuid: format: uuid type: string required: - uuid - name - companyUUID - dataPlaneName - environmentUUID - connectorUUID - status - isValid - database - containerName - settings type: object PayloadsSourceReaderSettingsPayload: properties: archiveLogPassword: type: - "null" - string archiveLogPath: type: - "null" - string azureBlobStorageConfig: $ref: '#/components/schemas/PayloadsAzureBlobStorageConfig' backfillBatchSize: minimum: 0 type: - "null" - integer collectionScopedMode: type: - "null" - boolean compositeTypesAsText: type: - "null" - boolean databasesToSync: items: type: string type: - "null" - array disableAutoFetchTables: type: - "null" - boolean disableFullDocumentBeforeChange: type: - "null" - boolean disableNoCursorTimeout: type: - "null" - boolean enableClientSideFullDocumentLookup: type: - "null" - boolean enableHeartbeats: type: - "null" - boolean enableRelationMessageCaching: type: - "null" - boolean enableSchemaHistoryCompaction: type: - "null" - boolean maxConnIdleTimeSeconds: type: - "null" - integer messageCompression: enum: - gzip - "" - null type: - "null" - string mssqlChangeTrackingConcurrency: type: - "null" - integer mssqlChangeTrackingMaxIdleConns: type: - "null" - integer mssqlChangeTrackingPollIntervalMs: minimum: 0 type: - "null" - integer mssqlReplicationMethod: type: - "null" - string oneTopicPerSchema: type: - "null" - boolean publicationAutoCreateMode: type: - "null" - string publicationNameOverride: type: - "null" - string publishViaPartitionRoot: type: - "null" - boolean replicationSlotOverride: type: - "null" - string unifyAcrossDatabases: type: - "null" - boolean unifyAcrossSchemas: type: - "null" - boolean unifyAcrossSchemasMaxParallelism: maximum: 3 minimum: 0 type: - "null" - integer unifyAcrossSchemasRegex: type: - "null" - string useAdvanceOnPrimaryKeepAlive: type: - "null" - boolean useFailoverReplicationSlot: type: - "null" - boolean useNumericTypesForMoney: type: - "null" - boolean useReaderForOracleStreaming: type: - "null" - boolean type: object PayloadsSourceReaderTable: properties: excludeColumns: items: type: string type: array includeColumns: items: type: string type: array name: type: string schema: type: string unifyAcrossDatabases: type: boolean unifyAcrossSchemas: type: boolean type: object PayloadsSourceReaderTablesConfig: additionalProperties: $ref: '#/components/schemas/PayloadsSourceReaderTable' type: - "null" - object PayloadsSpecificConfig: properties: bucketName: type: string checkpointInterval: type: integer compaction: $ref: '#/components/schemas/PayloadsCompactionConfig' containerName: type: string database: type: string dynamicallyCreateNamespaces: type: boolean externalStageName: type: string externalStageS3Bucket: type: string externalStageS3Prefix: type: string folderName: type: string schema: type: string schemaNamePrefix: type: string tableNameSeparator: type: string useSameSchemaAsSource: type: boolean type: object PayloadsStaticColumn: properties: column: type: string value: type: string type: object PayloadsTable: properties: advancedSettings: $ref: '#/components/schemas/PayloadsTableAdvancedSettings' backfillStage: type: string createdAt: format: date-time type: string destinationTableName: type: string disableReplication: type: boolean enableHistoryMode: type: boolean historyTableBackfillStage: type: string historyTableStatus: type: string individualDeployment: type: boolean name: type: string schema: type: string status: type: string updatedAt: format: date-time type: string uuid: format: uuid type: string type: object PayloadsTableAdvancedSettings: properties: alias: type: string backfillFromDatabases: items: type: string type: - array - "null" backfillFromSchemas: items: type: string type: - array - "null" bigQueryPartitionSettings: $ref: '#/components/schemas/PayloadsBigQuerySettings' bufferRows: type: integer columnsToCompress: items: type: string type: array columnsToEncrypt: items: type: string type: array columnsToHash: items: type: string type: array columnsToTrim: items: type: string type: array ctidSettings: $ref: '#/components/schemas/PayloadsCTIDSettings' encryptJSONBColumns: type: boolean endingPrimaryKey: type: string excludeColumns: items: type: string type: array flushIntervalSeconds: type: integer flushSizeKb: type: integer historyTableBackfillFromSchemas: items: type: string type: - array - "null" includeColumns: items: type: string type: array k8sRequestCPU: minimum: 0 type: integer k8sRequestMemoryMB: minimum: 0 type: integer mergePredicates: items: $ref: '#/components/schemas/PayloadsMergePredicates' type: array msmFlushCount: minimum: 0 type: integer primaryKeysOverride: items: type: string type: - array - "null" rangeSettings: $ref: '#/components/schemas/PayloadsRangeSettings' shouldBackfillHistoryTable: type: - "null" - boolean skipBackfill: type: boolean skipDelete: type: boolean skipNoOpUpdates: type: boolean softPartitioning: $ref: '#/components/schemas/PayloadsSoftPartitioning' startingPrimaryKey: type: string streamARN: type: string unifyAcrossDatabases: type: boolean unifyAcrossSchemas: type: boolean type: object PayloadsTablePayload: properties: advancedSettings: $ref: '#/components/schemas/PayloadsAdvancedTableSettingsPayload' disableReplication: type: boolean enableHistoryMode: type: boolean individualDeployment: type: - "null" - boolean name: type: string schema: type: string status: type: - "null" - string uuid: format: uuid type: string type: object PayloadsWebhookBackfillCompleted: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - backfill.completed type: string properties: properties: duration_seconds: description: Elapsed time in seconds. type: number rows_written: description: Total rows written during the backfill. type: integer schema: description: Schema containing the table that finished backfilling (scrubbed). type: string table: description: Table that finished backfilling (scrubbed). type: string required: - table type: object required: - event - properties type: object description: Backfill completed examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: backfill.completed message: Backfill completed pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: duration_seconds: 842.31 rows_written: 850000 schema: public table: orders severity: info source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: backfill.completed PayloadsWebhookBackfillFailed: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - backfill.failed type: string properties: properties: error: description: Full error string (scrubbed). type: string rows_written: description: Rows written before the failure. type: integer schema: description: Schema containing the table whose backfill failed (scrubbed). type: string table: description: Table whose backfill failed (scrubbed). type: string required: - table - error type: object required: - event - properties type: object description: Backfill failed examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: backfill.failed message: Backfill failed pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: error: read tcp connection reset by peer rows_written: 420000 schema: public table: orders severity: error source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: backfill.failed PayloadsWebhookBackfillStarted: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - backfill.started type: string properties: properties: schema: description: Schema containing the table being backfilled (scrubbed). type: string table: description: Table being backfilled (scrubbed). type: string required: - table type: object required: - event - properties type: object description: Backfill started examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: backfill.started message: Backfill started pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: schema: public table: orders severity: info source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: backfill.started PayloadsWebhookConnectionFailed: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - connection.failed type: string properties: properties: error: description: Full error string (scrubbed). type: string required: - error type: object required: - event - properties type: object deprecated: true description: Connection failed examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: connection.failed message: Connection failed pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: error: 'dial tcp: connection refused' severity: error source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: connection.failed PayloadsWebhookDatabaseDiscovered: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - database.discovered type: string properties: properties: database: description: Name of the database that was discovered (scrubbed). type: string required: - database type: object required: - event - properties type: object description: Database discovered examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: database.discovered message: Database discovered pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: database: AdventureWorks severity: info source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: database.discovered PayloadsWebhookDatabaseDiscovery_failed: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - database.discovery_failed type: string properties: properties: error: description: Full error string (scrubbed). type: string required: - error type: object required: - event - properties type: object description: Database discovery failed examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: database.discovery_failed message: Database discovery failed pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: error: 'failed to list databases: connection reset by peer' severity: error source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: database.discovery_failed PayloadsWebhookDatabaseRemoved: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - database.removed type: string properties: properties: database: description: Name of the database that was removed (scrubbed). type: string required: - database type: object required: - event - properties type: object description: Database removed examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: database.removed message: Database removed pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: database: AdventureWorks severity: warning source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: database.removed PayloadsWebhookDdlApplied: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - ddl.applied type: string properties: properties: queries: description: SQL statements executed for this DDL operation. items: type: string type: array schema: description: Schema containing the affected table (scrubbed). type: string table: description: Table affected by the DDL (scrubbed). type: string type: object required: - event - properties type: object description: DDL applied examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: ddl.applied message: DDL applied pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: queries: - ALTER TABLE orders ADD COLUMN promo_code VARCHAR(32) schema: public table: orders severity: info source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: ddl.applied PayloadsWebhookDdlSeen: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - ddl.seen type: string properties: properties: ddl_event: description: Parsed DDL event details from the source. items: type: object type: array queries: description: SQL statements observed in the DDL event. items: type: string type: array type: object required: - event - properties type: object description: DDL seen examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: ddl.seen message: DDL seen pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: ddl_event: - column: promo_code operation: add_column type: VARCHAR(32) queries: - ALTER TABLE orders ADD COLUMN promo_code VARCHAR(32) severity: info source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: ddl.seen PayloadsWebhookDedupeCompleted: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - dedupe.completed type: string properties: properties: duration_seconds: description: Elapsed time in seconds. type: number schema: description: Schema containing the table that finished deduplication (scrubbed). type: string table: description: Table that finished deduplication (scrubbed). type: string required: - table type: object required: - event - properties type: object description: Deduplication completed examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: dedupe.completed message: Deduplication completed pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: duration_seconds: 12.5 schema: public table: orders severity: info source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: dedupe.completed PayloadsWebhookDedupeFailed: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - dedupe.failed type: string properties: properties: error: description: Full error string (scrubbed). type: string schema: description: Schema containing the table whose deduplication failed (scrubbed). type: string table: description: Table whose deduplication failed (scrubbed). type: string required: - table - error type: object required: - event - properties type: object description: Deduplication failed examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: dedupe.failed message: Deduplication failed pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: error: 'merge query failed: timeout' schema: public table: orders severity: error source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: dedupe.failed PayloadsWebhookDedupeStarted: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - dedupe.started type: string properties: properties: schema: description: Schema containing the table being deduplicated (scrubbed). type: string table: description: Table being deduplicated (scrubbed). type: string required: - table type: object required: - event - properties type: object description: Deduplication started examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: dedupe.started message: Deduplication started pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: schema: public table: orders severity: info source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: dedupe.started PayloadsWebhookDekGenerated: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - dek.generated type: string properties: properties: aws_kms_key_arn: description: ARN of the AWS KMS key used to encrypt the DEK. type: string encryption_key_name: description: Human-readable name of the DEK. type: string encryption_key_uuid: description: UUID of the generated Data Encryption Key. type: string required: - encryption_key_uuid type: object required: - event - properties type: object description: Data Encryption Key (DEK) generated examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: dek.generated message: Data Encryption Key (DEK) generated pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: aws_kms_key_arn: arn:aws:kms:us-east-1:123456789012:key/abcd1234-a56b-7890-cdef-1234567890ab encryption_key_name: orders-dek-2026-06 encryption_key_uuid: 33333333-3333-3333-3333-333333333333 severity: info source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: dek.generated PayloadsWebhookDeliveryMetadata: properties: attempt: description: 1-based delivery attempt number for this event. type: integer required: - attempt type: object PayloadsWebhookEnvelope: properties: delivery_metadata: $ref: '#/components/schemas/PayloadsWebhookDeliveryMetadata' destination: description: Destination connector type (e.g. bigquery). type: string environment_name: description: Human-readable name of the environment. Omitted when the event has no environment. type: string environment_uuid: description: UUID of the environment the event belongs to. Omitted when the event has no environment. format: uuid type: - "null" - string event: description: Event type identifier (e.g. replication.failed). type: string message: description: Human-readable summary of the event. type: string pipelines: items: $ref: '#/components/schemas/PayloadsWebhookPipelineInfo' type: array properties: $ref: '#/components/schemas/PayloadsWebhookEventProperties' severity: $ref: '#/components/schemas/PayloadsWebhookSeverity' description: Severity of the event. source: description: Source connector type (e.g. postgresql). type: string source_reader_uuid: format: uuid type: string timestamp: description: Time the event occurred (RFC 3339). format: date-time type: string required: - event - message - severity - timestamp - properties - delivery_metadata - source_reader_uuid - pipelines - source - destination type: object PayloadsWebhookEventProperties: additionalProperties: true description: Event-specific fields included in the `properties` object of a webhook delivery. The set of keys depends on the event type. Every field is optional; omitted keys should be treated as absent. Artie may add new fields at any time—clients must tolerate unknown keys and should not assume a fixed schema beyond this contract. type: object PayloadsWebhookOutgoingPayload: description: Webhook delivery body (Event Payload format). The concrete shape is selected by the `event` field; see the matching variant for the exact `properties` keys. discriminator: mapping: backfill.completed: '#/components/schemas/PayloadsWebhookBackfillCompleted' backfill.failed: '#/components/schemas/PayloadsWebhookBackfillFailed' backfill.started: '#/components/schemas/PayloadsWebhookBackfillStarted' connection.failed: '#/components/schemas/PayloadsWebhookConnectionFailed' database.discovered: '#/components/schemas/PayloadsWebhookDatabaseDiscovered' database.discovery_failed: '#/components/schemas/PayloadsWebhookDatabaseDiscovery_failed' database.removed: '#/components/schemas/PayloadsWebhookDatabaseRemoved' ddl.applied: '#/components/schemas/PayloadsWebhookDdlApplied' ddl.seen: '#/components/schemas/PayloadsWebhookDdlSeen' dedupe.completed: '#/components/schemas/PayloadsWebhookDedupeCompleted' dedupe.failed: '#/components/schemas/PayloadsWebhookDedupeFailed' dedupe.started: '#/components/schemas/PayloadsWebhookDedupeStarted' dek.generated: '#/components/schemas/PayloadsWebhookDekGenerated' replication.error: '#/components/schemas/PayloadsWebhookReplicationError' replication.failed: '#/components/schemas/PayloadsWebhookReplicationFailed' replication.started: '#/components/schemas/PayloadsWebhookReplicationStarted' row.skipped: '#/components/schemas/PayloadsWebhookRowSkipped' propertyName: event oneOf: - $ref: '#/components/schemas/PayloadsWebhookBackfillCompleted' - $ref: '#/components/schemas/PayloadsWebhookBackfillFailed' - $ref: '#/components/schemas/PayloadsWebhookBackfillStarted' - $ref: '#/components/schemas/PayloadsWebhookConnectionFailed' - $ref: '#/components/schemas/PayloadsWebhookDatabaseDiscovered' - $ref: '#/components/schemas/PayloadsWebhookDatabaseDiscovery_failed' - $ref: '#/components/schemas/PayloadsWebhookDatabaseRemoved' - $ref: '#/components/schemas/PayloadsWebhookDdlApplied' - $ref: '#/components/schemas/PayloadsWebhookDdlSeen' - $ref: '#/components/schemas/PayloadsWebhookDedupeCompleted' - $ref: '#/components/schemas/PayloadsWebhookDedupeFailed' - $ref: '#/components/schemas/PayloadsWebhookDedupeStarted' - $ref: '#/components/schemas/PayloadsWebhookDekGenerated' - $ref: '#/components/schemas/PayloadsWebhookReplicationError' - $ref: '#/components/schemas/PayloadsWebhookReplicationFailed' - $ref: '#/components/schemas/PayloadsWebhookReplicationStarted' - $ref: '#/components/schemas/PayloadsWebhookRowSkipped' PayloadsWebhookPipelineInfo: properties: name: type: string uuid: format: uuid type: string required: - uuid - name type: object PayloadsWebhookReplicationError: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - replication.error type: string properties: properties: error: description: Full error string (scrubbed). type: string topic: description: Kafka topic the failure is scoped to, when the error is topic-specific (scrubbed). type: string required: - error type: object required: - event - properties type: object description: Replication error examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: replication.error message: Replication error pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: error: 'failed to flush: context deadline exceeded' topic: dbserver1.public.orders severity: error source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: replication.error PayloadsWebhookReplicationFailed: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - replication.failed type: string properties: properties: error: description: Full error string (scrubbed). type: string required: - error type: object required: - event - properties type: object deprecated: true description: Replication failed examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: replication.failed message: Replication failed pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: error: 'failed to flush: context deadline exceeded' severity: error source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: replication.failed PayloadsWebhookReplicationStarted: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - replication.started type: string properties: type: object required: - event - properties type: object description: Replication started examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: replication.started message: Replication started pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: {} severity: info source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: replication.started PayloadsWebhookRowSkipped: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - row.skipped type: string properties: properties: primary_keys: description: Primary-key map identifying the row that was dropped. type: object schema: description: Schema containing the skipped row's table (scrubbed). type: string table: description: Table the skipped row belongs to (scrubbed). type: string required: - table - primary_keys type: object required: - event - properties type: object description: Row skipped examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: row.skipped message: Row skipped pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: primary_keys: id: 90210 schema: public table: orders severity: warning source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: row.skipped PayloadsWebhookSeverity: enum: - info - warning - error type: string RouterConnectorCreateDatabaseRequest: properties: connector: $ref: '#/components/schemas/PayloadsConnectorPayload' name: type: string required: - connector - name type: object RouterConnectorCreateSchemaRequest: properties: connector: $ref: '#/components/schemas/PayloadsConnectorPayload' databaseName: type: string name: type: string volume: type: string required: - connector - databaseName - name type: object RouterConnectorCreateSnowflakeWarehouseRequest: properties: connector: $ref: '#/components/schemas/PayloadsConnectorPayload' name: type: string required: - connector - name type: object RouterConnectorDropReplicationSlotRequest: properties: slotName: type: string required: - slotName type: object RouterConnectorFetchPostgresPublicationsRequest: properties: connector: $ref: '#/components/schemas/PayloadsConnectorPayload' databaseName: type: string required: - connector - databaseName type: object RouterConnectorFetchSchemasRequest: properties: connector: $ref: '#/components/schemas/PayloadsConnectorPayload' databaseName: type: string required: - connector - databaseName type: object RouterConnectorFetchTablesRequest: properties: connector: $ref: '#/components/schemas/PayloadsConnectorPayload' databaseName: type: string forceRefresh: type: boolean schemaName: type: string required: - connector - databaseName type: object RouterConnectorGenerateShadowScriptRequest: properties: database: type: string tables: items: $ref: '#/components/schemas/RouterConnectorShadowScriptTable' type: array required: - database - tables type: object RouterConnectorGenerateShadowScriptResponse: properties: script: type: string required: - script type: object RouterConnectorPingRequest: properties: connectionRole: type: string dataPlaneName: type: string defaultDatabase: type: - "null" - string environmentUUID: format: uuid type: - "null" - string label: type: string privateLinkUUID: format: uuid type: - "null" - string sharedConfig: additionalProperties: {} type: - object - "null" snapshotPrivateLinkUUID: format: uuid type: - "null" - string sshTunnelUUID: format: uuid type: - "null" - string type: type: string uuid: type: string type: object RouterConnectorShadowScriptTable: properties: columns: items: $ref: '#/components/schemas/PayloadsSeenTableColumn' type: array name: type: string schema: type: string required: - schema - name - columns type: object RouterConnectorStartDynamoDBExportRequest: properties: s3Bucket: type: string s3Prefix: type: - "null" - string required: - s3Bucket type: object RouterConnectorStartDynamoDBExportResponse: properties: exportARN: type: string required: - exportARN type: object RouterConnectorTable: properties: approxDateAdded: format: date-time type: - "null" - string columns: items: $ref: '#/components/schemas/PayloadsConnectorColumn' type: array createdAt: format: date-time type: - "null" - string isView: type: boolean metadata: items: $ref: '#/components/schemas/PayloadsCatalogTableProperty' type: array modifiedAt: format: date-time type: - "null" - string name: type: string schema: type: string unreadable: type: boolean type: object RouterCreateColumnHashingSaltRequest: properties: description: type: string name: type: string salt: type: string required: - name type: object RouterCreateColumnHashingSaltResponse: properties: columnHashingSalt: $ref: '#/components/schemas/PayloadsColumnHashingSalt' salt: type: string required: - columnHashingSalt - salt type: object RouterCreateEncryptionKeyRequest: properties: description: type: string kmsKeyUUID: format: uuid type: - "null" - string name: type: string required: - name type: object RouterCreateEncryptionKeyResponse: properties: encryptionKey: $ref: '#/components/schemas/PayloadsEncryptionKey' key: type: string required: - encryptionKey - key type: object RouterCreateIngestionAPIKeyRequest: properties: name: type: string sourceReaderUUID: format: uuid type: string required: - sourceReaderUUID type: object RouterCreateIngestionAPIKeyResponse: properties: ingestionAPIKey: $ref: '#/components/schemas/PayloadsIngestionAPIKey' secret: type: string required: - ingestionAPIKey - secret type: object RouterPipelineBackfillRequest: properties: backfillFromDatabases: description: Optional source databases to backfill for regular-table backfills. Requires beforeBackfill to be the empty-string do-nothing option. items: type: string type: - array - "null" backfillFromSchemas: description: Optional source schemas to backfill for regular-table backfills. Requires beforeBackfill to be the empty-string do-nothing option. items: type: string type: - array - "null" beforeBackfill: description: 'Destination handling before the backfill: empty string leaves existing data unchanged, truncate_table truncates the destination table, and drop_table drops it.' enum: - "" - truncate_table - drop_table type: string historyMode: description: When true, backfill the selected history tables instead of the regular tables. type: boolean tableUUIDs: description: UUIDs of the regular or history tables to backfill. items: format: uuid type: string type: array required: - tableUUIDs - beforeBackfill type: object RouterPipelineCancelBackfillRequest: properties: historyTableUUIDs: items: format: uuid type: string type: array optionalReason: type: string tableUUIDs: items: format: uuid type: string type: array required: - tableUUIDs - historyTableUUIDs type: object RouterPipelineCreateFromSourceRequest: properties: dataPlaneName: type: string database: description: Database name written onto the new source reader. Postgres, Cockroach, and Oracle need this before start; discover with connector_fetch_databases. Optional — the dashboard wizard creates without it. type: string destinationType: description: Optional destination type (e.g. snowflake). Creates a stub destination connector with empty credentials. type: string environmentUUID: description: Environment for a new stub connector. Used when sourceType is set; ignored when sourceConnectorUUID is set. format: uuid type: - "null" - string sourceConnectorUUID: description: UUID of an existing source connector. Creates a dedicated reader and draft pipeline against that source. format: uuid type: - "null" - string sourceType: description: Source type to bootstrap (e.g. postgresql). Creates a stub connector with empty credentials. Prefer sourceConnectorUUID when the source already exists. type: string type: object RouterPipelineCreateRequest: properties: pipeline: $ref: '#/components/schemas/PayloadsPipelinePayload' required: - pipeline type: object RouterPipelineStartRequest: properties: disableBackFill: type: boolean keepPaused: type: boolean type: object RouterPipelineTableStats: properties: count: format: int64 type: integer latency: type: - "null" - number tableName: type: string type: object RouterPipelineUpdateRequest: properties: pipeline: $ref: '#/components/schemas/PayloadsPipelinePayload' required: - pipeline type: object RouterPipelineUpdateStatusRequest: properties: status: $ref: '#/components/schemas/EnumsPipelineStatus' required: - status type: object RouterPipelineUpdateStatusResponse: properties: pipeline: $ref: '#/components/schemas/PayloadsFullPipeline' required: - pipeline type: object RouterPipelineUpdateWithSourceReaderRequest: properties: pipeline: $ref: '#/components/schemas/PayloadsPipelinePayload' sourceReader: $ref: '#/components/schemas/PayloadsSourceReader' required: - pipeline - sourceReader type: object RouterPipelineUpdateWithSourceReaderResponse: properties: pipeline: $ref: '#/components/schemas/PayloadsFullPipeline' sourceReader: $ref: '#/components/schemas/PayloadsSourceReader' required: - pipeline - sourceReader type: object RouterPipelineUsageResponse: properties: tableStats: items: $ref: '#/components/schemas/RouterPipelineTableStats' type: array required: - tableStats type: object RouterPipelineValidateUnsavedDestinationRequest: properties: advancedSettings: $ref: '#/components/schemas/PayloadsAdvancedPipelineSettingsPayload' destination: $ref: '#/components/schemas/PayloadsConnectorPayload' destinationUUID: format: uuid type: - "null" - string sourceReaderUUID: format: uuid type: - "null" - string sourceType: type: - "null" - string specificCfg: $ref: '#/components/schemas/PayloadsSpecificConfig' tables: items: $ref: '#/components/schemas/PayloadsTable' type: - array - "null" required: - specificCfg type: object RouterPipelineValidateUnsavedSourceRequest: properties: dataPlaneName: type: string dynamoDBBackfillConfig: $ref: '#/components/schemas/PayloadsDynamoDBSnapshotConfig' sourceConnector: $ref: '#/components/schemas/PayloadsConnectorPayload' sourceReader: $ref: '#/components/schemas/PayloadsSourceReader' sourceReaderUUID: format: uuid type: - "null" - string tables: items: $ref: '#/components/schemas/PayloadsTable' type: array validateTables: type: boolean required: - validateTables - tables type: object RouterPreviewColumnHashingSaltRequest: properties: value: type: string required: - value type: object RouterPreviewColumnHashingSaltResponse: properties: hash: type: string required: - hash type: object RouterPrivateLinkConnectionCreateRequest: properties: availabilityZoneIds: items: type: string type: array dataPlaneName: type: - "null" - string environmentUUID: format: uuid type: - "null" - string name: type: string vpcServiceName: type: string required: - vpcServiceName - availabilityZoneIds type: object RouterPrivateLinkConnectionUpdateRequest: properties: availabilityZoneIds: items: type: string type: array dataPlaneName: type: - "null" - string name: type: string vpcServiceName: type: string required: - name - vpcServiceName - availabilityZoneIds type: object RouterSSHTunnelCreateRequest: properties: environmentUUID: format: uuid type: - "null" - string host: type: string name: type: string port: type: integer username: type: string required: - host - port - username type: object RouterSourceReaderCreateRequest: properties: connectorUUID: format: uuid type: string containerName: type: string dataPlaneName: type: string database: type: string isShared: type: boolean name: type: string settings: $ref: '#/components/schemas/PayloadsSourceReaderSettingsPayload' tablesConfig: $ref: '#/components/schemas/PayloadsSourceReaderTablesConfig' required: - connectorUUID type: object RouterSourceReaderUpdateStatusRequest: properties: status: $ref: '#/components/schemas/EnumsSourceReaderStatus' required: - status type: object RouterSourceReaderValidateUnsavedRequest: properties: sourceReader: $ref: '#/components/schemas/PayloadsSourceReader' required: - sourceReader type: object RouterSourceReaderValidateUnsavedResponse: properties: error: type: string required: - error type: object RouterUpdateColumnHashingSaltRequest: properties: description: type: string name: type: string required: - name type: object RouterUpdateEncryptionKeyRequest: properties: description: type: string name: type: string required: - name type: object RouterUpdateIngestionAPIKeyRequest: properties: expiresAt: format: date-time type: - "null" - string name: type: string type: object RouterValidateErrorResponse: properties: error: type: string type: object securitySchemes: ApiKey: description: API key passed as a Bearer token in the Authorization header. scheme: bearer type: http security: - ApiKey: []