During the public beta OpenWAF Browsers is free within the quota below. These are the defaults for every organization. An operator can adjust them for yours: write to support@openwaf.dev.
Quota per organization
| Item | Default | Counted as |
|---|---|---|
| Browser-hours | 20 per month | Time of every browser from the moment Chrome is ready until it stops, idle time included; start-up time is not counted |
| Egress | 5 GB per month | Bytes uploaded plus bytes downloaded through the egress proxy (1 GB = 10⁹ bytes) |
| Concurrent browsers | 2 per key | Browsers running at the same time with one key |
| Session length | 60 minutes | Per browser, then it stops |
| Keys | 5 | Keys of the organization |
GET /v1/orgs/{org}/browsers returns the quota in quota and the month to date in usage. The dashboard shows both on Browsers → Overview.
The monthly cycle
- The month is a calendar month in UTC. It starts on the 1st at 00:00 UTC.
period.startandperiod.endgive the exact bounds. - At 80 % of browser-hours or of egress,
warningturnstrueand the dashboard shows a warning. Nothing stops. - At 100 % of either, every key of the organization is disabled and its running browsers stop.
statusbecomesquota_exceededand the keys showdisabled: true. New browsers are refused with401. - On the 1st of the next month at 00:00 UTC the keys are enabled again automatically. You do not need to do anything.
Usage is collected every minute, so the figures in the dashboard and the API lag by up to about two minutes. For the same reason, browsers can keep running for up to about two minutes past 100 % before they are stopped.
Browser lifetime
| Item | Value |
|---|---|
| Idle timeout | 120 seconds with no CDP or live view client, unless you set timeout or keepAlive |
| Maximum session length | 60 minutes |
| CDP and live view tokens | 1 hour; GET /v1/browsers/{id} returns fresh ones |
| Session files (recordings, downloads) | Kept 7 days after the browser stops |
| Profiles | One browser at a time; deleting one in use answers 409 |
Closing the CDP connection does not stop a browser. Stop it with PATCH /v1/browsers/{id} {"action": "stop"} so it does not count idle time.
Shared capacity
In the beta, all organizations share the browser nodes: up to 5 browsers run at the same time across the service. When they are all busy, POST /v1/browsers answers 429 with {"code": "capacity_busy"} and Retry-After: 30. Wait and retry: it does not count against your quota. capacity in the overview shows the current state (max_sessions, running, busy).
This is different from your own limit of 2 browsers per key, which answers 429 with {"code": "key_concurrency"}.
Egress rules
Every request of the browser goes through the egress proxy:
- Ports 80 and 443 only.
- Always denied, whatever the settings: private addresses (RFC 1918), loopback, link-local (including the cloud metadata address
169.254.169.254), CGNAT (100.64.0.0/10), multicast, documentation and other special-purpose ranges, and their IPv6 equivalents. The proxy resolves the names itself; if any address of a name is denied, the name is denied. - Open mode (the default) allows any other public host. Allowlist mode allows only the hosts an admin lists:
example.comfor that host,*.example.comfor its subdomains, up to 100 entries. - Every request is logged: time, key, browser, method, host, port, decision, reason, status, bytes and duration. Read it with
GET /v1/browsers/{id}/egress, the organization egress log or Browsers → Egress log.
The browser cannot reach your own machine or private network. To test a site that is not public, publish it on a public host name first.
Location
Browsers, recordings, downloads and logs are hosted in the EU, in Germany.