Base URL: https://api.logzuno.app/v1. Send JSON with Content-Type: application/json and your key in Authorization: Bearer <key>.
Endpoints
| Method and path | Key scope | What it does | Counts toward the event allowance |
|---|---|---|---|
POST /log | Ingest | One event (details) | Yes, 1 |
POST /batch | Ingest | Up to 100 events in events | Yes, one per event |
POST /identity | Ingest | Set a user's properties (details) | No |
POST /group | Ingest | Set a group's properties and members (details) | No |
POST /insight | Ingest | Set, increment or decrement a number (details) | No |
POST /track, GET /track | Ingest | A pageview from the website script or a pixel | Yes, if a person; automated views are free |
POST /hits | Server traffic | Up to 100 server requests (details) | Server-request allowance |
POST /drains/vercel, POST /drains/netlify | Server traffic | Log drain deliveries (Vercel, Netlify) | Server-request allowance |
GET /track accepts the key as a token or api_key query parameter, for image-pixel tracking where a header can't be set. Everything else needs the Authorization header.
Status codes
| Code | Meaning | What to do |
|---|---|---|
202 | Accepted. Events are written within seconds | Nothing |
200 | /insight (returns the new value) and log drains | Nothing |
401 | Missing or unknown key | Check the key, and that it hasn't been revoked |
402 | The organisation has no active plan | Choose a plan in Billing |
403 | The key lacks the scope for this endpoint, belongs to another project than the payload's project, or the project is paused | Read the message: it names the cause |
413 | Body over 1 MB (5 MB for log drains) | Send smaller batches |
422 | Invalid fields | The errors object names each field, such as events.3.channel |
429 | Rate limit or monthly allowance reached | See below |
Errors are JSON with a message, "type": "error", and for some a reason:
{
"message": "Rate limit of 5 requests per minute reached. Send events in batches with /v1/batch to send more at once.",
"type": "error",
"reason": "rate_limited",
"retry_after": 47
}Rate limits and allowances
- Requests: 5 a minute per project for events, users, groups and insights together, on every plan. A batch is one request. Over the limit:
429withreason: rate_limitedand aRetry-Afterheader in seconds. - Pageviews: limited per visitor address, separately from the project limit, so one busy visitor can't stop the rest of your traffic.
- Server requests: their own per-minute limit per project, 100 to 1,000 depending on the plan, and their own monthly allowance.
- Monthly allowance: over it,
429withreason: quota_exceeded(events) orhit_quota_exceeded(server requests). Waiting a minute won't help: upgrade or wait for the next billing period.
See pricing for every plan's numbers.
CORS
Every ingestion endpoint accepts requests from any origin, without credentials, so the browser script and your own front-end code can call it directly with an ingest key.