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

EndpointPOST https://app.loginformant.com/api/ingest/batch
Auth headerX-API-Key: YOUR-API-KEY
Content-Typeapplication/json
Batch sizeUp to 500 logs per request
Rate limitsRate 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 5xx and 429 responses with backoff.
  • Do not retry malformed requests after a 400 or 401.
  • Use UTC timestamps when you send explicit timestamps.

HTTP response codes

CodeMeaningRecommended action
200AcceptedContinue normally
400Bad requestFix payload shape and do not retry blindly
401UnauthorizedCheck the API key and environment
429Rate limitedBack off and retry later
5xxServer errorRetry with backoff