openapi: 3.1.0 info: title: openobserve Actions Logs API description: OpenObserve API documents [https://openobserve.ai/docs/](https://openobserve.ai/docs/) contact: name: OpenObserve url: https://openobserve.ai/ email: hello@zinclabs.io license: name: AGPL-3.0 identifier: AGPL-3.0 version: 0.90.0 tags: - name: Logs description: Logs data ingestion operations paths: /api/{org_id}/_bulk: post: tags: - Logs summary: Bulk ingest logs (Elasticsearch compatible) description: Ingests multiple log records in bulk using Elasticsearch-compatible NDJSON format. Each line contains either an index/create action followed by the document data. This endpoint provides high-throughput ingestion for applications migrating from or integrating with Elasticsearch. operationId: LogsIngestionBulk parameters: - name: org_id in: path description: Organization name required: true schema: type: string requestBody: description: Ingest data (ndjson) content: application/json: schema: type: string required: true responses: '200': description: Success content: application/json: schema: type: object example: took: 2 errors: true items: - index: _index: olympics _id: 1 status: 200 error: type: Too old data, only last 5 hours data can be ingested. Data discarded. reason: Too old data, only last 5 hours data can be ingested. Data discarded. index_uuid: '1' shard: '1' index: olympics original_record: athlete: CHASAPIS, Spiridon city: BER country: USA discipline: Swimming event: 100M Freestyle For Sailors gender: Men medal: Silver onemore: 1 season: summer sport: Aquatics year: 1986 '500': description: Failure content: application/json: schema: default: null security: - Authorization: [] x-o2-mcp: enabled: false /api/{org_id}/loki/api/v1/push: post: tags: - Logs summary: Ingest logs via Loki API description: Ingests log data using Grafana Loki-compatible API format. Supports both JSON and Protocol Buffers content types with optional compression (gzip for JSON, snappy for Protobuf). Stream names are extracted from the 'stream_name' label in stream metadata. Provides seamless migration path from Loki deployments to OpenObserve while maintaining API compatibility. operationId: LogsIngestionLoki parameters: - name: org_id in: path description: Organization name required: true schema: type: string requestBody: description: Loki-compatible log push data in JSON format. Stream names are extracted from 'stream_name' label in the stream labels. Also supports Protobuf format (application/x-protobuf) with optional compression (gzip for JSON, snappy for Protobuf) content: application/json: schema: type: object description: 'Internal Loki JSON types for native Loki push API format Loki push request - matches native JSON format exactly' required: - streams properties: streams: type: array items: $ref: '#/components/schemas/LokiStream' description: Array of log streams, each containing labels and log entries example: streams: - stream: stream_name: application_logs service: api environment: production values: - - '1609459200000000000' - API request processed successfully - - '1609459201000000000' - Database connection established - trace_id: abc123 span_id: def456 required: true responses: '204': description: Success - logs ingested successfully '400': description: 'Bad Request - Possible causes: empty stream data, invalid labels format (e.g., empty labels), invalid timestamp format (e.g., non-numeric timestamp), unsupported content type (only application/json and application/x-protobuf supported), unsupported content encoding (only gzip for JSON and snappy for Protobuf), protobuf decode errors, JSON parsing errors, or compression/decompression failures' content: text/plain: schema: type: string '500': description: Internal Server Error - Server error during log processing content: text/plain: schema: type: string security: - Authorization: [] x-o2-mcp: enabled: false /api/{org_id}/{stream_name}/_json: post: tags: - Logs summary: Ingest logs via JSON array description: Ingests log data using a JSON array format where multiple log records are submitted as an array in a single request. This is ideal for batch processing scenarios where applications collect multiple log entries before sending them together for improved efficiency. operationId: LogsIngestionJson parameters: - name: org_id in: path description: Organization name required: true schema: type: string - name: stream_name in: path description: Stream name required: true schema: type: string requestBody: description: Ingest data (json array) content: application/json: schema: type: string example: - Year: 1896 City: Athens Sport: Aquatics Discipline: Swimming Athlete: Alfred Country: HUN - Year: 1896 City: Athens Sport: Aquatics Discipline: Swimming Athlete: HERSCHMANN Country: CHN required: true responses: '200': description: Success content: application/json: schema: type: object example: code: 200 status: - name: olympics successful: 3 failed: 0 '500': description: Failure content: application/json: schema: default: null security: - Authorization: [] x-o2-mcp: description: Ingest logs via JSON array category: logs /api/{org_id}/{stream_name}/_multi: post: tags: - Logs summary: Ingest logs via multi-line JSON description: Ingests log data using multi-line JSON format where each line contains a separate JSON object representing a log record. This format is efficient for streaming applications and tools that generate logs in newline-delimited JSON format. operationId: LogsIngestionMulti parameters: - name: org_id in: path description: Organization name required: true schema: type: string - name: stream_name in: path description: Stream name required: true schema: type: string requestBody: description: Ingest data (multiple line json) content: application/json: schema: type: string required: true responses: '200': description: Success content: application/json: schema: type: object example: code: 200 status: - name: olympics successful: 3 failed: 0 '500': description: Failure content: application/json: schema: default: null security: - Authorization: [] x-o2-mcp: enabled: false components: schemas: LokiStream: type: object description: Loki stream containing labels and log entries required: - stream - values properties: stream: type: object description: 'Stream labels as key-value pairs (e.g., {"service": "api", "stream_name": "logs"})' additionalProperties: type: string propertyNames: type: string values: type: array items: $ref: '#/components/schemas/LokiEntry' description: Array of log entries, each containing timestamp, message, and optional structured metadata LokiEntry: type: object description: Loki log entry containing timestamp, message, and optional metadata required: - timestamp - line properties: line: type: string description: Log message content structured_metadata: type: - object - 'null' description: Optional structured metadata as key-value pairs additionalProperties: type: string propertyNames: type: string timestamp: type: string description: Timestamp as nanosecond unix epoch string (e.g., "1609459200000000000") securitySchemes: Authorization: type: apiKey in: header name: Authorization BasicAuth: type: http scheme: basic