Plans, limits and the paid beta
The two plans, the numbers the relay enforces, how to see your usage, and how the paid beta of the hosted service admits Pro users.
Plans
| Free | Pro | |
|---|---|---|
| Agents | 1 | 3 |
| Wakes per day | 10 | no daily cap |
| Wakes per month | 150 | 5000 |
The numbers are constants of the relay; a self-hosted relay uses the same values:
MAX_AGENTS_FREEMAX_AGENTS_PROMAX_WAKES_FREE_DAILYMAX_WAKES_FREEMAX_WAKES_PRO
One agent covers the whole LAN, so one board is enough to wake many computers behind the same router.
What is counted
- Agents. Registering an agent over the limit answers
400with the message below. A virtual (emulator) agent counts like any other.Agent limit reached (N for <plan> plan). Upgrade to Pro. - Wakes. The relay counts a wake when the agent confirms a real wake. It reads one flag in the header of the encrypted frame to know that a frame is a wake, so
pingandinfoare never blocked or counted. The daily counter resets at midnight UTC. - Monthly figure.
monthly_limitis reported by/limits; the relay's own check on the WebSocket is the daily one. - Over the daily limit. The relay answers on the WebSocket with the message below (
retry_afteris the seconds until midnight UTC).{"type": "error", "code": "WAKE_LIMIT", "retry_after": <seconds>} - Command rate. Separately from the plan, an agent accepts 10 commands per minute ( Limits and errors ).
See your usage
A request to /api/v1/limits with your token returns the plan and the counters:
GET /api/v1/limits
Authorization: Bearer pat_…
{ "plan": "free",
"agents": { "used": 1, "limit": 1 },
"wakes": { "today": 3, "daily_limit": 10, "daily_remaining": 7, "monthly_limit": 150 },
"text": "Free · agents 1/1 · wakes today 3/10" }When there is no daily cap:
daily_limitis0daily_remainingisnull
The dashboard and the app show the same numbers.
The paid beta
The hosted relay admits Pro users in a limited paid beta. The reason is arithmetic, not marketing: until the business is registered, the revenue per calendar quarter has to stay under a legal limit, and the relay enforces a budget derived from it. Free users are never affected.
1 Look at the seats
GET /api/v1/beta/status is public. It reports the total, taken and remaining seats, and whether applications are open. The Pricing page shows the same. 2 Apply
POST /api/v1/beta/apply. While there is room the application is accepted at once and a seat is reserved. Otherwise the answer is 409 with the reason seats_full or quarter_budget_used. When the beta is off on the relay the answer is not_needed. 3 Pay
Applications also close when the money actually received in the quarter reaches the budget. A new quarter starts with an empty ledger.
POST /api/v1/admin/users/{user_id}/plan). For operators of a relay
The paid beta is off by default: WAKELINK_PAID_BETA_ENABLED is false, so a self-hosted relay has no seats and no budget, and the plan limits above still apply. The settings are:
WAKELINK_PAID_BETA_QUARTER_LIMIT_PLNWAKELINK_PAID_BETA_USE_RATIOWAKELINK_PAID_BETA_PRICE_EUR_MONTHWAKELINK_PAID_BETA_EUR_PLNWAKELINK_PAID_BETA_RESERVATION_DAYS
The billing service is a separate component (Stripe keys, a price id, the shared WAKELINK_BILLING_SECRET); see its README in web/billing-ee and Self-Hosted Server .
- Limits and errors — the codes behind
WAKE_LIMITandRATE_LIMITED - Self-Hosted Server — turn the beta on or leave it off