Limits & errors

Free-plan quotas, rate limits, and the error envelope.

Free-plan limits

LimitValue
notifications / day250 (resets midnight UTC)
requests / minute / key120
devices2
API keys / project3
request body32 KB

Errors

Errors always use one envelope, and rate limits include a Retry-After header:

{
  "error": {
    "code": "quota_exceeded",
    "message": "Daily notification limit of 250 reached",
    "details": { "reset_at": "2026-08-09T00:00:00.000Z" }
  }
}

Common codes:

CodeMeaning
unauthorizedmissing, wrong, revoked or expired credential
forbiddenauthenticated but not allowed (e.g. missing permission)
not_foundresource doesn't exist — or isn't yours
validation_errorrequest shape rejected; details lists fields
rate_limitedburst limit hit; retry after Retry-After seconds
quota_exceededdaily quota reached; details.reset_at says when
idempotency_conflictsame Idempotency-Key racing a concurrent request
invalid_jsonbody wasn't parseable JSON

API reference

A machine-readable OpenAPI spec for the public endpoints lives at api.stdpush.com/docs.

On this page