Last Updated: 3/19/2026
REST API Overview
The Feldera REST API provides programmatic access to all platform functionality, including pipeline management, data ingestion, and query execution. The API follows REST principles and uses JSON for request and response bodies.
Base URL
The API is served at the base path /v0 on your Feldera instance. For example, if Feldera is running locally on port 8080:
http://localhost:8080/v0All endpoint paths in this documentation are relative to this base URL.
Authentication
The Feldera API supports two authentication methods:
API Keys
API keys provide a simple way to authenticate programmatic access. Create an API key using the /v0/api_keys endpoint:
curl -X POST http://localhost:8080/v0/api_keys \
-H "Content-Type: application/json" \
-d '{"name": "my-api-key"}'The response includes the generated API key, which you should store securely as it cannot be retrieved again:
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"name": "my-api-key",
"api_key": "apikey:v5y5QNtlPNVMwkmNjKwFU8bbIu5lMge3yHbyddxAOdXlEo84SEoNn32DUhQaf1KLeI9aOOfnJjhQ1pYzMrU4wQXON6pm6BS7Zgzj46U2b8pwz1280vYBEtx41hiDBRP"
}Use the API key in the Authorization header:
curl -H "Authorization: Bearer apikey:v5y5QNtlPNVMwkmNjKwFU8bbIu5lMge3yHbyddxAOdXlEo84SEoNn32DUhQaf1KLeI9aOOfnJjhQ1pYzMrU4wQXON6pm6BS7Zgzj46U2b8pwz1280vYBEtx41hiDBRP" \
http://localhost:8080/v0/pipelinesJWT Tokens
When authentication is configured (AWS Cognito or Generic OIDC), you can use JWT tokens obtained through the OAuth2/OIDC login flow. Pass the JWT token in the Authorization header with the Bearer scheme.
Core Endpoints
Pipeline Management
Create a Pipeline
POST /v0/pipelinesCreates a new pipeline with the specified SQL program and configuration.
List Pipelines
GET /v0/pipelinesReturns all pipelines. Use the selector query parameter to control which fields are returned (all, status, or status_with_connectors).
Get Pipeline Details
GET /v0/pipelines/{pipeline_name}Retrieves detailed information about a specific pipeline.
Update Pipeline
PUT /v0/pipelines/{pipeline_name} # Full update
PATCH /v0/pipelines/{pipeline_name} # Partial updateUpdates an existing pipeline. Pipelines can only be updated while stopped.
Delete Pipeline
DELETE /v0/pipelines/{pipeline_name}Deletes a pipeline. The pipeline must be fully stopped before deletion.
Pipeline Lifecycle
Start Pipeline
POST /v0/pipelines/{pipeline_name}/startStarts a pipeline. Use the initial query parameter to specify whether to start in running, paused, or standby mode.
Pause Pipeline
POST /v0/pipelines/{pipeline_name}/pausePauses a running pipeline. The pipeline continues to maintain state but stops processing input.
Resume Pipeline
POST /v0/pipelines/{pipeline_name}/resumeResumes a paused pipeline.
Stop Pipeline
POST /v0/pipelines/{pipeline_name}/stopStops a pipeline. Use force=false (default) to checkpoint before stopping, or force=true to stop immediately.
Data Ingestion
Push Data to a Table
POST /v0/pipelines/{pipeline_name}/ingress/{table_name}?format={format}Pushes data to an input table. Supported formats include json and csv. The format parameter specifies the data encoding.
Example:
curl -X POST "http://localhost:8080/v0/pipelines/my_pipeline/ingress/users?format=json" \
-H "Content-Type: application/json" \
-d '{"insert": {"id": 1, "name": "Alice"}}'Query Results
Subscribe to View Updates
POST /v0/pipelines/{pipeline_name}/egress/{table_name}?format={format}Subscribes to a stream of updates from a view or table. The pipeline continuously sends changes until the connection is closed.
Execute Ad-hoc Query
GET /v0/pipelines/{pipeline_name}/query?sql={sql}&format={format}Executes an ad-hoc SQL SELECT query against the pipeline’s materialized views. Supported formats: text, json, parquet.
Example:
curl "http://localhost:8080/v0/pipelines/my_pipeline/query?sql=SELECT%20*%20FROM%20users&format=json"Pipeline Statistics
Get Pipeline Stats
GET /v0/pipelines/{pipeline_name}/statsReturns detailed statistics about a running or paused pipeline, including:
- Input/output connector metrics
- Records processed
- Memory and storage usage
- Error counts
Get Pipeline Metrics
GET /v0/pipelines/{pipeline_name}/metrics?format={format}Returns metrics in Prometheus format (default) or JSON. Use this endpoint to integrate with monitoring systems.
Error Handling
The API uses standard HTTP status codes:
- 2xx: Success
- 400: Bad request (invalid parameters)
- 401: Unauthorized (missing or invalid authentication)
- 404: Resource not found
- 409: Conflict (e.g., duplicate name)
- 500: Internal server error
- 503: Service unavailable (e.g., pipeline not ready)
Error responses include a JSON body with details:
{
"message": "Human-readable explanation",
"error_code": "CodeSpecifyingError",
"details": {}
}The error_code field provides a machine-readable error type (e.g., UnknownPipelineName, DuplicateName).
Pagination and Filtering
The /v0/pipelines endpoint supports the selector query parameter to control response size:
all: Returns all pipeline fields (default)status: Returns only status-related fieldsstatus_with_connectors: Returns status fields plus connector error statistics
Rate Limiting
The API does not currently impose rate limits, but clients should implement retry logic with exponential backoff for transient errors (408, 502, 503, 504).
OpenAPI Specification
The complete API specification is available in OpenAPI 3.0 format at /openapi.json. You can use this specification with tools like Swagger UI or to generate client libraries.
WebSocket Support
Some endpoints support WebSocket connections for streaming data:
/v0/pipelines/{pipeline_name}/query: Stream ad-hoc query results/v0/pipelines/{pipeline_name}/egress/{table_name}: Stream view updates
Versioning
The API is currently at version v0. The version is included in the URL path to allow for future API evolution while maintaining backward compatibility.
What’s Next
- Python Sdk: Use the Python SDK to interact with Feldera programmatically with a higher-level interface.
- Ad Hoc Queries: Learn how to run ad-hoc SQL queries against your pipeline’s materialized views.