Build your own integration
LogInformant is just an HTTP API underneath the official packages. If your stack is not listed in the docs, or you want a custom sender, all you need is the ability to make an HTTPS POST request with JSON.
The ingest endpoint
| Endpoint | POST https://app.loginformant.com/api/ingest/batch |
| Auth header | X-API-Key: YOUR-API-KEY |
| Content-Type | application/json |
| Batch size | Up to 500 logs per request |
| Rate limits | Rate limits are tier-based and enforced by the API |
Rate limits vary by subscription tier, so do not hardcode a single public number into your client. Handle
429 responses and back off gracefully.
Request body
json
{
"logs": [
{
"timestamp": "2026-04-08T18:30:00.000Z",
"level": "Error",
"message": "Something went wrong",
"source": "MyApp.OrderService",
"exception": "NullReferenceException: ...",
"properties": {
"userId": 42,
"orderId": "ORD-9912"
}
}
]
}
level and message are required. timestamp is optional; if it is omitted, the API uses the current UTC time when the log is accepted.
Accepted levels
Debug, Information, Warning, Error, and Fatal.
Single-log endpoint
When batching is not convenient, you can send a single event to POST /api/ingest with the same log object shape.
{
"level": "Warning",
"message": "Cache miss for key user:42",
"source": "CacheService"
}
Examples
curl
bash
curl -X POST https://app.loginformant.com/api/ingest/batch \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR-API-KEY" \
-d '{
"logs": [{
"timestamp": "2026-04-08T18:30:00Z",
"level": "Information",
"message": "Deploy completed",
"source": "CI/CD"
}]
}'
Python
python
import requests
from datetime import datetime, timezone
payload = {
"logs": [{
"timestamp": datetime.now(timezone.utc).isoformat(),
"level": "Information",
"message": "Script started",
"source": "my_script.py",
}]
}
requests.post(
"https://app.loginformant.com/api/ingest/batch",
headers={"X-API-Key": "YOUR-API-KEY"},
json=payload,
timeout=5,
)
Best practices
- Batch logs whenever possible instead of sending one request per event.
- Buffer in the background so application threads are not blocked on network calls.
- Retry carefully on
5xxand429responses with backoff. - Do not retry malformed requests after a
400or401. - Use UTC timestamps when you send explicit timestamps.
HTTP response codes
| Code | Meaning | Recommended action |
|---|---|---|
| 200 | Accepted | Continue normally |
| 400 | Bad request | Fix payload shape and do not retry blindly |
| 401 | Unauthorized | Check the API key and environment |
| 429 | Rate limited | Back off and retry later |
| 5xx | Server error | Retry with backoff |