Sending data to Better Stack Warehouse is as easy as sending an HTTP request.
This endpoint allows you to ingest a single event or a list of events. The events can be encoded in JSON or preferably in a more efficient MessagePack.
Getting your $INGESTING_HOST and $SOURCE_TOKEN
Click Sources β Choose your source β Data ingestion tab β Copy $INGESTING_HOST and $SOURCE_TOKEN.
POSThttps://$INGESTING_HOST/
Headers
Content-Type
requiredstring
Either application/json, application/msgpack, or application/x-ndjson
Authorization
requiredstring
Bearer $SOURCE_TOKEN
Body parameters
Multiple events
requiredarray
An array of events encoded in JSON or MessagePack, or newline-delimited JSONs of events
Single event
requiredobject
A single event encoded in JSON or MessagePack
202
The events were successfully ingested.
403
You provided an invalid source token.
Response body
Unauthorized
406
The body is not a valid JSON or MessagePack.
Response body
Couldn't parse JSON content.
413
The body is too large (over 20 MiB).
Response body
payload reached size limit
Examples
Single event
Send a single event using cURL:
JSONNDJSONMessagePack
Copied!
curl -X POST https://$INGESTING_HOST \
-H "Authorization: Bearer $SOURCE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"message":"My first event","nested":{"values":123}}'
curl -X POST https://$INGESTING_HOST \
-H "Authorization: Bearer $SOURCE_TOKEN" \
-H "Content-Type: application/x-ndjson" \
-d '{"message":"My first event","nested":{"values":123}}'
# Python is required to prepare the binary data in this example
python3 -c 'import msgpack; \
print(msgpack.packb( \
{"message":"My first event","nested":{"values":123}} \
).hex())' \
| xxd -r -p \
| curl -X POST https://$INGESTING_HOST \
-H "Authorization: Bearer $SOURCE_TOKEN" \
-H "Content-Type: application/msgpack" \
--data-binary @-
# Python is required to prepare the binary data
python3 -c 'import msgpack; \
print(msgpack.packb( \
[{"message":"A"},{"message":"B"}] \
).hex())' \
| xxd -r -p \
| curl -X POST https://$INGESTING_HOST \
-H "Authorization: Bearer $SOURCE_TOKEN" \
-H "Content-Type: application/msgpack" \
--data-binary @-
Sending timestamps
By default, the time of the event will be the time of receiving it. You can override this by including a field dt containing the event time either as:
UNIX time in whole seconds, milliseconds, or nanoseconds. 1672490759, 1672490759123, 1672490759123456000
String formatted according to RFC 3339. 2022-12-31T13:45:59.123456Z, 2022-12-31 13:45:59.123456+02:00
Alternatively, you can use ISO 8601, as it will most likely use a format compatible with RFC 3339. In MessagePack, you can also use the timestamp extension type.
In case the timestamp can't be parsed, we save it as a string, but revert to using the reception time as the event time.
JSON
Copied!
curl -X POST https://$INGESTING_HOST \
-H "Authorization: Bearer $SOURCE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"message":"I have arrived on time","dt":"2023-08-09 07:03:30+00:00"}'
Request limits
The maximum allowed size of a single request that might contain many events is 10 MiB of compressed data.
Each event is limited to 1 MiB maximum size, but we recommend keeping a single event under 100 KiB for the best experience.