Log ingestion through HTTP endpoints
Amazon CloudWatch Logs provides HTTP endpoints that allow you to send logs directly to CloudWatch Logs using simple HTTP POST requests. These endpoints support both bearer token and SigV4 authentication, making it easy to ingest logs from any application or service without requiring AWS SDK integration.
CloudWatch Logs supports the following HTTP ingestion endpoints:
| Endpoint | Path | Content-Type | Format |
|---|---|---|---|
| OpenTelemetry Logs | /v1/logs |
application/json or application/x-protobuf |
OTLP JSON or Protobuf |
| HLC Logs | /services/collector/event |
application/json |
HLC format |
| ND-JSON Logs | /ingest/bulk |
application/json or application/x-ndjson |
Newline-delimited JSON |
| Structured JSON Logs | /ingest/json |
application/json |
JSON object or array |
Common behavior
All HTTP ingestion endpoints share the following behavior:
Authentication
All endpoints support both SigV4 and bearer token authentication:
SigV4 – Standard AWS Signature Version 4 signing.
-
Bearer token – Use the
Authorization: Bearer <ACWL token>header.Token must be a valid ACWL bearer token. For setup instructions, see Setting up bearer token authentication.
Requires the
logs:PutLogEventsandlogs:CallWithBearerTokenIAM permissions.
Log group and log stream
Provided via headers:
x-aws-log-groupandx-aws-log-streamQuery parameters
?logGroup=<name>&logStream=<name>are also supported on all endpoints except OTLP.You cannot use both query parameters and headers for the same parameter.
Both log group and log stream are required.
Response
Success:
HTTP 200with body{}Validation errors:
HTTP 400Auth failures:
HTTP 401
Comparison of HTTP ingestion endpoints
| Feature | HLC Logs | ND-JSON Logs | Structured JSON Logs | OpenTelemetry Logs |
|---|---|---|---|---|
| Path | /services/collector/event |
/ingest/bulk |
/ingest/json |
/v1/logs |
| Content-Type | application/json |
application/json or application/x-ndjson |
application/json |
application/json or application/x-protobuf |
| Timestamp field | "time" (seconds) |
"timestamp" (milliseconds) |
"timestamp" (milliseconds) |
"timeUnixNano" (nanoseconds) |
| Required fields | "event" |
None | None | OTLP structure ("resourceLogs") |
| Partial success response | No | Yes | Yes | Yes |
| Query parameter support | Yes | Yes | Yes | No (headers only) |
| Entity metadata | Yes | Yes | Yes | No |
| Accepts primitives | No | Yes | No | No |
| Line-based parsing | No | Yes | No | No |
| Protobuf support | No | No | No | Yes |
| Retry-After header | No | No | No | Yes |
Choosing an endpoint
Using HLC format? Use HLC Logs. Your existing HLC payloads work with minimal changes.
Streaming line-by-line logs? Use ND-JSON Logs. Best for log pipelines that emit one event per line. Most flexible – accepts any JSON value type.
Sending structured JSON payloads? Use Structured JSON Logs. Best for applications that produce well-formed JSON objects or arrays.
Already using OpenTelemetry? Use OpenTelemetry Logs. Accepts OTLP JSON or Protobuf format and supports partial success responses with retry semantics.