Plans & Limits
Request quotas, data retention windows, rate limits, and endpoint limits for webhooks.cc. Compare the free, pro, and teams plans side by side with exact numbers, billing periods, and upgrade paths.
Updated Aug 2026
Plans overview
| Plan | Requests | Period | Retention | Endpoints | Price |
|---|---|---|---|---|---|
| Guest | 25 | 12 hours | 12 hours | Ephemeral only (12hr TTL) | Free (no signup) |
| Free | 50 | 24 hours | 7 days | Unlimited, never expire | Free |
| Pro | 100,000 | 30 days | 31 days | Unlimited, never expire | $8/month |
| Teams | 100,000 per seat | 30 days | 31 days | Endpoints shared to the team | $12/seat/month |
Every feature — webhook capture, inspection, replay, mock responses, CLI tunneling, SDK, and MCP server — works on both Free and Pro.
Teams is a separate, per-team subscription rather than a tier of your personal plan. Any account (Free or Pro) can create a team, and the team's own subscription decides what it can do. See Teams and shared endpoints below.
Endpoints created by logged-in users (Free or Pro) never expire. They persist until you explicitly delete them from the dashboard, CLI, SDK, or API. Only ephemeral endpoints -- created without an account or explicitly marked ephemeral -- auto-delete after 12 hours.
How billing periods work
Guest — no account required. Ephemeral endpoints auto-delete after 12 hours along with all captured requests. Each ephemeral endpoint has a 25-request cap.
Free — billing periods activate lazily. Your 24-hour window starts when your first webhook request is captured, not when you sign up. Once the period expires, the counter resets and the next request starts a new 24-hour window.
Pro — 30-day rolling billing periods. The counter resets automatically at the end of each period. Canceled subscriptions remain active until the current period ends, then downgrade to Free.
Teams — 30-day rolling periods on the team itself, starting when the team subscribes. The team's pooled counter resets at the end of each period. A canceled team subscription stays active until the period ends, then the team is suspended.
Request quotas
Quotas limit how many webhook requests your endpoints can capture within a billing period. When your quota is exhausted, the receiver returns 429 Too Many Requests with a Retry-After header indicating when the quota resets.
Quotas are enforced atomically inside a single Postgres stored procedure — no race conditions, even under high concurrency.
sendTo calls that send webhooks directly to your handler URL do not count toward your quota.
Only requests routed through your webhooks.cc endpoint are counted.
Data retention
Captured requests are cleaned up automatically based on your plan:
- Free — requests older than 7 days are deleted daily at 01:30 UTC
- Pro — requests older than 31 days are deleted daily at 01:00 UTC
- Team-billed — requests captured on an endpoint shared with an active team are kept for 31 days, even when the endpoint owner is on Free
- Ephemeral — requests are deleted when the endpoint expires (12 hours after creation)
Deleted requests cannot be recovered. Export important requests as JSON or CSV from the dashboard before they expire.
Teams and shared endpoints
Teams are billed per team at $12/seat/month. Any account can create a team, but the team stays inert until its owner subscribes — the subscription, not anyone's personal plan, is what activates it.
Seats decide two things:
- The member cap — a team can hold exactly as many members as it has purchased seats (the owner occupies one). Adding a member beyond that means buying another seat first.
- The request pool — each seat adds 100,000 requests per 30-day period to a single pool shared by the whole team.
Whose quota gets used. Once an endpoint is shared with a team that has an active subscription, its captured requests draw from that team's pool instead of the endpoint owner's personal quota, and they are retained for 31 days regardless of the owner's plan. If an endpoint is shared with several active teams, the oldest share is billed — never more than one team per request. Endpoints that are not shared with an active team keep counting against their owner's own quota and retention.
When the pool is exhausted, the receiver returns 429 Too Many Requests with a Retry-After pointing at the team's period reset.
Without an active subscription (never subscribed, or canceled and past the period end) a team is suspended: its data is kept, but invites, endpoint sharing, and member access to shared endpoints are all blocked until it subscribes again. Requests captured while a team is suspended fall back to the endpoint owner's personal quota.
Rate limits
API routes enforce per-IP rate limits to prevent abuse. When a limit is exceeded, the API returns 429 Too Many Requests with a Retry-After header.
| Action | Limit | Window |
|---|---|---|
| Create endpoint | 30 | 10 minutes |
| Create ephemeral endpoint (guest) | 20 | 10 minutes |
| Send test webhook | 30 | 1 minute |
| Search requests | 60 | 10 minutes |
| Search count | 120 | 10 minutes |
| Device auth flows | 10 | 1 minute |
| Create team | 10 | 10 minutes |
| Send team invite | 20 | 10 minutes |
| Share endpoint with team | 30 | 10 minutes |
Other limits
| Resource | Limit |
|---|---|
| API keys per user | 10 |
| API key default TTL | 365 days |
| Mock response delay | 30,000ms (30 seconds) |
| Test webhook body size | 1 MB |
| Paginated request listing | 100 per page |
| Ephemeral endpoints (per user) | 25 concurrent |
| SSE stream connection | 30 minutes max |
| SSE keepalive interval | 30 seconds |
| Teams owned per user | 10 |
| Members per team | = purchased seats |
| Seats per team | 1,000 |