openapi: 3.1.0 info: description: External API endpoints for Artie title: Artie API version: v1.0.181 servers: - url: https://api.artie.com paths: /analytics: get: description: Queries Datadog metrics for analytics datasets such as rows synced, ingestion lag, flush time, and more. pipelineUUID is required for API keys bound to an environment. For windows of 59 minutes or longer, from and to are floored to 30 s and results are cached for up to 1 minute. operationId: analytics_query parameters: - in: query name: from required: true schema: type: string - in: query name: to required: true schema: type: string - in: query name: datasets[] required: true schema: items: type: string type: array - in: query name: pipelineUUID schema: type: string - in: query name: tables[] schema: items: type: string type: array - in: query name: backfillOptions schema: type: string - in: query name: transferMode schema: type: string - in: query name: groupBy schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterAnalyticsResponse' description: OK "400": description: Bad Request "500": description: Internal Server Error summary: Query analytics data tags: - Analytics x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: true operationId: analytics_query outputSensitivity: none readOnlyHint: true requiredScopes: - pipelines:read retrySemantics: safe title: Query analytics triggerDescription: Returns time series for named datasets (datasets[]) such as rowsSyncedByTime, ingestionLag, readerLag, rowLag and flushTime over from/to (RFC3339). Pass pipelineUUID from pipeline_list to scope to one pipeline; it is required for environment-scoped keys. Total lag is readerLag plus ingestionLag at each timestamp. Use for lag or throughput over time. For one per-table lag number and row count, use pipeline_usage. /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. With connectors:write, you can ping that connector by passing this payload into unsaved_connector_ping with 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 - in: query name: databaseName 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. Check connector_fetch_postgres_replication_slots first: only an inactive or lost slot can be dropped.' /connectors/{uuid}/postgres-replication-slots: get: description: Lists replication slots on the PostgreSQL source for the specified connector. operationId: connector_fetch_postgres_replication_slots 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/ListResponseBodyPostgresReplicationSlot' description: OK "400": description: Bad Request "404": description: Not Found "500": description: Internal Server Error summary: List PostgreSQL replication slots tags: - Connectors x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: true operationId: connector_fetch_postgres_replication_slots outputSensitivity: none readOnlyHint: true requiredScopes: - connectors:read retrySemantics: safe title: List PostgreSQL replication slots triggerDescription: Lists replication slots on a saved Postgres source (name, database, active, walStatus, retainedWALBytes, isReplica). uuid must come from connector_list with includeSourceConnectors=true, not a pipeline uuid or sourceReaderUUID; pass databaseName for the pipeline's reader database. Use for slot health and WAL retention, and to confirm a slot is inactive before connector_drop_postgres_replication_slot. /connectors/{uuid}/postgres-settings: get: description: Returns PostgreSQL server configuration settings relevant to replication for the specified connector. operationId: connector_fetch_postgres_settings parameters: - in: path name: uuid required: true schema: type: string - in: query name: databaseName schema: type: string responses: "200": content: application/json: schema: items: $ref: '#/components/schemas/PayloadsPostgresSetting' type: array description: OK "400": description: Bad Request "404": description: Not Found "500": description: Internal Server Error summary: Fetch PostgreSQL settings tags: - Connectors x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: true operationId: connector_fetch_postgres_settings outputSensitivity: none readOnlyHint: true requiredScopes: - connectors:read retrySemantics: safe title: Fetch PostgreSQL settings triggerDescription: Returns replication-relevant server settings (name, value, unit, category) for a saved Postgres source, such as wal_level, max_replication_slots, max_wal_senders, and max_slot_wal_keep_size. uuid must come from connector_list with includeSourceConnectors=true. Use to check CDC prerequisites (wal_level must be logical) before pipeline_start or after it fails. Settings are changed on the database, not through Artie. /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:write 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; a failed connection attempt returns 200 with an error message. operationId: unsaved_connector_ping requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterConnectorPingRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterConnectorPingResponse' description: OK "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:write 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:write 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": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodySchemaResponse' 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:write 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:write 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. /kafka-clusters: get: description: Retrieves the Kafka clusters owned by the authenticated company. Only available for companies with Kafka access enabled. operationId: kafka_cluster_list parameters: - in: query name: includeDeleted schema: type: boolean responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyKafkaCluster' description: OK "404": description: Not Found "500": description: Internal Server Error summary: List Kafka clusters tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_cluster_list outputSensitivity: none readOnlyHint: true requiredScopes: - kafka:read retrySemantics: safe title: List Kafka clusters triggerDescription: Use when you need to list Kafka clusters. /kafka-clusters/{uuid}: get: description: Retrieves a single Kafka cluster owned by the authenticated company, by UUID. operationId: kafka_cluster_detail parameters: - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsKafkaCluster' description: OK "404": description: Not Found "500": description: Internal Server Error summary: Get a Kafka cluster tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_cluster_detail outputSensitivity: none readOnlyHint: true requiredScopes: - kafka:read retrySemantics: safe title: Get a Kafka cluster triggerDescription: Use when you need to get a Kafka cluster. /kafka-clusters/{uuid}/admin-users: post: description: Creates an admin-profile Kafka user. Strimzi generates its password, which is returned if the user becomes active within a few seconds; otherwise the response has a warning and the user's password is available from the credentials endpoint once it is active. Admin-profile users have cluster-wide Kafka ACLs, including every replicated topic. Company admins only. operationId: kafka_admin_user_create parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterCreateKafkaAdminUserRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterKafkaUserCreateResponse' description: OK "400": description: Bad Request "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error summary: Create an admin Kafka user tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: kafka_admin_user_create outputSensitivity: restricted-credentials readOnlyHint: false requiredScopes: - kafka_admin_users:write retrySemantics: safe-after-state-check title: Create an admin Kafka user triggerDescription: Use when you need to create an admin Kafka user. /kafka-clusters/{uuid}/admin-users/{userUUID}: delete: description: Deletes the admin-profile Kafka user. Kafka then revokes its credentials and ACLs, normally within seconds. Returns 204 once the user is deleted, or 200 with a warning while deletion is pending reconciliation. operationId: kafka_admin_user_delete parameters: - in: path name: userUUID required: true schema: type: string - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterKafkaUserDeleteResponse' description: OK "204": description: No Content "400": description: Bad Request "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error summary: Delete an admin Kafka user tags: - Kafka Clusters x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_admin_user_delete outputSensitivity: none readOnlyHint: false requiredScopes: - kafka_admin_users:delete retrySemantics: safe title: Delete an admin Kafka user triggerDescription: Use when you need to delete an admin Kafka user. /kafka-clusters/{uuid}/admin-users/{userUUID}/credentials: get: description: Returns the admin-profile Kafka user's password, which lets the caller act as that user. Returns 409 while its password isn't ready yet or the user is being deleted; a pending user becomes active once its password is ready. Admin-profile users have cluster-wide Kafka ACLs, including every replicated topic. Company admins only. operationId: kafka_admin_user_credentials parameters: - in: path name: userUUID required: true schema: type: string - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterKafkaUserCredentialsResponse' description: OK "400": description: Bad Request "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error summary: Get admin Kafka user credentials tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_admin_user_credentials outputSensitivity: restricted-credentials readOnlyHint: true requiredScopes: - kafka_admin_users:read retrySemantics: safe title: Get admin Kafka user credentials triggerDescription: Use when you need to get admin Kafka user credentials. /kafka-clusters/{uuid}/consumer-groups: get: description: Retrieves the consumer groups for the cluster. Results are cached for two minutes (10 seconds on Managed Kafka clusters) unless forceRefresh is true. operationId: kafka_consumer_group_list parameters: - in: path name: uuid required: true schema: type: string - in: query name: forceRefresh schema: type: boolean responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyKafkaConsumerGroup' description: OK "404": description: Not Found "500": description: Internal Server Error summary: List consumer groups tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_consumer_group_list outputSensitivity: none readOnlyHint: true requiredScopes: - kafka:read retrySemantics: safe title: List Kafka consumer groups triggerDescription: Use when you need to list Kafka consumer groups. /kafka-clusters/{uuid}/consumer-groups/{groupID}: get: description: Retrieves a consumer group's members and per-topic offset lag. Results are cached for two minutes (10 seconds on Managed Kafka clusters) unless forceRefresh is true. operationId: kafka_consumer_group_detail parameters: - in: path name: groupID required: true schema: type: string - in: path name: uuid required: true schema: type: string - in: query name: forceRefresh schema: type: boolean responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsKafkaConsumerGroupDetail' description: OK "404": description: Not Found "500": description: Internal Server Error summary: Get Kafka consumer group detail tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_consumer_group_detail outputSensitivity: none readOnlyHint: true requiredScopes: - kafka:read retrySemantics: safe title: Get Kafka consumer group detail triggerDescription: Use when you need to get Kafka consumer group detail. /kafka-clusters/{uuid}/metrics-graph: get: description: Retrieves broker, topic, partition, and per-broker CPU user/system metrics for a Strimzi Kafka cluster. operationId: kafka_cluster_metrics_graph parameters: - in: path name: uuid required: true schema: type: string - in: query name: from required: true schema: type: string - in: query name: to required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsKafkaMetricsGraph' description: OK "400": description: Bad Request "404": description: Not Found "500": description: Internal Server Error summary: Get Kafka metrics graphs tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_cluster_metrics_graph outputSensitivity: none readOnlyHint: true requiredScopes: - kafka:read retrySemantics: safe title: Get Kafka metrics graphs triggerDescription: Use when you need to get Kafka metrics graphs. /kafka-clusters/{uuid}/rates: get: description: Retrieves a Managed Kafka cluster's messages in and bytes out per second over the last 5 minutes, each topic's messages in per second now and over the last hour, and each consumer group's lag per topic over the range with its derived read rate. Cached for 30 seconds. Returns 400 for other clusters and 409 if the cluster isn't active. operationId: kafka_cluster_rates parameters: - in: path name: uuid required: true schema: type: string - description: How far back the topic and consumer group series go, defaults to 1h in: query name: range schema: description: How far back the topic and consumer group series go, defaults to 1h enum: - 1h - 6h type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsKafkaClusterRates' description: OK "400": description: Bad Request "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error summary: Get Managed Kafka cluster rates tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_cluster_rates outputSensitivity: none readOnlyHint: true requiredScopes: - kafka:read retrySemantics: safe title: Get Managed Kafka cluster rates triggerDescription: Use when you need to get Managed Kafka cluster rates. /kafka-clusters/{uuid}/storage-graph: get: description: Retrieves persistent-volume storage utilization for a Strimzi Kafka cluster. operationId: kafka_cluster_storage_graph parameters: - in: path name: uuid required: true schema: type: string - in: query name: from required: true schema: type: string - in: query name: to required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsKafkaStorageGraph' description: OK "400": description: Bad Request "404": description: Not Found "500": description: Internal Server Error summary: Get Kafka storage graph tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_cluster_storage_graph outputSensitivity: none readOnlyHint: true requiredScopes: - kafka:read retrySemantics: safe title: Get Kafka storage graph triggerDescription: Use when you need to get Kafka storage graph. /kafka-clusters/{uuid}/summary: get: description: Retrieves cached topic and consumer group counts for the cluster unless forceRefresh is true. operationId: kafka_cluster_summary parameters: - in: path name: uuid required: true schema: type: string - in: query name: forceRefresh schema: type: boolean responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsKafkaClusterSummary' description: OK "404": description: Not Found "500": description: Internal Server Error summary: Get Kafka cluster summary tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_cluster_summary outputSensitivity: none readOnlyHint: true requiredScopes: - kafka:read retrySemantics: safe title: Get Kafka cluster summary triggerDescription: Use when you need to get Kafka cluster summary. /kafka-clusters/{uuid}/topic-sizes: get: description: Retrieves cached, customer-safe partition sizes for every topic unless forceRefresh is true. operationId: kafka_topic_sizes parameters: - in: path name: uuid required: true schema: type: string - in: query name: forceRefresh schema: type: boolean responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyKafkaTopicSize' description: OK "404": description: Not Found "500": description: Internal Server Error summary: Get Kafka topic partition sizes tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_topic_sizes outputSensitivity: none readOnlyHint: true requiredScopes: - kafka:read retrySemantics: safe title: Get Kafka topic partition sizes triggerDescription: Use when you need to get Kafka topic partition sizes. /kafka-clusters/{uuid}/topics: get: description: Retrieves the light topic list for the cluster (no per-topic detail fetch). Results are cached for two minutes unless forceRefresh is true. Includes the owning source reader name and table name when the topic belongs to an Artie pipeline. operationId: kafka_topic_list parameters: - in: path name: uuid required: true schema: type: string - in: query name: forceRefresh schema: type: boolean responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyKafkaTopic' description: OK "404": description: Not Found "500": description: Internal Server Error summary: List Kafka topics tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_topic_list outputSensitivity: none readOnlyHint: true requiredScopes: - kafka:read retrySemantics: safe title: List Kafka topics triggerDescription: Use when you need to list Kafka topics. post: description: Creates a topic. On a shared cluster the name must start with `.customer.`, the namespace customer Kafka users can produce to. On a Managed Kafka cluster any name works except the cluster's own topics (Kafka's `__` topics and Cruise Control's `strimzi.cruisecontrol.*`), and the cluster must be active (409 otherwise). operationId: kafka_topic_create parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterCreateKafkaTopicRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsKafkaTopicCreateResponse' description: OK "400": description: Bad Request "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error "502": description: Bad Gateway summary: Create a Kafka topic tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: kafka_topic_create outputSensitivity: none readOnlyHint: false requiredScopes: - kafka:write retrySemantics: safe-after-state-check title: Create a Kafka topic triggerDescription: Use when you need to create a Kafka topic. /kafka-clusters/{uuid}/topics/{topic}: delete: description: Deletes a topic and all of its messages. On a shared cluster only topics in the company's customer namespace (starting with `.customer.`) can be deleted. On a Managed Kafka cluster any topic but the cluster's own (`__` and `strimzi.cruisecontrol.*`) can, and the cluster must be active (409 otherwise). operationId: kafka_topic_delete parameters: - in: path name: topic required: true schema: type: string - in: path name: uuid required: true schema: type: string responses: "204": description: No Content "400": description: Bad Request "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error "502": description: Bad Gateway summary: Delete a Kafka topic tags: - Kafka Clusters x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_topic_delete outputSensitivity: none readOnlyHint: false requiredScopes: - kafka:delete retrySemantics: safe title: Delete a Kafka topic triggerDescription: Use when you need to delete a Kafka topic. get: description: Retrieves topic metadata and partition sizes. Includes the owning source reader name, table name, and pipeline names and UUIDs when the topic belongs to an Artie pipeline. operationId: kafka_topic_detail parameters: - in: path name: topic required: true schema: type: string - in: path name: uuid required: true schema: type: string - in: query name: forceRefresh schema: type: boolean responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsKafkaTopicDetail' description: OK "404": description: Not Found "500": description: Internal Server Error summary: Get Kafka topic detail tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_topic_detail outputSensitivity: none readOnlyHint: true requiredScopes: - kafka:read retrySemantics: safe title: Get Kafka topic detail triggerDescription: Use when you need to get Kafka topic detail. post: description: 'Changes a topic''s retention and tiered storage; send only the settings to change. Potentially destructive: Kafka deletes messages older than the new retention, and on Artie-managed topics that can drop change events before Artie pipelines read them. Kafka-internal (`__`) topics can''t change; on a Managed Kafka cluster neither can Cruise Control''s (`strimzi.cruisecontrol.*`), and the cluster must be active (409 otherwise). A change the rules refuse is a 400 that says why.' operationId: kafka_topic_settings_update parameters: - in: path name: topic required: true schema: type: string - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterUpdateKafkaTopicSettingsRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsKafkaTopic' description: OK "400": description: Bad Request "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error "502": description: Bad Gateway summary: Change Kafka topic settings tags: - Kafka Clusters x-artie-mcp: destructiveHint: true exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_topic_settings_update outputSensitivity: none readOnlyHint: false requiredScopes: - kafka:write retrySemantics: safe title: Change Kafka topic settings triggerDescription: Use when you need to change Kafka topic settings. /kafka-clusters/{uuid}/topics/{topic}/latest-message: get: description: Retrieves the newest message from partition 0, including its contents. Results are not cached. Only available when the company allows reading Kafka messages. operationId: kafka_topic_latest_message parameters: - in: path name: topic required: true schema: type: string - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PayloadsKafkaMessage' description: OK "204": description: No Content "403": description: Forbidden "404": description: Not Found "500": description: Internal Server Error summary: Get latest Kafka topic message tags: - Kafka Clusters x-artie-mcp: bodilessSuccess: true destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_topic_latest_message outputSensitivity: none readOnlyHint: true requiredScopes: - kafka:read retrySemantics: safe title: Get latest Kafka topic message triggerDescription: Use when you need to get latest Kafka topic message. /kafka-clusters/{uuid}/topics/{topic}/partitions: post: description: Increases a topic's partition count. Not allowed on Artie-managed topics (anything under `.` outside the customer namespace, or Kafka-internal `__` topics), because adding partitions breaks per-key ordering for Artie pipelines. On a Managed Kafka cluster any topic but the cluster's own (`__` and `strimzi.cruisecontrol.*`) can grow, and the cluster must be active (409 otherwise). operationId: kafka_topic_partitions_increase parameters: - in: path name: topic required: true schema: type: string - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterIncreaseKafkaTopicPartitionsRequest' required: true responses: "204": description: No Content "400": description: Bad Request "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error "502": description: Bad Gateway summary: Increase Kafka topic partitions tags: - Kafka Clusters x-artie-mcp: bodilessSuccess: true destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: kafka_topic_partitions_increase outputSensitivity: none readOnlyHint: false requiredScopes: - kafka:write retrySemantics: safe-after-state-check title: Increase Kafka topic partitions triggerDescription: Use when you need to increase Kafka topic partitions. /kafka-clusters/{uuid}/topics/{topic}/retention: post: description: 'Sets a topic''s `retention.ms`. Potentially destructive: Kafka deletes messages older than the new retention, and on Artie-managed topics that can drop change events before Artie pipelines read them. A topic with tiered storage on or paused keeps at most 14 days, and Kafka-internal (`__`) topics can''t change. On a Managed Kafka cluster Cruise Control''s (`strimzi.cruisecontrol.*`) can''t either, and the cluster must be active (409 otherwise).' operationId: kafka_topic_retention_update parameters: - in: path name: topic required: true schema: type: string - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterUpdateKafkaTopicRetentionRequest' required: true responses: "204": description: No Content "400": description: Bad Request "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error "502": description: Bad Gateway summary: Change Kafka topic retention tags: - Kafka Clusters x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_topic_retention_update outputSensitivity: none readOnlyHint: false requiredScopes: - kafka:write retrySemantics: safe title: Change Kafka topic retention triggerDescription: Use when you need to change Kafka topic retention. /kafka-clusters/{uuid}/users: get: description: Retrieves the Kafka users for the cluster. Passwords are never included. operationId: kafka_user_list parameters: - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyKafkaUser' description: OK "404": description: Not Found "500": description: Internal Server Error summary: List Kafka users tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_user_list outputSensitivity: none readOnlyHint: true requiredScopes: - kafka_users:read retrySemantics: safe title: List Kafka users triggerDescription: Use when you need to list Kafka users. post: description: Creates a Kafka user. Strimzi generates its password, which is returned if the user becomes active within a few seconds; otherwise the response has a warning and the user's password is available from the credentials endpoint once it is active. Producer/consumer users can read every topic under the company's prefix, which includes all data Artie replicates, and write to topics under the company's customer prefix. Admin-profile users are managed under /admin-users. operationId: kafka_user_create parameters: - in: path name: uuid required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RouterCreateKafkaUserRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterKafkaUserCreateResponse' description: OK "400": description: Bad Request "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error summary: Create a Kafka user tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: false inputSensitivity: none openWorldHint: false operationId: kafka_user_create outputSensitivity: restricted-credentials readOnlyHint: false requiredScopes: - kafka_users:write retrySemantics: safe-after-state-check title: Create a Kafka user triggerDescription: Use when you need to create a Kafka user. /kafka-clusters/{uuid}/users/{userUUID}: delete: description: Deletes the Kafka user. Kafka then revokes its credentials and ACLs, normally within seconds. Returns 204 once the user is deleted, or 200 with a warning while deletion is pending reconciliation. Admin-profile users are deleted under /admin-users. operationId: kafka_user_delete parameters: - in: path name: userUUID required: true schema: type: string - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterKafkaUserDeleteResponse' description: OK "204": description: No Content "400": description: Bad Request "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error summary: Delete a Kafka user tags: - Kafka Clusters x-artie-mcp: bodilessSuccess: true destructiveHint: true exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_user_delete outputSensitivity: none readOnlyHint: false requiredScopes: - kafka_users:delete retrySemantics: safe title: Delete a Kafka user triggerDescription: Use when you need to delete a Kafka user. /kafka-clusters/{uuid}/users/{userUUID}/credentials: get: description: Returns the Kafka user's password, which lets the caller act as that user, so kafka_users:read grants read access to all replicated data. Returns 409 while its password isn't ready yet or the user is being deleted; a pending user becomes active once its password is ready. Producer/consumer users can read every topic under the company's prefix, which includes all data Artie replicates, and write to topics under the company's customer prefix. Admin-profile users are managed under /admin-users. operationId: kafka_user_credentials parameters: - in: path name: userUUID required: true schema: type: string - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/RouterKafkaUserCredentialsResponse' description: OK "400": description: Bad Request "404": description: Not Found "409": description: Conflict "500": description: Internal Server Error summary: Get Kafka user credentials tags: - Kafka Clusters x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: kafka_user_credentials outputSensitivity: restricted-credentials readOnlyHint: true requiredScopes: - kafka_users:read retrySemantics: safe title: Get Kafka user credentials triggerDescription: Use when you need to get Kafka user credentials. /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. Failure messages are pipeline_error_logs, not status. 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) or error logs (pipeline_error_logs). 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}/error-logs: get: description: Returns recent error logs for the specified pipeline (message, errorDetail, table/schema, timestamps). MCP clients pass the pipeline uuid only. operationId: pipeline_error_logs parameters: - in: path name: uuid required: true schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ListResponseBodyPipelineErrorLog' description: OK "404": description: Not Found "500": description: Internal Server Error summary: List pipeline error logs tags: - Pipelines x-artie-mcp: destructiveHint: false exposure: exposed idempotentHint: true inputSensitivity: none openWorldHint: false operationId: pipeline_error_logs outputSensitivity: none readOnlyHint: true requiredScopes: - pipelines:read retrySemantics: safe title: List pipeline error logs triggerDescription: Returns recent error logs for a saved pipeline (message, errorDetail, table/schema, timestamps). Pass the pipeline uuid from pipeline_list. Use when the user asks why a pipeline failed or is unhealthy. This is not lag (pipeline_usage), per-table status (pipeline_detail), or replication slot size. /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. Pausing a pipeline pauses its source reader, unless the source reader is shared and another pipeline still reads from it; resuming a pipeline resumes its source reader. 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. Pass 'excludeBackfills=true' to exclude backfill rows from row counts. 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 - description: When true, rows processed by backfills are excluded from row counts so only CDC rows are counted. Latency is not affected. Defaults to false. in: query name: excludeBackfills schema: description: When true, rows processed by backfills are excluded from row counts so only CDC rows are counted. Latency is not affected. Defaults to false. type: boolean 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; set excludeBackfills=true to leave backfill rows out of row counts. Use when the user asks about lag, throughput, or rows processed. This is not slot health, warehouse correctness, pipeline_list status, pipeline_detail table status, or error logs (pipeline_error_logs). /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. A destination that names a saved connector by uuid also needs connectors:write. 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:write 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. A sourceConnector that names a saved connector by uuid also needs connectors:write. 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:write 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 a PrivateLink connection: pass vpcServiceName and availabilityZoneIds for an AWS data plane, or privateLinkServiceAlias for an Azure one. 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, cloud provider, region, Private Link target (vpcServiceName and availabilityZoneIds on AWS, privateLinkServiceAlias on Azure), and the Artie endpoint''s address (dnsEntry: a DNS name on AWS, a private IP on Azure).' 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 data plane and Private Link target (vpcServiceName and availabilityZoneIds on AWS, privateLinkServiceAlias on Azure; the region comes from the target) are only mutable while the connection is under review or errored and has no Artie endpoint. Once the Artie endpoint exists 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. The data plane and Private Link target (VPC service name and AZs on AWS, privateLinkServiceAlias on Azure) 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). Pausing it stops every pipeline that reads from it. Resuming any of those pipelines through the pipeline status endpoint also resumes the source reader. 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:write 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 "429": description: Too Many Requests "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/RouterSSHTunnelUpdateRequest' 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 oom.killed: post: description: Out of memory (OOM) killed requestBody: content: application/json: schema: $ref: '#/components/schemas/PayloadsWebhookOomKilled' 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: EnumsBackfillStage: enum: - queued - snapshotting - copying - merging - done - failed - cancelled type: string EnumsCloudProvider: enum: - aws - gcp - azure type: string EnumsConnectorSlug: enum: - api - bigquery - clickhouse - cockroach - databricks - documentdb - delta - dynamodb - gcs - iceberg - kafka - keyspaces - mongodb - motherduck - mssql - mysql - oracle - planetscale - postgresql - redis - redshift - s3 - smb_share - snowflake type: string EnumsKafkaDeployStage: enum: - applying_custom_resources - issuing_tls_certificate - provisioning_broker_nodes - starting_kafka_brokers - creating_load_balancer type: string EnumsKafkaStatus: enum: - draft - active - deploying - failed - deleted type: string EnumsKafkaTopicTieredStorageState: enum: - "off" - "on" - paused type: string EnumsMSSQLArchiveLocationType: enum: - azure_blob - smb_share 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 ListResponseBodyKafkaCluster: properties: items: items: $ref: '#/components/schemas/PayloadsKafkaCluster' type: array required: - items type: object ListResponseBodyKafkaConsumerGroup: properties: items: items: $ref: '#/components/schemas/PayloadsKafkaConsumerGroup' type: array required: - items type: object ListResponseBodyKafkaTopic: properties: items: items: $ref: '#/components/schemas/PayloadsKafkaTopic' type: array required: - items type: object ListResponseBodyKafkaTopicSize: properties: items: items: $ref: '#/components/schemas/PayloadsKafkaTopicSize' type: array required: - items type: object ListResponseBodyKafkaUser: properties: items: items: $ref: '#/components/schemas/PayloadsKafkaUser' 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 ListResponseBodyPipelineErrorLog: properties: items: items: $ref: '#/components/schemas/PayloadsPipelineErrorLog' type: array required: - items type: object ListResponseBodyPostgresPublication: properties: items: items: $ref: '#/components/schemas/PayloadsPostgresPublication' type: array required: - items type: object ListResponseBodyPostgresReplicationSlot: properties: items: items: $ref: '#/components/schemas/PayloadsPostgresReplicationSlot' 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 autoEnableHistoryIncludeRegex: type: - "null" - string autoReplicateIgnoreRegex: type: - "null" - string autoReplicateIncludeRegex: type: - "null" - string autoReplicateNewTables: type: - "null" - boolean backfillMySQLFloatsAsShortestDecimal: type: - "null" - boolean bigQueryReservation: type: - "null" - string bufferRows: type: - "null" - integer castAllColumnsToString: type: - "null" - boolean databricksAutoLiquidClustering: type: - "null" - boolean databricksDisableVariantShredding: 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 jsonAsVarchar: type: - "null" - boolean maxConcurrentSnapshots: minimum: 0 type: - "null" - integer postgresPartitionMirroring: type: - "null" - boolean snowpipeStreamingMaxChannels: type: - "null" - integer splitEventsByType: type: - "null" - boolean stagingSchema: type: - "null" - string staticColumns: items: $ref: '#/components/schemas/PayloadsStaticColumn' type: - "null" - array structAsVariant: type: - "null" - boolean 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 flattenDocuments: type: - "null" - boolean flattenDocumentsMaxDepth: minimum: 0 type: - "null" - integer 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 partitionRangeSettings: $ref: '#/components/schemas/PayloadsPartitionRangeSettings' 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 PayloadsAnalyticsDimensions: properties: operation: type: string pipelineUUID: format: uuid type: - "null" - string reason: type: string slot: type: string table: type: string warehouseName: type: string warehouseSize: type: string type: object PayloadsAnalyticsScalarIntPoint: properties: value: format: int64 type: integer type: object PayloadsAnalyticsScalarSeries: properties: dimensions: $ref: '#/components/schemas/PayloadsAnalyticsDimensions' granularityInterval: type: - "null" - integer points: items: $ref: '#/components/schemas/PayloadsAnalyticsScalarIntPoint' type: - array - "null" type: object PayloadsAnalyticsTimeseries: properties: dimensions: $ref: '#/components/schemas/PayloadsAnalyticsDimensions' granularityInterval: type: - "null" - integer points: items: $ref: '#/components/schemas/PayloadsAnalyticsTimeseriesPoint' type: - array - "null" type: object PayloadsAnalyticsTimeseriesPoint: properties: time: format: int64 type: integer value: format: double type: number type: object PayloadsAnalyticsUnit: enum: - count - megabytes - ms - bytes type: string PayloadsBackfillDefaultsPayload: properties: chunkSize: maximum: 1e+08 minimum: 100000 type: integer pagination: enum: - client - server type: string parallelism: maximum: 50 minimum: 1 type: integer preset: enum: - normal - performance type: string readMode: enum: - primaryKey - range - ctid type: string type: object PayloadsBackfillStageEvent: properties: error: type: string rowsWritten: format: int64 type: integer stage: $ref: '#/components/schemas/EnumsBackfillStage' timestamp: format: date-time type: string required: - stage - timestamp 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 physicalRanges: $ref: '#/components/schemas/PayloadsPhysicalCTIDRangeSettings' type: object PayloadsCatalogTableProperty: properties: isDate: type: boolean key: type: string value: $ref: '#/components/schemas/PayloadsJSONValue' required: - key - value - isDate 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 required: - name - metadata type: object PayloadsConnectorColumnMetadata: properties: comment: type: string dataType: type: string defaultValue: type: string isPrimaryKey: type: boolean notNull: type: boolean required: - dataType - notNull type: object PayloadsConnectorFetchDatabasesResponse: properties: items: items: $ref: '#/components/schemas/PayloadsDatabaseListItem' type: array metadata: items: $ref: '#/components/schemas/PayloadsCatalogTableProperty' type: array required: - items type: object PayloadsConnectorPayload: properties: dataPlaneName: type: string defaultDatabase: type: - "null" - string draftPipelineUUID: description: 'On create only: the draft pipeline this connector is for.' format: uuid 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 required: - schema - name - isView - createdAt - modifiedAt - unreadable type: object PayloadsDataCatalogDatabase: properties: name: type: string required: - name type: object PayloadsDataCatalogMatch: properties: connectorUUID: format: uuid type: string object: $ref: '#/components/schemas/PayloadsDataCatalogMatchedObject' score: format: double type: number required: - score - connectorUUID - object 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 required: - name - databaseName type: object PayloadsDataCatalogSearchRequest: properties: query: type: string type: object PayloadsDataCatalogTable: properties: databaseName: type: string name: type: string schemaName: type: string required: - name - schemaName - databaseName type: object PayloadsDatabaseListItem: properties: name: type: string required: - name 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 draftPipelineUUID: description: The draft pipeline this connector was created for. Unset once a pipeline or source reader past draft uses it. format: uuid type: - "null" - 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' backfillStages: items: $ref: '#/components/schemas/PayloadsBackfillStageEvent' type: array 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 forceFlushUntil: format: date-time type: - "null" - string hasBackfillingTables: type: boolean hasUndeployedChanges: type: boolean historyBackfillStages: items: $ref: '#/components/schemas/PayloadsBackfillStageEvent' type: array isDeploying: type: boolean lastDeployError: type: string lastDeployFailedAt: format: date-time type: - "null" - string 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 PayloadsKafkaCluster: properties: cloud: type: string createdAt: format: date-time type: string dataKeptUntil: description: When a deleted Managed Kafka cluster's data is deleted for good. It can be restored until then. Only set while status is deleted. format: date-time type: string deployStage: $ref: '#/components/schemas/EnumsKafkaDeployStage' description: The step a Managed Kafka cluster's deploy is on. Only set while status is deploying, or failed, where it is the step the deploy stopped at. disableTLS: type: boolean externalBootstrapURL: type: string isManaged: description: Whether this is a Managed Kafka cluster that Artie runs for the company. type: boolean localRetentionBytes: description: 'Disk cap per partition: the most broker disk each partition of the cluster''s tiered topics keeps, in bytes (log.local.retention.bytes). Missing when there is no cap.' type: - "null" - integer localRetentionMS: description: 'Days on disk: how long the cluster''s tiered topics keep data on broker disks, in ms (log.local.retention.ms). Missing on clusters made before it, whose brokers use Kafka''s default.' type: - "null" - integer managed: $ref: '#/components/schemas/PayloadsKafkaClusterManaged' description: A Managed Kafka cluster's configuration. Only set when isManaged, and only by Get a Kafka cluster. name: type: string region: type: string shuttingDown: description: Whether a deleted Managed Kafka cluster is still being taken down. It can't be restored until that finishes. Only set in the clusters list. type: boolean status: $ref: '#/components/schemas/EnumsKafkaStatus' statusMessage: description: Why the last deploy of a Managed Kafka cluster failed. Only set while status is failed. type: string storageAutoscale: $ref: '#/components/schemas/PayloadsKafkaClusterStorageAutoscale' description: A Managed Kafka cluster's storage autoscaling. Only set when isManaged. tierAllTopics: description: Whether Artie turns tiered storage on for every topic of a Managed Kafka cluster that doesn't choose otherwise. type: boolean tieredStorageAvailable: description: Whether tiered storage is available on this cluster. Artie turns it on once the cluster's brokers have tiered storage. type: boolean tieredStorageSyncedAt: description: When the sync last made a Managed Kafka cluster's topics match the tiered storage choice for each. Missing until its first run. format: date-time type: string updatedAt: description: When the cluster row last changed. A deploying cluster can be retried 20 minutes after this. format: date-time type: string usesScram: type: boolean uuid: format: uuid type: string required: - uuid - name - createdAt - updatedAt - status - externalBootstrapURL - usesScram - disableTLS - cloud - region - tieredStorageAvailable - isManaged - tierAllTopics type: object PayloadsKafkaClusterChange: properties: field: description: The setting the change is to. The other fields already show its new value. enum: - allowedCIDRs - storageGiB - brokers - instanceType - tieredStorage type: string startedAt: description: When the change was saved. format: date-time type: string state: description: 'Applying until the apply''s time limit after the save has passed (15 minutes plus a broker roll per broker, plus 5 minutes), then failed: the apply failed or was lost. Saving the same value again retries it.' enum: - applying - failed type: string summary: description: What the change does, as the Activity feed says it, such as "Grew broker storage from 50 GiB to 80 GiB". type: string required: - state - field - summary - startedAt type: object PayloadsKafkaClusterManaged: properties: allowedCIDRs: description: Client IP ranges allowed to reach the cluster. Empty when any IP can connect. items: type: string type: array brokers: type: integer instanceType: type: string kafkaVersion: type: string pendingChange: $ref: '#/components/schemas/PayloadsKafkaClusterChange' description: The cluster's latest change that isn't applied yet. Missing once every change is applied, and while the cluster isn't active. storageGiB: description: Disk per broker in GiB. type: integer required: - brokers - instanceType - storageGiB - allowedCIDRs - kafkaVersion type: object PayloadsKafkaClusterRates: properties: cluster: $ref: '#/components/schemas/PayloadsKafkaClusterRatesCluster' groups: items: $ref: '#/components/schemas/PayloadsKafkaClusterRatesGroupLag' type: array topics: items: $ref: '#/components/schemas/PayloadsKafkaClusterRatesTopic' type: array required: - cluster - topics - groups type: object PayloadsKafkaClusterRatesCluster: properties: bytesInPerSecond: type: - "null" - number bytesInSeries: items: $ref: '#/components/schemas/PayloadsKafkaMetricsGraphPoint' type: array bytesOutPerSecond: type: - "null" - number bytesOutSeries: items: $ref: '#/components/schemas/PayloadsKafkaMetricsGraphPoint' type: array messagesInPerSecond: type: - "null" - number required: - messagesInPerSecond - bytesInPerSecond - bytesOutPerSecond - bytesInSeries - bytesOutSeries type: object PayloadsKafkaClusterRatesGroupLag: properties: group: type: string lag: items: $ref: '#/components/schemas/PayloadsKafkaMetricsGraphPoint' type: array readPerSecond: type: - "null" - number topic: type: string required: - group - topic - lag - readPerSecond type: object PayloadsKafkaClusterRatesTopic: properties: messagesInPerSecond: type: - "null" - number messagesInSeries: items: $ref: '#/components/schemas/PayloadsKafkaMetricsGraphPoint' type: array topic: type: string required: - topic - messagesInPerSecond - messagesInSeries type: object PayloadsKafkaClusterStorageAutoscale: properties: bumpAtPercent: description: How full, in %, a broker's disk gets before every broker's disk grows. At most 70. Defaults to 65. maximum: 70 minimum: 1 type: integer enabled: description: Whether Artie grows the brokers' disks before they fill. type: boolean maxGiB: description: The most disk per broker, in GiB, a grow goes to. Missing is no limit. minimum: 1 type: integer targetPercent: description: How full, in %, the fullest broker's disk is after a grow. Less than bumpAtPercent. Defaults to 55. maximum: 69 minimum: 1 type: integer required: - enabled - bumpAtPercent - targetPercent type: object PayloadsKafkaClusterSummary: properties: consumerGroupCount: type: integer topicCount: type: integer required: - topicCount - consumerGroupCount type: object PayloadsKafkaConsumerGroup: properties: groupID: type: string required: - groupID type: object PayloadsKafkaConsumerGroupDetail: properties: consumerCount: type: integer groupID: type: string members: items: $ref: '#/components/schemas/PayloadsKafkaConsumerGroupMember' type: array readAt: format: date-time type: string state: type: string topics: items: $ref: '#/components/schemas/PayloadsKafkaConsumerGroupTopic' type: - array - "null" required: - groupID - consumerCount - state - topics - readAt type: object PayloadsKafkaConsumerGroupMember: properties: clientHost: type: string clientID: type: string required: - clientID - clientHost type: object PayloadsKafkaConsumerGroupTopic: properties: partitions: items: $ref: '#/components/schemas/PayloadsKafkaConsumerGroupTopicPartition' type: - array - "null" topic: type: string required: - topic - partitions type: object PayloadsKafkaConsumerGroupTopicPartition: properties: committedMessageTimestamp: format: date-time type: string currentOffset: format: int64 type: integer lag: format: int64 type: integer logEndOffset: format: int64 type: integer partition: type: integer required: - partition - currentOffset - logEndOffset - lag type: object PayloadsKafkaMessage: properties: headers: additionalProperties: format: base64 type: string type: - object - "null" key: format: base64 type: - string - "null" offset: format: int64 type: integer partition: type: integer timestamp: format: date-time type: string topic: type: string value: format: base64 type: - string - "null" required: - topic - partition - offset - timestamp type: object PayloadsKafkaMetricsGraph: properties: brokerCount: items: $ref: '#/components/schemas/PayloadsKafkaMetricsGraphSeries' type: - array - "null" cpuSystem: items: $ref: '#/components/schemas/PayloadsKafkaMetricsGraphSeries' type: - array - "null" cpuUser: items: $ref: '#/components/schemas/PayloadsKafkaMetricsGraphSeries' type: - array - "null" memoryUsage: items: $ref: '#/components/schemas/PayloadsKafkaMetricsGraphSeries' type: - array - "null" partitionCount: items: $ref: '#/components/schemas/PayloadsKafkaMetricsGraphSeries' type: - array - "null" reason: type: string supported: type: boolean topicCount: items: $ref: '#/components/schemas/PayloadsKafkaMetricsGraphSeries' type: - array - "null" unit: type: string required: - supported - unit - brokerCount - topicCount - partitionCount - cpuUser - cpuSystem - memoryUsage type: object PayloadsKafkaMetricsGraphPoint: properties: timestamp: format: date-time type: string value: format: double type: number required: - timestamp - value type: object PayloadsKafkaMetricsGraphSeries: properties: label: type: string points: items: $ref: '#/components/schemas/PayloadsKafkaMetricsGraphPoint' type: - array - "null" required: - label - points type: object PayloadsKafkaStorageGraph: properties: reason: type: string series: items: $ref: '#/components/schemas/PayloadsKafkaStorageGraphSeries' type: - array - "null" supported: type: boolean threshold: type: integer unit: type: string required: - supported - unit - threshold - series type: object PayloadsKafkaStorageGraphPoint: properties: timestamp: format: date-time type: string value: format: double type: number required: - timestamp - value type: object PayloadsKafkaStorageGraphSeries: properties: label: type: string points: items: $ref: '#/components/schemas/PayloadsKafkaStorageGraphPoint' type: - array - "null" required: - label - points type: object PayloadsKafkaTopic: properties: artieManaged: description: 'Whether Artie manages this topic: a CDC topic under the company prefix outside the customer namespace, or a Kafka-internal __ topic.' type: boolean localRetentionMS: description: How long a tiered topic keeps data on broker disks (local.retention.ms). -2 means the same as retention. Left out when the brokers don't report it. type: string partitionCount: type: integer retentionMS: type: string sourceName: type: string tableName: type: string tieredStorage: $ref: '#/components/schemas/PayloadsKafkaTopicTieredStorage' topic: type: string required: - topic - retentionMS - partitionCount - artieManaged - tieredStorage type: object PayloadsKafkaTopicCreateResponse: properties: topic: type: string required: - topic type: object PayloadsKafkaTopicDetail: properties: managed: $ref: '#/components/schemas/PayloadsKafkaTopicDetailManaged' description: 'The topic''s replication and per-partition leader and offsets. Only set when the cluster isManaged: on shared clusters broker details are Artie infra.' partitionSizes: items: $ref: '#/components/schemas/PayloadsKafkaTopicPartitionSize' type: - array - "null" pipelines: items: $ref: '#/components/schemas/PayloadsKafkaTopicPipeline' type: - array - "null" topic: $ref: '#/components/schemas/PayloadsKafkaTopic' required: - topic - partitionSizes - pipelines type: object PayloadsKafkaTopicDetailManaged: properties: partitions: items: $ref: '#/components/schemas/PayloadsKafkaTopicPartition' type: array replicationFactor: description: How many copies of each partition the brokers keep. type: integer required: - replicationFactor - partitions type: object PayloadsKafkaTopicPartition: properties: inSyncCount: description: How many copies are caught up with the leader, the leader included. type: integer latestOffset: description: The offset the next message gets. Missing when the brokers didn't answer for it. type: integer leaderID: description: The broker that serves the partition. Missing while it has no leader, except that a leaderless partition whose last in-sync copy was broker 0 still shows 0. type: integer partition: type: integer required: - partition - inSyncCount type: object PayloadsKafkaTopicPartitionSize: properties: partition: format: int32 type: integer sizeBytes: format: int64 type: integer required: - partition - sizeBytes type: object PayloadsKafkaTopicPipeline: properties: name: type: string uuid: type: string required: - uuid - name type: object PayloadsKafkaTopicSize: properties: partitions: items: $ref: '#/components/schemas/PayloadsKafkaTopicPartitionSize' type: - array - "null" remoteSizeBytes: description: The topic's size in remote storage (S3). Missing when Datadog has no data for it. type: - "null" - integer topic: type: string required: - topic - partitions type: object PayloadsKafkaTopicTieredStorage: properties: canTier: description: Whether tiered storage can be on for this topic. Kafka refuses it on compacted topics, and Artie keeps it off Kafka's and Cruise Control's own topics and topics keeping more than 14 days. type: boolean state: $ref: '#/components/schemas/EnumsKafkaTopicTieredStorageState' description: off, on or paused, from the topic's remote.storage.enable and remote.log.copy.disable configs. switchOn: description: Whether the topic's tiered storage switch is on. On a Managed Kafka cluster it's the topic's own switch, else the cluster's tierAllTopics; elsewhere it's whether the topic is tiered (on or paused). type: boolean required: - state - canTier - switchOn type: object PayloadsKafkaUser: properties: accessProfile: type: string consumerGroupPrefix: type: string createdAt: format: date-time type: string status: type: string username: type: string uuid: format: uuid type: string required: - uuid - username - accessProfile - status - createdAt - consumerGroupPrefix type: object PayloadsLightConnector: properties: companyUUID: format: uuid type: string connectionLabel: type: string createdAt: format: date-time type: string dataPlaneName: type: - "null" - string draftPipelineUUID: description: The draft pipeline this connector was created for. Unset once a pipeline or source reader past draft uses it. format: uuid 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: backfillStages: items: $ref: '#/components/schemas/PayloadsBackfillStageEvent' type: array 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 historyBackfillStages: items: $ref: '#/components/schemas/PayloadsBackfillStageEvent' type: array isDeploying: type: boolean lastDeployError: type: string lastDeployFailedAt: format: date-time type: - "null" - string 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 PayloadsPartitionRangeSettings: properties: enabled: type: boolean range: $ref: '#/components/schemas/PayloadsRangeSettings' type: object PayloadsPhysicalCTIDRangeSettings: properties: enabled: type: boolean pagesPerRange: minimum: 0 type: integer type: object PayloadsPipelineAdvancedSettings: properties: appendOnly: type: boolean autoEnableHistoryForNewTables: type: boolean autoEnableHistoryIgnoreRegex: type: string autoEnableHistoryIncludeRegex: type: string autoReplicateIgnoreRegex: type: string autoReplicateIncludeRegex: type: string autoReplicateNewTables: type: boolean backfillMySQLFloatsAsShortestDecimal: type: boolean bigQueryReservation: type: string bufferRows: type: integer castAllColumnsToString: type: boolean databricksAutoLiquidClustering: type: boolean databricksDisableVariantShredding: 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 jsonAsVarchar: type: boolean maxConcurrentSnapshots: minimum: 0 type: integer nullOutInvalidValues: type: boolean postgresPartitionMirroring: type: boolean reuseStagingTable: type: boolean snowpipeStreamingMaxChannels: type: integer splitEventsByType: type: boolean stagingSchema: type: string staticColumns: items: $ref: '#/components/schemas/PayloadsStaticColumn' type: - array - "null" structAsVariant: type: boolean 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 writeRawBinaryValues: type: boolean type: object PayloadsPipelineErrorLog: properties: createdAt: format: date-time type: string database: type: string destination: type: string errorDetail: type: string eventType: type: string message: type: string mode: type: string pipelineUUID: format: uuid type: string schema: type: string service: type: string source: type: string sourceReaderUUID: format: uuid type: string table: type: string timestamp: format: date-time type: - "null" - string uuid: format: uuid type: string version: type: string required: - uuid 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 - allTables - publishViaPartitionRoot type: object PayloadsPostgresReplicationSlot: properties: active: type: boolean database: type: - "null" - string hotStandbyFeedback: type: string isReplica: type: boolean name: type: string notFound: type: boolean retainedWALBytes: minimum: 0 type: integer walStatus: type: string required: - name - database - notFound - active - walStatus - retainedWALBytes - isReplica - hotStandbyFeedback type: object PayloadsPostgresSetting: properties: category: type: string description: type: string name: type: string unit: type: string value: type: string required: - name - value - unit - category - description 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 privateLinkServiceAlias: type: string provider: $ref: '#/components/schemas/EnumsCloudProvider' 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 - provider - vpcServiceName - privateLinkServiceAlias - 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 PayloadsS3CSVParser: properties: commentPrefix: type: string delimiter: type: string headers: items: type: string type: array nullValues: items: type: string type: array trimWhitespace: type: boolean type: object PayloadsS3Match: properties: fileNameRegex: type: string type: object PayloadsS3MetadataColumns: properties: columns: items: enum: - artieSourcePath - artieSourceFileName - artieSourceLastModified - artieSourceETag - artieSourceRecordNumber - artieSourceIngestedAt type: string type: array type: object PayloadsS3Parser: properties: columnOrder: items: type: string type: array csv: $ref: '#/components/schemas/PayloadsS3CSVParser' type: enum: - csv - json - parquet - ach type: string required: - type type: object PayloadsS3PathMapping: properties: id: type: string match: $ref: '#/components/schemas/PayloadsS3Match' metadata: $ref: '#/components/schemas/PayloadsS3MetadataColumns' parser: $ref: '#/components/schemas/PayloadsS3Parser' prefix: type: string primaryKey: items: type: string type: array referenceID: type: string required: - id - referenceID - prefix - match - parser - metadata 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 required: - name - unreadable 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 archiveConnectorUUID: format: uuid type: - "null" - 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: archiveLocationType: $ref: '#/components/schemas/EnumsMSSQLArchiveLocationType' archiveLogPassword: type: - "null" - string archiveLogPath: type: - "null" - string archiveLogPrivateLinkUUID: deprecated: true format: uuid type: - "null" - string archiveLogUsername: deprecated: true type: - "null" - string backfillBatchSize: minimum: 0 type: - "null" - integer backfillDefaults: $ref: '#/components/schemas/PayloadsBackfillDefaultsPayload' collectionScopedMode: type: - "null" - boolean compositeTypesAsText: type: - "null" - boolean databasesToSync: items: type: string type: - "null" - array deploymentScopedMode: type: - "null" - boolean 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 s3PathMappings: items: $ref: '#/components/schemas/PayloadsS3PathMapping' type: - "null" - array unifyAcrossDatabases: type: - "null" - boolean unifyAcrossDatabasesRegex: type: - "null" - string 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' backfillStages: items: $ref: '#/components/schemas/PayloadsBackfillStageEvent' type: array createdAt: format: date-time type: string destinationTableName: type: string disableReplication: deprecated: true type: boolean enableHistoryMode: type: boolean historyBackfillStages: items: $ref: '#/components/schemas/PayloadsBackfillStageEvent' type: array 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 flattenDocuments: type: boolean flattenDocumentsMaxDepth: minimum: 0 type: integer 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 keepOldSwapTable: type: boolean mergePredicates: items: $ref: '#/components/schemas/PayloadsMergePredicates' type: array msmFlushCount: minimum: 0 type: integer partitionRangeSettings: $ref: '#/components/schemas/PayloadsPartitionRangeSettings' previousSwapTableSuffix: type: string 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 swapTableSuffix: type: string unifyAcrossDatabases: type: boolean unifyAcrossSchemas: type: boolean type: object PayloadsTablePayload: properties: advancedSettings: $ref: '#/components/schemas/PayloadsAdvancedTableSettingsPayload' disableReplication: deprecated: true type: - "null" - 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 PayloadsWebhookOomKilled: allOf: - $ref: '#/components/schemas/PayloadsWebhookEnvelope' - properties: event: enum: - oom.killed type: string properties: properties: schema: description: Schema containing the table whose snapshot pod ran out of memory (scrubbed). type: string table: description: Table whose snapshot pod ran out of memory (scrubbed). type: string required: - table type: object required: - event - properties type: object description: Out of memory (OOM) killed examples: - delivery_metadata: attempt: 1 destination: snowflake environment_name: Production environment_uuid: 33333333-3333-3333-3333-333333333333 event: oom.killed message: Out of memory (OOM) killed pipelines: - name: Production Postgres → Snowflake uuid: 22222222-2222-2222-2222-222222222222 properties: schema: public table: orders severity: error source: postgresql source_reader_uuid: 11111111-1111-1111-1111-111111111111 timestamp: "2026-06-20T12:00:00Z" title: oom.killed 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' oom.killed: '#/components/schemas/PayloadsWebhookOomKilled' 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/PayloadsWebhookOomKilled' - $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 RouterAnalyticsDatasetData: anyOf: - items: $ref: '#/components/schemas/PayloadsAnalyticsScalarSeries' type: array - items: $ref: '#/components/schemas/PayloadsAnalyticsTimeseries' type: array - type: "null" RouterAnalyticsResponse: properties: datasets: additionalProperties: $ref: '#/components/schemas/RouterQueryResult' type: object required: - datasets type: object RouterConnectorConnectionRole: enum: - source - destination 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: allDatabases: type: boolean 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: $ref: '#/components/schemas/RouterConnectorConnectionRole' dataPlaneName: type: string defaultDatabase: type: - "null" - string draftPipelineUUID: description: 'On create only: the draft pipeline this connector is for.' format: uuid 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 RouterConnectorPingResponse: properties: error: type: string required: - error 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 s3BucketOwner: description: AWS account ID that owns the S3 bucket. Required when the bucket is in a different account than the table. type: - "null" - 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 required: - schema - name - isView - createdAt - modifiedAt - unreadable - approxDateAdded 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 RouterCreateKafkaAdminUserRequest: properties: username: type: string required: - username type: object RouterCreateKafkaTopicRequest: properties: configEntries: additionalProperties: type: string type: - object - "null" partitionCount: type: integer replicationFactor: type: integer topic: type: string required: - topic - partitionCount - replicationFactor type: object RouterCreateKafkaUserRequest: properties: accessProfile: description: Must be producer_consumer; create admin-profile users with POST /kafka-clusters/{uuid}/admin-users. type: string username: type: string required: - username - accessProfile type: object RouterIncreaseKafkaTopicPartitionsRequest: properties: currentPartitionCount: type: integer newPartitionCount: type: integer required: - currentPartitionCount - newPartitionCount type: object RouterKafkaUserCreateResponse: properties: kafkaUser: $ref: '#/components/schemas/PayloadsKafkaUser' password: description: The SCRAM-SHA-512 password Strimzi generated, returned when the user is already active. Otherwise get it from the credentials endpoint once the user is active. type: string warning: type: string required: - kafkaUser type: object RouterKafkaUserCredentialsResponse: properties: kafkaUser: $ref: '#/components/schemas/PayloadsKafkaUser' password: type: string required: - kafkaUser - password type: object RouterKafkaUserDeleteResponse: properties: kafkaUser: $ref: '#/components/schemas/PayloadsKafkaUser' warning: type: string required: - kafkaUser type: object RouterPipelineBackfillRequest: properties: backfillBatchSize: description: Optional rows per batch. Saved as the pipeline's backfill batch size before the backfill starts, so later backfills use it too. minimum: 0 type: - "null" - integer backfillDefaults: $ref: '#/components/schemas/PayloadsBackfillDefaultsPayload' description: Optional backfill speed. Saved as the pipeline's backfill speed before the backfill starts, so later backfills use it too. 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 - swap_table type: string historyMode: description: When true, backfill the selected history tables instead of the regular tables. type: boolean keepOldTable: description: 'Only for swap_table: keep the destination table''s old rows in a separate table after the swap, until the next swap_table backfill of this table.' 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' description: running resumes the pipeline and its source reader. transfer paused stops writing to the destination while the source reader keeps reading. paused stops writing and pauses the source reader, unless the source reader is shared and another pipeline still reads from it. 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 pipelineUUID: 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 - "null" dataPlaneName: type: - "null" - string environmentUUID: format: uuid type: - "null" - string name: type: string privateLinkServiceAlias: type: string vpcServiceName: type: string type: object RouterPrivateLinkConnectionUpdateRequest: properties: availabilityZoneIds: items: type: string type: - array - "null" dataPlaneName: type: - "null" - string name: type: string privateLinkServiceAlias: type: string vpcServiceName: type: string required: - name type: object RouterQueryResult: properties: data: $ref: '#/components/schemas/RouterAnalyticsDatasetData' err: type: - "null" - string unit: $ref: '#/components/schemas/PayloadsAnalyticsUnit' required: - unit - data - err 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 RouterSSHTunnelUpdateRequest: properties: host: type: string name: type: string port: type: integer username: type: string required: - name - host - port - username type: object RouterSourceReaderCreateRequest: properties: archiveConnectorUUID: format: uuid type: - "null" - string 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' description: running or paused. Pausing a shared source reader stops reading for every pipeline on it. 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 RouterUpdateKafkaTopicRetentionRequest: properties: retentionMS: description: 'New retention.ms: at least 86400000 (one day), or -1 to keep messages forever.' type: integer required: - retentionMS type: object RouterUpdateKafkaTopicSettingsRequest: properties: localRetentionMS: description: 'How long the tiered topic keeps data on broker disks: from 86400000 (one day) up to retention. Turning tiered storage on without it uses 7 days, capped at retention; on a Managed Kafka cluster it uses the cluster''s days on disk.' type: - "null" - integer retentionMS: description: 'New retention.ms: at least 86400000 (one day); -1 (keep forever) isn''t supported. At most 1209600000 (14 days) while tiered storage is on or paused.' type: - "null" - integer tieredStorage: description: off, on or paused. A topic that's on can only be paused, and only a paused topic can be turned off, which deletes its data in remote storage. Pausing keeps that data readable until retention expires it. enum: - "off" - "on" - paused - null type: - "null" - 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: []