> ## Documentation Index
> Fetch the complete documentation index at: https://docs.peeng.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Log Ingestion Rate Limits and How to Stay Under Them

> Peeng enforces 100 requests per 60-second window per API key. Learn how 429s work, how batching multiplies throughput, and when to contact support.

Ingestion requests to `POST /v1/logs` are rate-limited **per API key**, not per IP address. That means sharing an IP with other services — for example, multiple applications behind the same NAT gateway — never affects your quota, and the limit travels with the key no matter where it is used. The default limit is **100 requests per 60-second sliding window** per key.

## When you hit the limit

When you exceed 100 requests in a 60-second window, Peeng responds with a `429`:

```json theme={null}
{
  "statusCode": 429,
  "message": "Too Many Requests",
  "error": "Too Many Requests"
}
```

A `429` is always retryable — it is a transient condition, not a permanent failure. Both the JavaScript and Python SDKs detect it automatically and back off with exponential backoff before retrying. If you are calling the HTTP API directly, check for a `Retry-After` header in the response and honor it if present; if the header is absent, fall back to exponential backoff. See [Errors](/essentials/errors) for a full breakdown of retryable vs. non-retryable status codes.

<Note>
  The rate limit is a **request-count** limit, not a log-entry-count limit. A single request can carry up to 500 log entries and still counts as just one request against your quota. Effective throughput is therefore much higher than the raw 100 req/min figure suggests — up to 50,000 log entries per minute on the default plan.
</Note>

## Staying under the limit

Follow these practices in order of impact:

1. **Batch your logs.** One request carrying 100 log entries consumes the same quota as one request carrying a single entry. Both SDKs buffer log calls in memory and flush automatically once the buffer reaches `maxBatchSize` (default: 100 entries, maximum: 500 entries). Let the SDK batch on your behalf rather than sending each log call as its own request.

2. **Do not disable the SDK's background batching.** Calling `flush()` after every individual `log()` call opts back into one-request-per-log behavior and eliminates the batching benefit entirely. Reserve explicit `flush()` calls for graceful shutdown or other intentional drain points — not for every log line.

<Info>
  If your traffic genuinely needs a higher request limit than the default allows, reach out to Peeng support to discuss a limit increase. Rate limits are not self-serve adjustable from the dashboard.
</Info>
