MessagePipedocs
API Reference

Rate limits

Per-key send rate, burst, and how to back off cleanly.

The Send API is rate-limited per API key. The defaults are generous enough that you'll only notice during traffic spikes, but every integration should handle a 429 gracefully.

Defaults

PlanSends / secondBurstBulk per request
Free525100
Pro502501,000
Scale5002,50010,000
EnterpriseContact usn/an/a

Need higher? Email hello@messagepipe.dev.

What you get back

HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 50
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1735776000
Retry-After: 2
Content-Type: application/json

{ "error": { "code": "rate_limit_exceeded", ... } }
  • X-RateLimit-Limit: your per-second budget.
  • X-RateLimit-Remaining: how many you can still spend this window.
  • X-RateLimit-Reset: Unix epoch seconds when the window resets.
  • Retry-After: the number of seconds to wait before retrying. Always present on a 429 rate_limit_exceeded response.

Backoff

Implement exponential backoff with full jitter, capped by Retry-After. Pseudocode:

const base = 100;     // ms
const cap  = 30_000;  // ms
let attempt = 0;

while (true) {
  const res = await fetch(url, opts);
  if (res.status !== 429) return res;
  const retry = Number(res.headers.get("Retry-After") ?? 0) * 1000;
  const expo  = Math.min(cap, base * 2 ** attempt++);
  const delay = Math.max(retry, Math.random() * expo);
  await new Promise((r) => setTimeout(r, delay));
}

The official SDKs do this for you.