{ "openapi": "3.0.3", "info": { "title": "Feldera API", "description": "\nWith Feldera, users create data pipelines out of SQL programs.\nA SQL program comprises tables and views, and includes as well the definition of\ninput and output connectors for each respectively. A connector defines a data\nsource or data sink to feed input data into tables or receive output data\ncomputed by the views respectively.\n\n## Pipeline\n\nThe API is centered around the **pipeline**, which most importantly consists\nout of the SQL program, but also has accompanying metadata and configuration parameters\n(e.g., compilation profile, number of workers, etc.).\n\n* A pipeline is identified and referred to by its user-provided unique name.\n* The pipeline program is asynchronously compiled when the pipeline is first created or\n when its program is subsequently updated.\n* Pipeline deployment is only possible once the program is successfully compiled.\n* A pipeline cannot be updated while it is deployed.\n\n## Concurrency\n\nEach pipeline has a version, which is incremented each time its core fields are updated.\nThe version is monotonically increasing. There is additionally a program version which covers\nonly the program-related core fields, and is used by the compiler to discern when to recompile.", "contact": { "name": "Feldera Team", "email": "dev@feldera.com" }, "license": { "name": "MIT OR Apache-2.0" }, "version": "0.129.0" }, "paths": { "/config/authentication": { "get": { "tags": [ "Configuration" ], "summary": "Retrieve authentication provider configuration.", "operationId": "get_config_authentication", "responses": { "200": { "description": "The response body contains Authentication Provider configuration, or is empty if no auth is configured.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AuthProvider" } } } }, "500": { "description": "Request failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/v0/api_keys": { "get": { "tags": [ "API keys" ], "summary": "Retrieve the list of API keys.", "operationId": "list_api_keys", "responses": { "200": { "description": "API keys retrieved successfully", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ApiKeyDescr" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] }, "post": { "tags": [ "API keys" ], "summary": "Create a new API key.", "operationId": "post_api_key", "requestBody": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NewApiKeyRequest" } } }, "required": true }, "responses": { "201": { "description": "API key created successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/NewApiKeyResponse" } } } }, "409": { "description": "API key with that name already exists", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "An entity with this name already exists", "error_code": "DuplicateName", "details": null } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/api_keys/{api_key_name}": { "get": { "tags": [ "API keys" ], "summary": "Retrieve an API key.", "operationId": "get_api_key", "parameters": [ { "name": "api_key_name", "in": "path", "description": "Unique API key name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "API key retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiKeyDescr" } } } }, "404": { "description": "API key with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown API key 'non-existent-api-key'", "error_code": "UnknownApiKey", "details": { "name": "non-existent-api-key" } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] }, "delete": { "tags": [ "API keys" ], "summary": "Delete an API key.", "operationId": "delete_api_key", "parameters": [ { "name": "api_key_name", "in": "path", "description": "Unique API key name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "API key deleted successfully" }, "404": { "description": "API key with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown API key 'non-existent-api-key'", "error_code": "UnknownApiKey", "details": { "name": "non-existent-api-key" } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/cluster_healthz": { "get": { "tags": [ "endpoints::cluster_healthz" ], "operationId": "get_health", "responses": { "200": { "description": "All services healthy", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HealthStatus" } } } }, "503": { "description": "One or more services unhealthy", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HealthStatus" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/config": { "get": { "tags": [ "Configuration" ], "summary": "Retrieve general configuration.", "operationId": "get_config", "responses": { "200": { "description": "The response body contains basic configuration information about this host.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Configuration" } } } }, "500": { "description": "Request failed.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/config/demos": { "get": { "tags": [ "Configuration" ], "summary": "Retrieve the list of demos.", "operationId": "get_config_demos", "responses": { "200": { "description": "List of demos", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Demo" } } } } }, "500": { "description": "Failed to read demos from the demos directories", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/metrics": { "get": { "tags": [ "Metrics" ], "summary": "Retrieve the metrics of all running pipelines belonging to this tenant.", "description": "The metrics are collected by making individual HTTP requests to `/metrics`\nendpoint of each pipeline, of which only successful responses are included\nin the returned list.", "operationId": "get_metrics", "responses": { "200": { "description": "Metrics of all running pipelines belonging to this tenant in Prometheus format", "content": { "text/plain": { "schema": { "type": "string", "format": "binary" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines": { "get": { "tags": [ "Pipeline management" ], "summary": "Retrieve the list of pipelines.", "description": "Configure which fields are included using the `selector` query parameter.", "operationId": "list_pipelines", "parameters": [ { "name": "selector", "in": "query", "description": "The `selector` parameter limits which fields are returned for a pipeline.\nLimiting which fields is particularly handy for instance when frequently\nmonitoring over low bandwidth connections while being only interested\nin pipeline status.", "required": false, "schema": { "$ref": "#/components/schemas/PipelineFieldSelector" } } ], "responses": { "200": { "description": "List of pipelines retrieved successfully", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PipelineSelectedInfo" } }, "example": [ { "id": "67e55044-10b1-426f-9247-bb680e5fe0c8", "name": "example1", "description": "Description of the pipeline example1", "created_at": "1970-01-01T00:00:00Z", "version": 4, "platform_version": "v0", "runtime_config": { "workers": 16, "storage": { "backend": { "name": "default" }, "min_storage_bytes": null, "min_step_storage_bytes": null, "compression": "default", "cache_mib": null }, "fault_tolerance": { "model": "none", "checkpoint_interval_secs": 60 }, "cpu_profiler": true, "tracing": false, "tracing_endpoint_jaeger": "", "min_batch_size_records": 0, "max_buffering_delay_usecs": 0, "resources": { "cpu_cores_min": null, "cpu_cores_max": null, "memory_mb_min": null, "memory_mb_max": null, "storage_mb_max": null, "storage_class": null }, "clock_resolution_usecs": 1000000, "pin_cpus": [], "provisioning_timeout_secs": null, "max_parallel_connector_init": null, "init_containers": null, "checkpoint_during_suspend": true, "http_workers": null, "io_workers": null, "dev_tweaks": {}, "logging": null }, "program_code": "CREATE TABLE table1 ( col1 INT );", "udf_rust": "", "udf_toml": "", "program_config": { "profile": "optimized", "cache": true, "runtime_version": null }, "program_version": 2, "program_status": "Pending", "program_status_since": "1970-01-01T00:00:00Z", "program_error": { "sql_compilation": null, "rust_compilation": null, "system_error": null }, "program_info": null, "deployment_status": "Stopped", "deployment_status_since": "1970-01-01T00:00:00Z", "deployment_desired_status": "Stopped", "deployment_error": null, "refresh_version": 4, "storage_status": "Cleared" }, { "id": "67e55044-10b1-426f-9247-bb680e5fe0c9", "name": "example2", "description": "Description of the pipeline example2", "created_at": "1970-01-01T00:00:00Z", "version": 1, "platform_version": "v0", "runtime_config": { "workers": 10, "storage": { "backend": { "name": "default" }, "min_storage_bytes": null, "min_step_storage_bytes": null, "compression": "default", "cache_mib": null }, "fault_tolerance": { "model": "none", "checkpoint_interval_secs": 60 }, "cpu_profiler": false, "tracing": false, "tracing_endpoint_jaeger": "", "min_batch_size_records": 100000, "max_buffering_delay_usecs": 0, "resources": { "cpu_cores_min": null, "cpu_cores_max": null, "memory_mb_min": 1000, "memory_mb_max": null, "storage_mb_max": 10000, "storage_class": null }, "clock_resolution_usecs": 100000, "pin_cpus": [], "provisioning_timeout_secs": 1200, "max_parallel_connector_init": 10, "init_containers": null, "checkpoint_during_suspend": false, "http_workers": null, "io_workers": null, "dev_tweaks": {}, "logging": null }, "program_code": "CREATE TABLE table2 ( col2 VARCHAR );", "udf_rust": "", "udf_toml": "", "program_config": { "profile": "unoptimized", "cache": true, "runtime_version": null }, "program_version": 1, "program_status": "Pending", "program_status_since": "1970-01-01T00:00:00Z", "program_error": { "sql_compilation": null, "rust_compilation": null, "system_error": null }, "program_info": null, "deployment_status": "Stopped", "deployment_status_since": "1970-01-01T00:00:00Z", "deployment_desired_status": "Stopped", "deployment_error": null, "refresh_version": 1, "storage_status": "Cleared" } ] } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] }, "post": { "tags": [ "Pipeline management" ], "summary": "Create a new pipeline.", "operationId": "post_pipeline", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PostPutPipeline" }, "example": { "name": "example1", "description": "Description of the pipeline example1", "runtime_config": { "workers": 16, "storage": { "backend": { "name": "default" }, "min_storage_bytes": null, "min_step_storage_bytes": null, "compression": "default", "cache_mib": null }, "fault_tolerance": { "model": "none", "checkpoint_interval_secs": 60 }, "cpu_profiler": true, "tracing": false, "tracing_endpoint_jaeger": "", "min_batch_size_records": 0, "max_buffering_delay_usecs": 0, "resources": { "cpu_cores_min": null, "cpu_cores_max": null, "memory_mb_min": null, "memory_mb_max": null, "storage_mb_max": null, "storage_class": null }, "clock_resolution_usecs": 1000000, "pin_cpus": [], "provisioning_timeout_secs": null, "max_parallel_connector_init": null, "init_containers": null, "checkpoint_during_suspend": true, "http_workers": null, "io_workers": null, "dev_tweaks": {}, "logging": null }, "program_code": "CREATE TABLE table1 ( col1 INT );", "udf_rust": null, "udf_toml": null, "program_config": { "profile": "optimized", "cache": true, "runtime_version": null } } } }, "required": true }, "responses": { "201": { "description": "Pipeline successfully created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PipelineInfo" }, "example": { "id": "67e55044-10b1-426f-9247-bb680e5fe0c8", "name": "example1", "description": "Description of the pipeline example1", "created_at": "1970-01-01T00:00:00Z", "version": 4, "platform_version": "v0", "runtime_config": { "workers": 16, "storage": { "backend": { "name": "default" }, "min_storage_bytes": null, "min_step_storage_bytes": null, "compression": "default", "cache_mib": null }, "fault_tolerance": { "model": "none", "checkpoint_interval_secs": 60 }, "cpu_profiler": true, "tracing": false, "tracing_endpoint_jaeger": "", "min_batch_size_records": 0, "max_buffering_delay_usecs": 0, "resources": { "cpu_cores_min": null, "cpu_cores_max": null, "memory_mb_min": null, "memory_mb_max": null, "storage_mb_max": null, "storage_class": null }, "clock_resolution_usecs": 1000000, "pin_cpus": [], "provisioning_timeout_secs": null, "max_parallel_connector_init": null, "init_containers": null, "checkpoint_during_suspend": true, "http_workers": null, "io_workers": null, "dev_tweaks": {}, "logging": null }, "program_code": "CREATE TABLE table1 ( col1 INT );", "udf_rust": "", "udf_toml": "", "program_config": { "profile": "optimized", "cache": true, "runtime_version": null }, "program_version": 2, "program_status": "Pending", "program_status_since": "1970-01-01T00:00:00Z", "program_error": { "sql_compilation": null, "rust_compilation": null, "system_error": null }, "program_info": null, "deployment_status": "Stopped", "deployment_status_since": "1970-01-01T00:00:00Z", "deployment_desired_status": "Stopped", "deployment_error": null, "refresh_version": 4, "storage_status": "Cleared" } } } }, "400": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Name does not match pattern": { "value": { "message": "Name 'name-with-invalid-char-#' contains characters which are not lowercase (a-z), uppercase (A-Z), numbers (0-9), underscores (_) or hyphens (-)", "error_code": "NameDoesNotMatchPattern", "details": { "name": "name-with-invalid-char-#" } } } } } } }, "409": { "description": "Cannot create pipeline as the name already exists", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "An entity with this name already exists", "error_code": "DuplicateName", "details": null } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}": { "get": { "tags": [ "Pipeline management" ], "summary": "Retrieve a pipeline.", "description": "Configure which fields are included using the `selector` query parameter.", "operationId": "get_pipeline", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } }, { "name": "selector", "in": "query", "description": "The `selector` parameter limits which fields are returned for a pipeline.\nLimiting which fields is particularly handy for instance when frequently\nmonitoring over low bandwidth connections while being only interested\nin pipeline status.", "required": false, "schema": { "$ref": "#/components/schemas/PipelineFieldSelector" } } ], "responses": { "200": { "description": "Pipeline retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PipelineSelectedInfo" }, "example": { "id": "67e55044-10b1-426f-9247-bb680e5fe0c8", "name": "example1", "description": "Description of the pipeline example1", "created_at": "1970-01-01T00:00:00Z", "version": 4, "platform_version": "v0", "runtime_config": { "workers": 16, "storage": { "backend": { "name": "default" }, "min_storage_bytes": null, "min_step_storage_bytes": null, "compression": "default", "cache_mib": null }, "fault_tolerance": { "model": "none", "checkpoint_interval_secs": 60 }, "cpu_profiler": true, "tracing": false, "tracing_endpoint_jaeger": "", "min_batch_size_records": 0, "max_buffering_delay_usecs": 0, "resources": { "cpu_cores_min": null, "cpu_cores_max": null, "memory_mb_min": null, "memory_mb_max": null, "storage_mb_max": null, "storage_class": null }, "clock_resolution_usecs": 1000000, "pin_cpus": [], "provisioning_timeout_secs": null, "max_parallel_connector_init": null, "init_containers": null, "checkpoint_during_suspend": true, "http_workers": null, "io_workers": null, "dev_tweaks": {}, "logging": null }, "program_code": "CREATE TABLE table1 ( col1 INT );", "udf_rust": "", "udf_toml": "", "program_config": { "profile": "optimized", "cache": true, "runtime_version": null }, "program_version": 2, "program_status": "Pending", "program_status_since": "1970-01-01T00:00:00Z", "program_error": { "sql_compilation": null, "rust_compilation": null, "system_error": null }, "program_info": null, "deployment_status": "Stopped", "deployment_status_since": "1970-01-01T00:00:00Z", "deployment_desired_status": "Stopped", "deployment_error": null, "refresh_version": 4, "storage_status": "Cleared" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] }, "put": { "tags": [ "Pipeline management" ], "summary": "Fully update a pipeline if it already exists, otherwise create a new pipeline.", "operationId": "put_pipeline", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PostPutPipeline" }, "example": { "name": "example1", "description": "Description of the pipeline example1", "runtime_config": { "workers": 16, "storage": { "backend": { "name": "default" }, "min_storage_bytes": null, "min_step_storage_bytes": null, "compression": "default", "cache_mib": null }, "fault_tolerance": { "model": "none", "checkpoint_interval_secs": 60 }, "cpu_profiler": true, "tracing": false, "tracing_endpoint_jaeger": "", "min_batch_size_records": 0, "max_buffering_delay_usecs": 0, "resources": { "cpu_cores_min": null, "cpu_cores_max": null, "memory_mb_min": null, "memory_mb_max": null, "storage_mb_max": null, "storage_class": null }, "clock_resolution_usecs": 1000000, "pin_cpus": [], "provisioning_timeout_secs": null, "max_parallel_connector_init": null, "init_containers": null, "checkpoint_during_suspend": true, "http_workers": null, "io_workers": null, "dev_tweaks": {}, "logging": null }, "program_code": "CREATE TABLE table1 ( col1 INT );", "udf_rust": null, "udf_toml": null, "program_config": { "profile": "optimized", "cache": true, "runtime_version": null } } } }, "required": true }, "responses": { "200": { "description": "Pipeline successfully updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PipelineInfo" }, "example": { "id": "67e55044-10b1-426f-9247-bb680e5fe0c8", "name": "example1", "description": "Description of the pipeline example1", "created_at": "1970-01-01T00:00:00Z", "version": 4, "platform_version": "v0", "runtime_config": { "workers": 16, "storage": { "backend": { "name": "default" }, "min_storage_bytes": null, "min_step_storage_bytes": null, "compression": "default", "cache_mib": null }, "fault_tolerance": { "model": "none", "checkpoint_interval_secs": 60 }, "cpu_profiler": true, "tracing": false, "tracing_endpoint_jaeger": "", "min_batch_size_records": 0, "max_buffering_delay_usecs": 0, "resources": { "cpu_cores_min": null, "cpu_cores_max": null, "memory_mb_min": null, "memory_mb_max": null, "storage_mb_max": null, "storage_class": null }, "clock_resolution_usecs": 1000000, "pin_cpus": [], "provisioning_timeout_secs": null, "max_parallel_connector_init": null, "init_containers": null, "checkpoint_during_suspend": true, "http_workers": null, "io_workers": null, "dev_tweaks": {}, "logging": null }, "program_code": "CREATE TABLE table1 ( col1 INT );", "udf_rust": "", "udf_toml": "", "program_config": { "profile": "optimized", "cache": true, "runtime_version": null }, "program_version": 2, "program_status": "Pending", "program_status_since": "1970-01-01T00:00:00Z", "program_error": { "sql_compilation": null, "rust_compilation": null, "system_error": null }, "program_info": null, "deployment_status": "Stopped", "deployment_status_since": "1970-01-01T00:00:00Z", "deployment_desired_status": "Stopped", "deployment_error": null, "refresh_version": 4, "storage_status": "Cleared" } } } }, "201": { "description": "Pipeline successfully created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PipelineInfo" }, "example": { "id": "67e55044-10b1-426f-9247-bb680e5fe0c8", "name": "example1", "description": "Description of the pipeline example1", "created_at": "1970-01-01T00:00:00Z", "version": 4, "platform_version": "v0", "runtime_config": { "workers": 16, "storage": { "backend": { "name": "default" }, "min_storage_bytes": null, "min_step_storage_bytes": null, "compression": "default", "cache_mib": null }, "fault_tolerance": { "model": "none", "checkpoint_interval_secs": 60 }, "cpu_profiler": true, "tracing": false, "tracing_endpoint_jaeger": "", "min_batch_size_records": 0, "max_buffering_delay_usecs": 0, "resources": { "cpu_cores_min": null, "cpu_cores_max": null, "memory_mb_min": null, "memory_mb_max": null, "storage_mb_max": null, "storage_class": null }, "clock_resolution_usecs": 1000000, "pin_cpus": [], "provisioning_timeout_secs": null, "max_parallel_connector_init": null, "init_containers": null, "checkpoint_during_suspend": true, "http_workers": null, "io_workers": null, "dev_tweaks": {}, "logging": null }, "program_code": "CREATE TABLE table1 ( col1 INT );", "udf_rust": "", "udf_toml": "", "program_config": { "profile": "optimized", "cache": true, "runtime_version": null }, "program_version": 2, "program_status": "Pending", "program_status_since": "1970-01-01T00:00:00Z", "program_error": { "sql_compilation": null, "rust_compilation": null, "system_error": null }, "program_info": null, "deployment_status": "Stopped", "deployment_status_since": "1970-01-01T00:00:00Z", "deployment_desired_status": "Stopped", "deployment_error": null, "refresh_version": 4, "storage_status": "Cleared" } } } }, "400": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Cannot update non-stopped pipeline": { "value": { "message": "Pipeline can only be updated while stopped. Stop it first by invoking '/stop'.", "error_code": "UpdateRestrictedToStopped", "details": null } }, "Name does not match pattern": { "value": { "message": "Name 'name-with-invalid-char-#' contains characters which are not lowercase (a-z), uppercase (A-Z), numbers (0-9), underscores (_) or hyphens (-)", "error_code": "NameDoesNotMatchPattern", "details": { "name": "name-with-invalid-char-#" } } } } } } }, "409": { "description": "Cannot rename pipeline as the new name already exists", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "An entity with this name already exists", "error_code": "DuplicateName", "details": null } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] }, "delete": { "tags": [ "Pipeline management" ], "summary": "Delete a pipeline.", "operationId": "delete_pipeline", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Pipeline successfully deleted" }, "400": { "description": "Pipeline must be fully stopped and cleared to be deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Cannot delete a pipeline which is not fully stopped. Stop the pipeline first fully by invoking the '/stop' endpoint.", "error_code": "DeleteRestrictedToFullyStopped", "details": null } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] }, "patch": { "tags": [ "Pipeline management" ], "summary": "Partially update a pipeline.", "operationId": "patch_pipeline", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PatchPipeline" }, "example": { "name": null, "description": "This is a new description", "runtime_config": null, "program_code": "CREATE TABLE table3 ( col3 INT );", "udf_rust": null, "udf_toml": null, "program_config": null } } }, "required": true }, "responses": { "200": { "description": "Pipeline successfully updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PipelineInfo" }, "example": { "id": "67e55044-10b1-426f-9247-bb680e5fe0c8", "name": "example1", "description": "Description of the pipeline example1", "created_at": "1970-01-01T00:00:00Z", "version": 4, "platform_version": "v0", "runtime_config": { "workers": 16, "storage": { "backend": { "name": "default" }, "min_storage_bytes": null, "min_step_storage_bytes": null, "compression": "default", "cache_mib": null }, "fault_tolerance": { "model": "none", "checkpoint_interval_secs": 60 }, "cpu_profiler": true, "tracing": false, "tracing_endpoint_jaeger": "", "min_batch_size_records": 0, "max_buffering_delay_usecs": 0, "resources": { "cpu_cores_min": null, "cpu_cores_max": null, "memory_mb_min": null, "memory_mb_max": null, "storage_mb_max": null, "storage_class": null }, "clock_resolution_usecs": 1000000, "pin_cpus": [], "provisioning_timeout_secs": null, "max_parallel_connector_init": null, "init_containers": null, "checkpoint_during_suspend": true, "http_workers": null, "io_workers": null, "dev_tweaks": {}, "logging": null }, "program_code": "CREATE TABLE table1 ( col1 INT );", "udf_rust": "", "udf_toml": "", "program_config": { "profile": "optimized", "cache": true, "runtime_version": null }, "program_version": 2, "program_status": "Pending", "program_status_since": "1970-01-01T00:00:00Z", "program_error": { "sql_compilation": null, "rust_compilation": null, "system_error": null }, "program_info": null, "deployment_status": "Stopped", "deployment_status_since": "1970-01-01T00:00:00Z", "deployment_desired_status": "Stopped", "deployment_error": null, "refresh_version": 4, "storage_status": "Cleared" } } } }, "400": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Cannot update non-stopped pipeline": { "value": { "message": "Pipeline can only be updated while stopped. Stop it first by invoking '/stop'.", "error_code": "UpdateRestrictedToStopped", "details": null } }, "Name does not match pattern": { "value": { "message": "Name 'name-with-invalid-char-#' contains characters which are not lowercase (a-z), uppercase (A-Z), numbers (0-9), underscores (_) or hyphens (-)", "error_code": "NameDoesNotMatchPattern", "details": { "name": "name-with-invalid-char-#" } } } } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "409": { "description": "Cannot rename pipeline as the name already exists", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "An entity with this name already exists", "error_code": "DuplicateName", "details": null } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/activate": { "post": { "tags": [ "Pipeline interaction" ], "summary": "Activates the pipeline if it is currently in standby mode.", "description": "This endpoint is only applicable when the pipeline is configured to start\nfrom object store and launched in standby mode (`sync.standby: true`).", "operationId": "activate_pipeline", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "description": "Pipeline activation initiated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CheckpointResponse" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/checkpoint": { "post": { "tags": [ "Pipeline interaction" ], "summary": "Initiates checkpoint for a running or paused pipeline.", "description": "Returns a checkpoint sequence number that can be used with `/checkpoint_status` to\ndetermine when the checkpoint has completed.", "operationId": "checkpoint_pipeline", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Checkpoint initiated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CheckpointResponse" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/checkpoint/sync": { "post": { "tags": [ "Pipeline interaction" ], "summary": "Syncs latest checkpoints to the object store configured in pipeline config.", "operationId": "sync_checkpoint", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Checkpoint synced to object store", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CheckpointResponse" } } } }, "404": { "description": "No checkpoints found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/checkpoint/sync_status": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Retrieve status of checkpoint sync activity in a pipeline.", "operationId": "get_checkpoint_sync_status", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Checkpoint sync status retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CheckpointStatus" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/checkpoint_status": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Retrieve status of checkpoint activity in a pipeline.", "operationId": "get_checkpoint_status", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Checkpoint status retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CheckpointStatus" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/circuit_profile": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Retrieve the circuit performance profile of a running or paused pipeline.", "operationId": "get_pipeline_circuit_profile", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Circuit performance profile", "content": { "application/zip": { "schema": { "type": "object" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/clear": { "post": { "tags": [ "Pipeline management" ], "summary": "Clears the pipeline storage asynchronously.", "description": "IMPORTANT: Clearing means disassociating the storage from the pipeline.\nDepending on the storage type this can include its deletion.\n\nIt sets the storage state to `Clearing`, after which the clearing process is\nperformed asynchronously. Progress should be monitored by polling the pipeline\nusing the `GET` endpoints. An `/clear` cannot be cancelled.", "operationId": "post_pipeline_clear", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "description": "Action is accepted and is being performed" }, "400": { "description": "Action could not be performed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Illegal action": { "value": { "message": "Cannot transition from storage status 'cleared' to 'clearing'", "error_code": "InvalidStorageStatusTransition", "details": { "current_status": "Cleared", "new_status": "Clearing" } } } } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/commit_transaction": { "post": { "tags": [ "Pipeline interaction" ], "summary": "Commit the current transaction.", "operationId": "commit_transaction", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Commit operation initiated." }, "409": { "description": "Another transaction is already in progress.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/completion_status": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Check the status of a completion token returned by the `/ingress` or `/completion_token`", "description": "endpoint.", "operationId": "completion_status", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } }, { "name": "token", "in": "query", "description": "Completion token returned by the '/ingress' or '/completion_status' endpoint.", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "The pipeline has finished processing inputs associated with the provided completion token.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompletionStatusResponse" } } } }, "202": { "description": "The pipeline is still processing inputs associated with the provided completion token.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompletionStatusResponse" } } } }, "400": { "description": "An invalid completion token was provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "410": { "description": "Completion token was created by a previous incarnation of the pipeline and is not valid for the current incarnation. This indicates that the pipeline was suspended and resumed from a checkpoint or restarted after a failure.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/egress/{table_name}": { "post": { "tags": [ "Pipeline interaction" ], "summary": "Subscribe to a stream of updates from a SQL view or table.", "description": "The pipeline responds with a continuous stream of changes to the specified\ntable or view, encoded using the format specified in the `?format=`\nparameter. Updates are split into `Chunk`s.\n\nThe pipeline continues sending updates until the client closes the\nconnection or the pipeline is stopped.", "operationId": "http_output", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } }, { "name": "table_name", "in": "path", "description": "SQL table name. Unquoted SQL names have to be capitalized. Quoted SQL names have to exactly match the case from the SQL program.", "required": true, "schema": { "type": "string" } }, { "name": "format", "in": "query", "description": "Output data format, e.g., 'csv' or 'json'.", "required": true, "schema": { "type": "string" } }, { "name": "array", "in": "query", "description": "Set to `true` to group updates in this stream into JSON arrays (used in conjunction with `format=json`). The default value is `false`", "required": false, "schema": { "type": "boolean", "nullable": true } }, { "name": "backpressure", "in": "query", "description": "Apply backpressure on the pipeline when the HTTP client cannot receive data fast enough.\n When this flag is set to false (the default), the HTTP connector drops data chunks if the client is not keeping up with its output. This prevents a slow HTTP client from slowing down the entire pipeline.\n When the flag is set to true, the connector waits for the client to receive each chunk and blocks the pipeline if the client cannot keep up.", "required": false, "schema": { "type": "boolean", "nullable": true } } ], "responses": { "200": { "description": "Connection to the endpoint successfully established. The body of the response contains a stream of data chunks.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Chunk" } } } }, "400": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Pipeline and/or table/view with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Pipeline with that name does not exist": { "value": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/heap_profile": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Retrieve the heap profile of a running or paused pipeline.", "operationId": "get_pipeline_heap_profile", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Heap usage profile as a gzipped protobuf that can be inspected by the pprof tool", "content": { "application/protobuf": { "schema": { "type": "string", "format": "binary" } } } }, "400": { "description": "Getting a heap profile is not supported on this platform", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/ingress/{table_name}": { "post": { "tags": [ "Pipeline interaction" ], "summary": "Push data to a SQL table.", "description": "The client sends data encoded using the format specified in the `?format=`\nparameter as a body of the request. The contents of the data must match\nthe SQL table schema specified in `table_name`\n\nThe pipeline ingests data as it arrives without waiting for the end of\nthe request. Successful HTTP response indicates that all data has been\ningested successfully.\n\nOn success, returns a completion token that can be passed to the\n'/completion_status' endpoint to check whether the pipeline has fully\nprocessed the data.", "operationId": "http_input", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } }, { "name": "table_name", "in": "path", "description": "SQL table name. Unquoted SQL names have to be capitalized. Quoted SQL names have to exactly match the case from the SQL program.", "required": true, "schema": { "type": "string" } }, { "name": "force", "in": "query", "description": "When `true`, push data to the pipeline even if the pipeline is paused. The default value is `false`", "required": true, "schema": { "type": "boolean" } }, { "name": "format", "in": "query", "description": "Input data format, e.g., 'csv' or 'json'.", "required": true, "schema": { "type": "string" } }, { "name": "array", "in": "query", "description": "Set to `true` if updates in this stream are packaged into JSON arrays (used in conjunction with `format=json`). The default values is `false`.", "required": false, "schema": { "type": "boolean", "nullable": true } }, { "name": "update_format", "in": "query", "description": "JSON data change event format (used in conjunction with `format=json`). The default value is 'insert_delete'.", "required": false, "schema": { "allOf": [ { "$ref": "#/components/schemas/JsonUpdateFormat" } ], "nullable": true } } ], "requestBody": { "description": "Input data in the specified format", "content": { "text/plain": { "schema": { "type": "string" } } }, "required": true }, "responses": { "200": { "description": "Data successfully delivered to the pipeline. The body of the response contains a completion token that can be passed to the '/completion_status' endpoint to check whether the pipeline has fully processed the data.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompletionTokenResponse" } } } }, "400": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Pipeline and/or table with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Pipeline with that name does not exist": { "value": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/logs": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Retrieve logs of a pipeline as a stream.", "description": "The logs stream catches up to the extent of the internally configured per-pipeline\ncircular logs buffer (limited to a certain byte size and number of lines, whichever\nis reached first). After the catch-up, new lines are pushed whenever they become\navailable.\n\nIt is possible for the logs stream to end prematurely due to the API server temporarily losing\nconnection to the runner. In this case, it is needed to issue again a new request to this\nendpoint.\n\nThe logs stream will end when the pipeline is deleted, or if the runner restarts. Note that in\nboth cases the logs will be cleared.", "operationId": "get_pipeline_logs", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Pipeline logs retrieved successfully", "content": { "text/plain": { "schema": { "type": "string", "format": "binary" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Runner response timeout": { "value": { "message": "Unable to reach pipeline runner to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "RunnerInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/metrics": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Retrieve circuit metrics of a running or paused pipeline.", "operationId": "get_pipeline_metrics", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } }, { "name": "format", "in": "query", "required": false, "schema": { "$ref": "#/components/schemas/MetricsFormat" } } ], "responses": { "200": { "description": "Pipeline circuit metrics retrieved successfully", "content": { "application/octet-stream": { "schema": { "type": "string", "format": "binary" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/pause": { "post": { "tags": [ "Pipeline management" ], "summary": "Pause the pipeline asynchronously by updating the desired state.", "description": "The endpoint returns immediately after setting the desired state to `Paused`.\nThe procedure to get to the desired state is performed asynchronously.\nProgress should be monitored by polling the pipeline `GET` endpoints.\n\nNote the following:\n- A stopped pipeline can be started through calling either `/start` or `/pause`\n- Both starting as paused and pausing a pipeline is done by calling `/pause`\n- A pipeline which is in the process of suspending or stopping cannot be paused", "operationId": "post_pipeline_pause", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "description": "Action is accepted and is being performed" }, "400": { "description": "Action could not be performed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Deployment status (current: 'Stopping', desired: 'Stopped') cannot have desired changed to 'Running'. Cannot restart the pipeline while it is stopping. Wait for it to stop before starting a new instance of the pipeline.", "error_code": "IllegalPipelineAction", "details": { "pipeline_status": "Stopping", "current_desired_status": "Stopped", "new_desired_status": "Running", "hint": "Cannot restart the pipeline while it is stopping. Wait for it to stop before starting a new instance of the pipeline." } } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/query": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Execute an ad-hoc SQL query in a running or paused pipeline.", "description": "The evaluation is not incremental.", "operationId": "pipeline_adhoc_sql", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } }, { "name": "sql", "in": "query", "description": "SQL query to execute", "required": true, "schema": { "type": "string" } }, { "name": "format", "in": "query", "description": "Input data format, e.g., 'text', 'json' or 'parquet'", "required": true, "schema": { "$ref": "#/components/schemas/AdHocResultFormat" } } ], "responses": { "200": { "description": "Ad-hoc SQL query result", "content": { "text/plain": { "schema": { "type": "string", "format": "binary" } } } }, "400": { "description": "Invalid SQL query", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/start": { "post": { "tags": [ "Pipeline management" ], "summary": "Start the pipeline asynchronously by updating the desired state.", "description": "The endpoint returns immediately after setting the desired state to `Running`.\nThe procedure to get to the desired state is performed asynchronously.\nProgress should be monitored by polling the pipeline `GET` endpoints.\n\nNote the following:\n- A stopped pipeline can be started through calling either `/start` or `/pause`\n- Both starting as running and resuming a pipeline is done by calling `/start`\n- A pipeline which is in the process of suspending or stopping cannot be started", "operationId": "post_pipeline_start", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "202": { "description": "Action is accepted and is being performed" }, "400": { "description": "Action could not be performed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Deployment status (current: 'Stopping', desired: 'Stopped') cannot have desired changed to 'Running'. Cannot restart the pipeline while it is stopping. Wait for it to stop before starting a new instance of the pipeline.", "error_code": "IllegalPipelineAction", "details": { "pipeline_status": "Stopping", "current_desired_status": "Stopped", "new_desired_status": "Running", "hint": "Cannot restart the pipeline while it is stopping. Wait for it to stop before starting a new instance of the pipeline." } } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/start_transaction": { "post": { "tags": [ "Pipeline interaction" ], "summary": "Start a transaction.", "operationId": "start_transaction", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Transaction successfully started.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StartTransactionResponse" } } } }, "409": { "description": "Another transaction is already in progress.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/stats": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Retrieve statistics (e.g., performance counters) of a running or paused pipeline.", "operationId": "get_pipeline_stats", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Pipeline statistics retrieved successfully", "content": { "application/json": { "schema": { "type": "object" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/stop": { "post": { "tags": [ "Pipeline management" ], "summary": "Stop the pipeline asynchronously by updating the desired state.", "description": "There are two variants:\n- `/stop?force=false` (default): the pipeline will first atomically checkpoint before\ndeprovisioning the compute resources. When resuming, the pipeline will start from this\n- `/stop?force=true`: the compute resources will be immediately deprovisioned. When resuming,\nit will pick up the latest checkpoint made by the periodic checkpointer or by a prior\n`/checkpoint` call.\n\nThe endpoint returns immediately after setting the desired state to `Suspended` for\n`?force=false` or `Stopped` for `?force=true`. In the former case, once the pipeline has\nsuccessfully passes the `Suspending` state, the desired state will become `Stopped` as well.\nThe procedure to get to the desired state is performed asynchronously. Progress should be\nmonitored by polling the pipeline `GET` endpoints.\n\nNote the following:\n- The suspending that is done with `/stop?force=false` is not guaranteed to succeed:\n- If an error is returned during the suspension, the pipeline will be forcefully stopped with\nthat error set\n- Otherwise, it will keep trying to suspend, in which case it is possible to cancel suspending\nby calling `/stop?force=true`\n- `/stop?force=true` cannot be cancelled: the pipeline must first reach `Stopped` before another\naction can be done\n- A pipeline which is in the process of suspending or stopping can only be forcefully stopped", "operationId": "post_pipeline_stop", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } }, { "name": "force", "in": "query", "description": "The `force` parameter determines whether to immediately deprovision the pipeline compute\nresources (`force=true`) or first attempt to atomically checkpoint before doing so\n(`force=false`, which is the default).", "required": false, "schema": { "type": "boolean" } } ], "responses": { "202": { "description": "Action is accepted and is being performed" }, "400": { "description": "Action could not be performed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Deployment status (current: 'Stopping', desired: 'Stopped') cannot have desired changed to 'Running'. Cannot restart the pipeline while it is stopping. Wait for it to stop before starting a new instance of the pipeline.", "error_code": "IllegalPipelineAction", "details": { "pipeline_status": "Stopping", "current_desired_status": "Stopped", "new_desired_status": "Running", "hint": "Cannot restart the pipeline while it is stopping. Wait for it to stop before starting a new instance of the pipeline." } } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "405": { "description": "Action is not supported", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Unsupported action": { "value": { "message": "Unsupported pipeline action 'suspend': this pipeline does not support the suspend action for the following reason(s):\n - Storage must be configured", "error_code": "UnsupportedPipelineAction", "details": { "action": "suspend", "reason": "this pipeline does not support the suspend action for the following reason(s):\n - Storage must be configured" } } } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "501": { "description": "Action is not implemented because it is only available in the Enterprise edition", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "Action can not be performed (maybe because the pipeline is already suspended)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/support_bundle": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Generate a support bundle for a pipeline.", "description": "This endpoint collects various diagnostic data from the pipeline including\ncircuit profile, heap profile, metrics, logs, stats, and connector statistics,\nand packages them into a single ZIP file for support purposes.", "operationId": "get_pipeline_support_bundle", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } }, { "name": "circuit_profile", "in": "query", "description": "Whether to collect circuit profile data (default: true)", "required": false, "schema": { "type": "boolean" } }, { "name": "heap_profile", "in": "query", "description": "Whether to collect heap profile data (default: true)", "required": false, "schema": { "type": "boolean" } }, { "name": "metrics", "in": "query", "description": "Whether to collect metrics data (default: true)", "required": false, "schema": { "type": "boolean" } }, { "name": "logs", "in": "query", "description": "Whether to collect logs data (default: true)", "required": false, "schema": { "type": "boolean" } }, { "name": "stats", "in": "query", "description": "Whether to collect stats data (default: true)", "required": false, "schema": { "type": "boolean" } }, { "name": "pipeline_config", "in": "query", "description": "Whether to collect pipeline configuration data (default: true)", "required": false, "schema": { "type": "boolean" } }, { "name": "system_config", "in": "query", "description": "Whether to collect system configuration data (default: true)", "required": false, "schema": { "type": "boolean" } } ], "responses": { "200": { "description": "Support bundle containing diagnostic information", "content": { "application/zip": { "schema": { "type": "string", "format": "binary" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/tables/{table_name}/connectors/{connector_name}/completion_token": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Generate a completion token for an input connector.", "description": "Returns a token that can be passed to the `/completion_status` endpoint\nto check whether the pipeline has finished processing all inputs received from the\nconnector before the token was generated.", "operationId": "completion_token", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } }, { "name": "table_name", "in": "path", "description": "SQL table name. Unquoted SQL names have to be capitalized. Quoted SQL names have to exactly match the case from the SQL program.", "required": true, "schema": { "type": "string" } }, { "name": "connector_name", "in": "path", "description": "Unique input connector name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Completion token that can be passed to the '/completion_status' endpoint.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompletionTokenResponse" } } } }, "404": { "description": "Specified pipeline, table, or connector does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/tables/{table_name}/connectors/{connector_name}/stats": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Retrieve the status of an input connector.", "operationId": "get_pipeline_input_connector_status", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } }, { "name": "table_name", "in": "path", "description": "Unique table name", "required": true, "schema": { "type": "string" } }, { "name": "connector_name", "in": "path", "description": "Unique input connector name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Input connector status retrieved successfully", "content": { "application/json": { "schema": { "type": "object" } } } }, "404": { "description": "Pipeline, table and/or input connector with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Pipeline with that name does not exist": { "value": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/tables/{table_name}/connectors/{connector_name}/{action}": { "post": { "tags": [ "Pipeline interaction" ], "summary": "Start (resume) or pause the input connector.", "description": "The following values of the `action` argument are accepted: `start` and `pause`.\n\nInput connectors can be in either the `Running` or `Paused` state. By default,\nconnectors are initialized in the `Running` state when a pipeline is deployed.\nIn this state, the connector actively fetches data from its configured data\nsource and forwards it to the pipeline. If needed, a connector can be created\nin the `Paused` state by setting its\n[`paused`](https://docs.feldera.com/connectors/#generic-attributes) property\nto `true`. When paused, the connector remains idle until reactivated using the\n`start` command. Conversely, a connector in the `Running` state can be paused\nat any time by issuing the `pause` command.\n\nThe current connector state can be retrieved via the\n`GET /v0/pipelines/{pipeline_name}/stats` endpoint.\n\nNote that only if both the pipeline *and* the connector state is `Running`,\nis the input connector active.\n```text\nPipeline state Connector state Connector is active?\n-------------- --------------- --------------------\nPaused Paused No\nPaused Running No\nRunning Paused No\nRunning Running Yes\n```", "operationId": "post_pipeline_input_connector_action", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } }, { "name": "table_name", "in": "path", "description": "Unique table name", "required": true, "schema": { "type": "string" } }, { "name": "connector_name", "in": "path", "description": "Unique input connector name", "required": true, "schema": { "type": "string" } }, { "name": "action", "in": "path", "description": "Input connector action (one of: start, pause)", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Action has been processed" }, "404": { "description": "Pipeline, table and/or input connector with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Pipeline with that name does not exist": { "value": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/time_series": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Retrieve time series for statistics of a running or paused pipeline.", "operationId": "get_pipeline_time_series", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Pipeline time series retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TimeSeries" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/time_series_stream": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Stream time series for statistics of a running or paused pipeline.", "description": "Returns a snapshot of all existing time series data followed by a continuous stream of\nnew time series data points as they become available. The response is in newline-delimited\nJSON format (NDJSON) where each line is a JSON object representing a single time series\ndata point.", "operationId": "get_pipeline_time_series_stream", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Pipeline time series stream established successfully", "content": { "application/x-ndjson": { "schema": { "type": "string" } } } }, "404": { "description": "Pipeline with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "example": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } }, "/v0/pipelines/{pipeline_name}/views/{view_name}/connectors/{connector_name}/stats": { "get": { "tags": [ "Pipeline interaction" ], "summary": "Retrieve the status of an output connector.", "operationId": "get_pipeline_output_connector_status", "parameters": [ { "name": "pipeline_name", "in": "path", "description": "Unique pipeline name", "required": true, "schema": { "type": "string" } }, { "name": "view_name", "in": "path", "description": "Unique SQL view name", "required": true, "schema": { "type": "string" } }, { "name": "connector_name", "in": "path", "description": "Unique output connector name", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Output connector status retrieved successfully", "content": { "application/json": { "schema": { "type": "object" } } } }, "404": { "description": "Pipeline, view and/or output connector with that name does not exist", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Pipeline with that name does not exist": { "value": { "message": "Unknown pipeline name 'non-existent-pipeline'", "error_code": "UnknownPipelineName", "details": { "pipeline_name": "non-existent-pipeline" } } } } } } }, "500": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" }, "examples": { "Disconnected during response": { "value": { "message": "Unable to reach pipeline to interact due to: the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs.", "error_code": "PipelineInteractionUnreachable", "details": { "error": "the pipeline disconnected while it was processing this HTTP request. This could be because the pipeline either (a) encountered a fatal error or panic, (b) was stopped, or (c) experienced network issues -- retrying might help in the last case. Alternatively, check the pipeline logs." } } }, "Pipeline is currently unavailable": { "value": { "message": "Unable to reach pipeline to interact due to: deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again", "error_code": "PipelineInteractionUnreachable", "details": { "error": "deployment status is currently 'unavailable' -- wait for it to become 'running' or 'paused' again" } } }, "Pipeline is not deployed": { "value": { "message": "Unable to interact with pipeline because the deployment status ('stopped') is not one of the deployed statuses ('running', 'paused' or 'unavailable') -- to resolve this: wait for the pipeline to become running or paused", "error_code": "PipelineInteractionNotDeployed", "details": { "status": "Stopped", "desired_status": "Running" } } }, "Response timeout": { "value": { "message": "Unable to reach pipeline to interact due to: timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)", "error_code": "PipelineInteractionUnreachable", "details": { "error": "timeout (10s) was reached: this means the pipeline took too long to respond -- this can simply be because the request was too difficult to process in time, or other reasons (e.g., deadlock): the pipeline logs might contain additional information (original send request error: Timeout while waiting for response)" } } } } } } } }, "security": [ { "JSON web token (JWT) or API key": [] } ] } } }, "components": { "schemas": { "AdHocInputConfig": { "type": "object", "description": "Configuration for inserting data with ad-hoc queries\n\nAn ad-hoc input adapters cannot be usefully configured as part of pipeline\nconfiguration. Instead, use ad-hoc queries through the UI, the REST API, or\nthe `fda` command-line tool.", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Autogenerated name." } } }, "AdHocResultFormat": { "type": "string", "description": "URL-encoded `format` argument to the `/query` endpoint.", "enum": [ "text", "json", "parquet", "arrow_ipc" ] }, "AdhocQueryArgs": { "type": "object", "description": "Arguments to the `/query` endpoint.\n\nThe arguments can be provided in two ways:\n\n- In case a normal HTTP connection is established to the endpoint,\nthese arguments are passed as URL-encoded parameters.\nNote: this mode is deprecated and will be removed in the future.\n\n- If a Websocket connection is opened to `/query`, the arguments are passed\nto the server over the websocket as a JSON encoded string.", "properties": { "format": { "$ref": "#/components/schemas/AdHocResultFormat" }, "sql": { "type": "string", "description": "The SQL query to run." } } }, "ApiKeyDescr": { "type": "object", "description": "API key descriptor.", "required": [ "id", "name", "scopes" ], "properties": { "id": { "$ref": "#/components/schemas/ApiKeyId" }, "name": { "type": "string" }, "scopes": { "type": "array", "items": { "$ref": "#/components/schemas/ApiPermission" } } } }, "ApiKeyId": { "type": "string", "format": "uuid", "description": "API key identifier." }, "ApiPermission": { "type": "string", "description": "Permission types for invoking API endpoints.", "enum": [ "Read", "Write" ] }, "AuthProvider": { "oneOf": [ { "type": "object", "required": [ "AwsCognito" ], "properties": { "AwsCognito": { "$ref": "#/components/schemas/ProviderAwsCognito" } } }, { "type": "object", "required": [ "GoogleIdentity" ], "properties": { "GoogleIdentity": { "$ref": "#/components/schemas/ProviderGoogleIdentity" } } } ] }, "BuildInformation": { "type": "object", "description": "Information about the build of the platform.", "required": [ "build_timestamp", "build_cpu", "build_os", "cargo_dependencies", "cargo_features", "cargo_debug", "cargo_opt_level", "cargo_target_triple", "rustc_version" ], "properties": { "build_cpu": { "type": "string", "description": "CPU of build machine." }, "build_os": { "type": "string", "description": "OS of build machine." }, "build_timestamp": { "type": "string", "description": "Timestamp of the build." }, "cargo_debug": { "type": "string", "description": "Whether the build is optimized for performance." }, "cargo_dependencies": { "type": "string", "description": "Dependencies used during the build." }, "cargo_features": { "type": "string", "description": "Features enabled during the build." }, "cargo_opt_level": { "type": "string", "description": "Optimization level of the build." }, "cargo_target_triple": { "type": "string", "description": "Target triple of the build." }, "rustc_version": { "type": "string", "description": "Rust version of the build used." } } }, "CheckpointFailure": { "type": "object", "description": "Information about a failed checkpoint.", "required": [ "sequence_number", "error" ], "properties": { "error": { "type": "string", "description": "Error message associated with the failure." }, "sequence_number": { "type": "integer", "format": "int64", "description": "Sequence number of the failed checkpoint.", "minimum": 0 } } }, "CheckpointResponse": { "type": "object", "description": "Response to a checkpoint request.", "required": [ "checkpoint_sequence_number" ], "properties": { "checkpoint_sequence_number": { "type": "integer", "format": "int64", "minimum": 0 } } }, "CheckpointStatus": { "type": "object", "description": "Checkpoint status returned by the `/checkpoint_status` endpoint.", "properties": { "failure": { "allOf": [ { "$ref": "#/components/schemas/CheckpointFailure" } ], "nullable": true }, "success": { "type": "integer", "format": "int64", "description": "Most recently successful checkpoint.", "nullable": true, "minimum": 0 } } }, "Chunk": { "type": "object", "description": "A set of updates to a SQL table or view.\n\nThe `sequence_number` field stores the offset of the chunk relative to the\nstart of the stream and can be used to implement reliable delivery.\nThe payload is stored in the `bin_data`, `text_data`, or `json_data` field\ndepending on the data format used.", "required": [ "sequence_number" ], "properties": { "bin_data": { "type": "string", "format": "binary", "description": "Base64 encoded binary payload, e.g., bincode.", "nullable": true }, "json_data": { "type": "object", "description": "JSON payload.", "nullable": true }, "sequence_number": { "type": "integer", "format": "int64", "minimum": 0 }, "text_data": { "type": "string", "description": "Text payload, e.g., CSV.", "nullable": true } } }, "ClockConfig": { "type": "object", "required": [ "clock_resolution_usecs" ], "properties": { "clock_resolution_usecs": { "type": "integer", "format": "int64", "minimum": 0 } } }, "ColumnType": { "type": "object", "description": "A SQL column type description.\n\nMatches the Calcite JSON format.", "required": [ "nullable" ], "properties": { "component": { "allOf": [ { "$ref": "#/components/schemas/ColumnType" } ], "nullable": true }, "fields": { "type": "array", "items": { "$ref": "#/components/schemas/Field" }, "description": "The fields of the type (if available).\n\nFor example this would specify the fields of a `CREATE TYPE` construct.\n\n```sql\nCREATE TYPE person_typ AS (\nfirstname VARCHAR(30),\nlastname VARCHAR(30),\naddress ADDRESS_TYP\n);\n```\n\nWould lead to the following `fields` value:\n\n```sql\n[\nColumnType { name: \"firstname, ... },\nColumnType { name: \"lastname\", ... },\nColumnType { name: \"address\", fields: [ ... ] }\n]\n```", "nullable": true }, "key": { "allOf": [ { "$ref": "#/components/schemas/ColumnType" } ], "nullable": true }, "nullable": { "type": "boolean", "description": "Does the type accept NULL values?" }, "precision": { "type": "integer", "format": "int64", "description": "Precision of the type.\n\n# Examples\n- `VARCHAR` sets precision to `-1`.\n- `VARCHAR(255)` sets precision to `255`.\n- `BIGINT`, `DATE`, `FLOAT`, `DOUBLE`, `GEOMETRY`, etc. sets precision\nto None\n- `TIME`, `TIMESTAMP` set precision to `0`.", "nullable": true }, "scale": { "type": "integer", "format": "int64", "description": "The scale of the type.\n\n# Example\n- `DECIMAL(1,2)` sets scale to `2`.", "nullable": true }, "type": { "$ref": "#/components/schemas/SqlType" }, "value": { "allOf": [ { "$ref": "#/components/schemas/ColumnType" } ], "nullable": true } } }, "CompilationProfile": { "type": "string", "description": "Enumeration of possible compilation profiles that can be passed to the Rust compiler\nas an argument via `cargo build --profile <>`. A compilation profile affects among\nother things the compilation speed (how long till the program is ready to be run)\nand runtime speed (the performance while running).", "enum": [ "dev", "unoptimized", "optimized" ] }, "CompletionStatus": { "type": "string", "description": "Completion token status returned by the `/completion_status` endpoint.", "enum": [ "complete", "inprogress" ] }, "CompletionStatusArgs": { "type": "object", "description": "URL-encoded arguments to the `/completion_status` endpoint.", "required": [ "token" ], "properties": { "token": { "type": "string", "description": "Completion token returned by the `/completion_token` or `/ingress`\nendpoint." } } }, "CompletionStatusResponse": { "type": "object", "description": "Response to a completion token status request.", "required": [ "status" ], "properties": { "status": { "$ref": "#/components/schemas/CompletionStatus" } } }, "CompletionTokenResponse": { "type": "object", "description": "Response to a completion token creation request.", "required": [ "token" ], "properties": { "token": { "type": "string", "description": "Completion token.\n\nAn opaque string associated with the current position in the input stream\ngenerated by an input connector.\nPass this string to the `/completion_status` endpoint to check whether all\ninputs associated with the token have been fully processed by the pipeline." } } }, "Configuration": { "type": "object", "required": [ "telemetry", "edition", "version", "revision", "runtime_revision", "changelog_url", "build_info" ], "properties": { "build_info": { "$ref": "#/components/schemas/BuildInformation" }, "changelog_url": { "type": "string", "description": "URL that navigates to the changelog of the current version" }, "edition": { "type": "string", "description": "Feldera edition: \"Open source\" or \"Enterprise\"" }, "license_validity": { "allOf": [ { "$ref": "#/components/schemas/LicenseValidity" } ], "nullable": true }, "revision": { "type": "string", "description": "Specific revision corresponding to the edition `version` (e.g., git commit hash)." }, "runtime_revision": { "type": "string", "description": "Specific revision corresponding to the default runtime version of the platform (e.g., git commit hash)." }, "telemetry": { "type": "string", "description": "Telemetry key." }, "unstable_features": { "type": "string", "description": "List of unstable features that are enabled.", "nullable": true }, "update_info": { "allOf": [ { "$ref": "#/components/schemas/UpdateInformation" } ], "nullable": true }, "version": { "type": "string", "description": "The version corresponding to the type of `edition`.\nFormat is `x.y.z`." } } }, "ConnectorConfig": { "allOf": [ { "$ref": "#/components/schemas/OutputBufferConfig" }, { "type": "object", "required": [ "transport" ], "properties": { "format": { "allOf": [ { "$ref": "#/components/schemas/FormatConfig" } ], "nullable": true }, "index": { "type": "string", "description": "Name of the index that the connector is attached to.\n\nThis property is valid for output connectors only. It is used with data\ntransports and formats that expect output updates in the form of key/value\npairs, where the key typically represents a unique id associated with the\ntable or view.\n\nTo support such output formats, an output connector can be attached to an\nindex created using the SQL CREATE INDEX statement. An index of a table\nor view contains the same updates as the table or view itself, indexed by\none or more key columns.\n\nSee individual connector documentation for details on how they work\nwith indexes.", "nullable": true }, "labels": { "type": "array", "items": { "type": "string" }, "description": "Arbitrary user-defined text labels associated with the connector.\n\nThese labels can be used in conjunction with the `start_after` property\nto control the start order of connectors." }, "max_batch_size": { "type": "integer", "format": "int64", "description": "Maximum batch size, in records.\n\nThis is the maximum number of records to process in one batch through\nthe circuit. The time and space cost of processing a batch is\nasymptotically superlinear in the size of the batch, but very small\nbatches are less efficient due to constant factors.\n\nThis should usually be less than `max_queued_records`, to give the\nconnector a round-trip time to restart and refill the buffer while\nbatches are being processed.\n\nSome input adapters might not honor this setting.\n\nThe default is 10,000.", "minimum": 0 }, "max_queued_records": { "type": "integer", "format": "int64", "description": "Backpressure threshold.\n\nMaximal number of records queued by the endpoint before the endpoint\nis paused by the backpressure mechanism.\n\nFor input endpoints, this setting bounds the number of records that have\nbeen received from the input transport but haven't yet been consumed by\nthe circuit since the circuit, since the circuit is still busy processing\nprevious inputs.\n\nFor output endpoints, this setting bounds the number of records that have\nbeen produced by the circuit but not yet sent via the output transport endpoint\nnor stored in the output buffer (see `enable_output_buffer`).\n\nNote that this is not a hard bound: there can be a small delay between\nthe backpressure mechanism is triggered and the endpoint is paused, during\nwhich more data may be queued.\n\nThe default is 1 million.", "minimum": 0 }, "paused": { "type": "boolean", "description": "Create connector in paused state.\n\nThe default is `false`." }, "start_after": { "type": "array", "items": { "type": "string" }, "description": "Start the connector after all connectors with specified labels.\n\nThis property is used to control the start order of connectors.\nThe connector will not start until all connectors with the specified\nlabels have finished processing all inputs.", "nullable": true }, "transport": { "$ref": "#/components/schemas/TransportConfig" } } } ], "description": "A data connector's configuration" }, "DatagenInputConfig": { "type": "object", "description": "Configuration for generating random data for a table.", "properties": { "plan": { "type": "array", "items": { "$ref": "#/components/schemas/GenerationPlan" }, "description": "The sequence of generations to perform.\n\nIf not set, the generator will produce a single sequence with default settings.\nIf set, the generator will produce the specified sequences in sequential order.\n\nNote that if one of the sequences before the last one generates an unlimited number of rows\nthe following sequences will not be executed.", "default": [ { "rate": null, "limit": null, "worker_chunk_size": null, "fields": {} } ] }, "seed": { "type": "integer", "format": "int64", "description": "Optional seed for the random generator.\n\nSetting this to a fixed value will make the generator produce the same sequence of records\nevery time the pipeline is run.\n\n# Notes\n- To ensure the set of generated input records is deterministic across multiple runs,\napart from setting a seed, `workers` also needs to remain unchanged.\n- The input will arrive in non-deterministic order if `workers > 1`.", "default": null, "nullable": true, "minimum": 0 }, "workers": { "type": "integer", "description": "Number of workers to use for generating data.", "default": 1, "minimum": 0 } }, "additionalProperties": false }, "DatagenStrategy": { "type": "string", "description": "Strategy used to generate values.", "enum": [ "increment", "uniform", "zipf", "word", "words", "sentence", "sentences", "paragraph", "paragraphs", "first_name", "last_name", "title", "suffix", "name", "name_with_title", "domain_suffix", "email", "username", "password", "field", "position", "seniority", "job_title", "ipv4", "ipv6", "ip", "mac_address", "user_agent", "rfc_status_code", "valid_status_code", "company_suffix", "company_name", "buzzword", "buzzword_middle", "buzzword_tail", "catch_phrase", "bs_verb", "bs_adj", "bs_noun", "bs", "profession", "industry", "currency_code", "currency_name", "currency_symbol", "credit_card_number", "city_prefix", "city_suffix", "city_name", "country_name", "country_code", "street_suffix", "street_name", "time_zone", "state_name", "state_abbr", "secondary_address_type", "secondary_address", "zip_code", "post_code", "building_number", "latitude", "longitude", "isbn", "isbn13", "isbn10", "phone_number", "cell_number", "file_path", "file_name", "file_extension", "dir_path" ] }, "DeltaTableIngestMode": { "type": "string", "description": "Delta table read mode.\n\nThree options are available:\n\n* `snapshot` - read a snapshot of the table and stop.\n\n* `follow` - continuously ingest changes to the table, starting from a specified version\nor timestamp.\n\n* `snapshot_and_follow` - read a snapshot of the table before switching to continuous ingestion\nmode.", "enum": [ "snapshot", "follow", "snapshot_and_follow", "cdc" ] }, "DeltaTableReaderConfig": { "type": "object", "description": "Delta table input connector configuration.", "required": [ "uri", "mode" ], "properties": { "cdc_delete_filter": { "type": "string", "description": "A predicate that determines whether the record represents a deletion.\n\nThis setting is only valid in the `cdc` mode. It specifies a predicate applied to\neach row in the Delta table to determine whether the row represents a deletion event.\nIts value must be a valid Boolean SQL expression that can be used in a query of the\nform `SELECT * from