---
title: "Ingest logs via OTLP"
method: POST
path: "/api/{org_id}/v1/logs"
tags: ["Logs"]
---

# Ingest logs via OTLP

`POST /api/{org_id}/v1/logs`

## Request

- Base URL: `https://api.openobserve.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openobserve.ai/api/{org_id}/v1/logs`
- Auth: API key in header `Authorization`
- TypeScript: <https://skmtc.dev/openobserve/apis/openobserve-api-http/docs/api/:org_id/v1/logs/post.ts> (a function with typed inputs; its response is checked against the schema)

Ingests log data using OpenTelemetry Protocol (OTLP) format. Supports both Protocol Buffers and JSON content types for OTLP log ingestion. This is the standard endpoint for OpenTelemetry SDK and collector integrations to send structured log data with trace correlation.

## Path parameters

- `org_id` string, required

## Request body

- object

## Response `200`

ExportLogsServiceResponse, encoded like the request

- OtlpLogsExportJson
  - `partialSuccess` object
    - `errorMessage` string
    - `rejectedLogRecords` string

## Other responses

- `400`: google.rpc.Status: invalid body, unsupported Content-Type, ingestion refused (e.g. stream being deleted), or write rejected (e.g. columns limit)
- `429`: google.rpc.Status: trial period expired
- `500`: google.rpc.Status: internal write error
- `503`: google.rpc.Status: ingester overloaded or unavailable, or ingestion not allowed (cloud)

---

[API](https://skmtc.dev/openobserve/apis/openobserve-api-http.md) - [All operations](https://skmtc.dev/openobserve/apis/openobserve-api-http/llms.txt) - [OpenAPI document](https://skmtc.dev/openobserve/apis/openobserve-api-http/revisions/0529b8a10252?raw)
