Delete
Delete stream
OpenObserve provides multiple deletion strategies to manage your data lifecycle: immediate complete stream deletion, targeted time-range deletion with job tracking, and automatic retention-based cleanup.
Overview
The Delete Stream API allows you to:
- Delete an entire stream and all its data
- Delete data within a specific time period with job tracking
- Monitor deletion job progress across clusters
- Manage cached query results All deletion operations are asynchronous and processed by the Compactor service.
Base URL
https://example.remote.dev/
Replace example.remote.dev with your actual OpenObserve instance URL.
Content type
All requests and responses use JSON format.
Content-Type: application/jsonEndpoints
Delete entire stream
Delete a complete stream and all associated data.
Request
Method: DELETE
Path: /api/{org_id}/streams/{stream_name}?type=logs&delete_all=true
Parameters:
| Name | Type | Location | Required | Description |
|---|---|---|---|---|
| org_id | string | path | Yes | Organization identifier |
| stream_name | string | path | Yes | Name of the stream to delete |
| type | string | query | Yes | Stream type: logs, metrics, or traces |
| delete_all | boolean | path | Yes | Delete all related resources like alerts and dashboards |
Request example
curl -X 'DELETE' \
'https://example.remote.dev/api/default/streams/pii_test?type=logs&delete_all=true' \
-H 'accept: application/json'Response
Status Code: 200 OK
{
"code": 200,
"message": "stream deleted"
}Response fields
| Field | Type | Description |
|---|---|---|
| code | integer | HTTP status code |
| message | string | Confirmation message |
Status codes
| Code | Meaning |
|---|---|
| 200 | Stream deleted successfully |
| 400 | Invalid parameters |
| 404 | Stream not found |
| 500 | Internal server error |
Behavior
Deletion is asynchronous and does not happen immediately:
- When you call this API, the deletion request is marked in the system.
- The API responds immediately, you do not wait for actual deletion.
- A background service called Compactor checks for pending deletions every 10 minutes.
- When Compactor runs, it starts deleting your stream. This can take anywhere from seconds to several minutes depending on how much data the stream contains.
- In the worst-case scenario (if you request deletion just before Compactor runs), the entire process could take up to 30 minutes total.
- You do not need to wait. The deletion happens in the background. You can check the stream status later to confirm it has been deleted.
Notes
- This operation cannot be undone.
- Data is deleted from both the `file_list` table and object store.
- No job tracking is available for this endpointEnvironment variables
- You can change the `compactor` run interval: `ZO_COMPACT_INTERVAL=600`. Unit is second. default is `10 minutes`.
- You can configure data life cycle to auto delete old data: `ZO_COMPACT_DATA_RETENTION_DAYS=30`. The system will auto delete the data after `30` days. Note that the value must be greater than `0`.Delete stream data by time range
Delete stream data within a specific time period with job tracking.
Request
Method: DELETE
Path: /api/{org_id}/streams/{stream_name}/data_by_time_range?start=<start_ts>&end=<end_ts>
Parameters
| Parameter | Type | Location | Description |
|---|---|---|---|
org_id | string | Path | Organization identifier |
stream_name | string | Path | Name of the stream |
start | long | path | Start timestamp in microseconds (UTC). Inclusive. |
end | long | path | End timestamp in microseconds (UTC). Inclusive. |
Request example
curl -X DELETE \
'https://example.remote.dev/api/default/streams/test_stream/data_by_time_range?start=1748736000000000&end=1751241600000000'Response
Status Code: 200 OK
{
"id": "30ernyKEEMznL8KIXEaZhmDYRR9"
}Response fields
| Field | Type | Description |
|---|---|---|
id | string | Unique job ID for tracking deletion progress |
Status codes
| Code | Meaning |
|---|---|
| 200 | Deletion job created successfully |
| 400 | Invalid parameters (For example, invalid timestamp format) |
| 404 | Stream not found |
Behavior
-
Initiates a compaction delete job.
-
Returns a job ID that can be used to track progress.
-
Deletes data from:
file_listtable- Object store (for example, S3)
-
Granularity:
- Logs: Data is deleted every hour.
- Traces: Data is deleted daily.
Get delete job status
Check the status of a time-range deletion job.
Request
Method: GET
Path: /api/{org_id}/streams/{stream_name}/data_by_time_range/status/{id}
Parameters
| Parameter | Type | Location | Description |
|---|---|---|---|
org_id | string | Path | Organization identifier |
stream_name | string | Path | Name of the stream |
id | string | Path | Job ID returned from deletion request |
Request example
curl -X GET \
'https://example.remote.dev/api/default/streams/test_stream/data_by_time_range/status/30ernyKEEMznL8KIXEaZhmDYRR9'Response: Completed
Status Code: 200 OK
{
"id": "30f080gLbU4i21VpY2O3YzwrKDH",
"status": "Completed",
"metadata": [
{
"cluster": "dev3",
"region": "us-test-3",
"id": "30f080gLbU4i21VpY2O3YzwrKDH",
"key": "default/logs/delete_d3/2025-07-27T04:00:00Z,2025-07-28T04:00:00Z",
"created_at": 1754003156467113,
"ended_at": 1754003356516415,
"status": "Completed"
},
{
"cluster": "dev4",
"region": "us-test-4",
"id": "30f080gLbU4i21VpY2O3YzwrKDH",
"key": "default/logs/delete_d3/2025-07-27T04:00:00Z,2025-07-28T04:00:00Z",
"created_at": 1754003156467113,
"ended_at": 1754003326523177,
"status": "Completed"
}
]
}Response: Pending
Status Code: 200 OK
{
"id": "30f080gLbU4i21VpY2O3YzwrKDH",
"status": "Pending",
"metadata": [
{
"cluster": "dev3",
"region": "us-test-3",
"id": "30f080gLbU4i21VpY2O3YzwrKDH",
"key": "default/logs/delete_d3/2025-07-27T04:00:00Z,2025-07-28T04:00:00Z",
"created_at": 1754003156467113,
"ended_at": 0,
"status": "Pending"
},
{
"cluster": "dev4",
"region": "us-test-4",
"id": "30f080gLbU4i21VpY2O3YzwrKDH",
"key": "default/logs/delete_d3/2025-07-27T04:00:00Z,2025-07-28T04:00:00Z",
"created_at": 1754003156467113,
"ended_at": 0,
"status": "Pending"
}
]
}Response: With Errors
Status Code: 200 OK
{
"id": "30fCWBSNWwTWnRJE0weFfDIc3zz",
"status": "Pending",
"metadata": [
{
"cluster": "dev4",
"region": "us-test-4",
"id": "30fCWBSNWwTWnRJE0weFfDIc3zz",
"key": "default/logs/delete_d4/2025-07-21T14:00:00Z,2025-07-22T00:00:00Z",
"created_at": 1754009269552227,
"ended_at": 1754009558553845,
"status": "Completed"
}
],
"errors": [
{
"cluster": "dev3",
"error": "Error getting delete job status from cluster node: Status { code: Internal, message: \"Database error: DbError# SeaORMError# job not found\", metadata: MetadataMap { headers: {\"content-type\": \"application/grpc\", \"date\": \"Fri, 01 Aug 2025 00:58:01 GMT\", \"content-length\": \"0\"} }, source: None }",
"region": "us-test-3"
}
]
}Response fields
| Field | Type | Description |
|---|---|---|
id | string | Job identifier |
status | string | Overall job status: Completed or Pending |
metadata | array | Array of per-cluster deletion details |
metadata[].cluster | string | Cluster identifier |
metadata[].region | string | Region/zone identifier |
metadata[].id | string | Job ID |
metadata[].key | string | Database key for the deletion operation |
metadata[].created_at | long | Job creation timestamp in microseconds |
metadata[].ended_at | long | Job completion timestamp in microseconds (0 if still pending) |
metadata[].status | string | Individual cluster deletion status |
errors | array | Array of errors from specific clusters (if any) |
errors[].cluster | string | Cluster where error occurred |
errors[].region | string | Region identifier |
errors[].error | string | Error message |
Status Codes
| Code | Meaning |
|---|---|
| 200 | Status retrieved successfully |
| 404 | Job ID not found |
Behavior
- Returns current status of deletion job
- Shows progress across all clusters in distributed setup
- Shows error details if any cluster encountered failures
- Status of
Pendingmeans deletion is still in progress - Status of
Completedmeans all clusters finished deletion
Delete cache results
Delete cached query results for a stream.
Request
Method: DELETE
Path: /api/{org_id}/streams/{stream_name}/cache/results?type=<stream_type>&ts=<timestamp>
Parameters
| Parameter | Type | Location | Description |
|---|---|---|---|
org_id | string | path | Organization identifier |
stream_name | string | Path | Stream name (use _all to delete cache for all streams) |
type | string | Query | Stream type: logs, metrics, or traces |
ts | long | Query | Timestamp threshold in microseconds. Deletes cache from start up to this timestamp. Retains cache from timestamp onwards. |
Request example
curl -X DELETE \
'https://example.remote.dev/api/default/streams/test_stream/_all/cache/results?type=logs&ts=1753849800000'Response
Status Code: 200 OK
{
"code": 200,
"message": "cache deleted"
}Response Fields
| Field | Type | Description |
|---|---|---|
code | integer | HTTP status code |
message | string | Confirmation message |
Status Codes
| Code | Meaning |
|---|---|
| 200 | Cache deleted successfully |
| 400 | Invalid parameters |
| 404 | Stream not found |
Behavior
- Accepts
ts(timestamp) query parameter in microseconds - Deletes cache from
cache_startup to the givents - Retains cache from
tsonwards
Last updated on
List
List all streams in OpenObserve by type (logs, metrics, traces). Optionally include schema, storage stats, and stream settings in the response.
Ingestion
Ingest logs, metrics, and traces into OpenObserve using ingestion APIs: Bulk, JSON, and Multi for logs, Prometheus and JSON for metrics, and OTLP for traces.