Playground
The Playground (sidebar > Playground) lets you run live API requests against your real key without writing any code. It's the fastest way to try a new target site, debug a tricky response, or compare Auto, Single, Proxy, and Browser side by side.
Open it at foura.ai/dashboard#playground.
What It Does
One form. Four engines. Real traffic.
- Auto: smart fetch. You pass a URL plus a
validaterule and FourA picks the cheapest path that works. - Single: direct HTTP fetch with realistic browser-like wire characteristics
- Proxy: managed rotating proxy fetch
- Browser: opens the URL in a Chrome browser instance for JS-rendered sites
Requests run against the API key you pick at the top of the page. Usage counts against that key's quota the same way a production call would, so don't burn through your plan in testing.
Picking a Key
The API key dropdown shows every active key within your scope: personal keys, org keys you administer, and team-shared keys you can access. Pick the one you want the request to bill against. If you don't have any active keys yet, an inline prompt links you to the API Keys page to create one.
Choosing a Mode
A top Mode row toggles between Auto and the manual engines. When Auto is selected, the form switches to the minimal Auto surface (URL plus validate plus a few knobs). When you switch off Auto, three pills appear: Single, Proxy, Browser. Switching pills swaps which fields are visible and which engine the request hits. The current selection is preserved when you reload the page.
| Mode | When to use it |
|---|---|
| Auto | New target or mixed-protection site. Auto picks the cheapest path and remembers what works. |
| Single | Fast HTTP fetch. Best first pick for a known host. |
| Proxy | Same fetch with automatic proxy rotation. Use when Single keeps getting blocked. |
| Browser | Loads the page in a Chrome browser instance. Use when the data appears only after JavaScript runs. |
Building the Request
URL Row
The top row holds the HTTP method (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS), the target URL, and the Send button. Single, Proxy, and Auto honor every method. Browser ignores the method (Chrome always issues GET for navigation) and the body.
Request Tabs
Below the URL row, five tabs let you fill in everything else:
| Tab | What it controls |
|---|---|
| UI | Form fields for timeouts, redirects, flags, proxy, browser-specific options, and validate rules |
| Body | Free-form body for POST / PUT / PATCH requests |
| Headers | Custom request headers as key-value pairs |
| Cookies | Cookies to send with the request |
| Raw | The exact JSON payload that will be sent, editable directly |
Whatever you change in UI / Body / Headers / Cookies is reflected in Raw. Editing Raw works too, with the other tabs updating to match.
UI Pane Sections
The UI tab groups settings into collapsible sections. Empty fields fall back to the engine's schema default. Sections that don't apply to the current Mode are hidden.
- Timeouts:
timeout_ms,connect_timeout_ms,accept_timeout_ms,server_response_timeout_ms,dns_cache_timeout_sec. Auto exposes onlytimeout_ms(the total budget). - Redirects: toggle and set
followRedirects(0-20). Single, Proxy, Auto. Browser follows redirects on its own. - Flags:
unblocker,tryJsonData,returnBufferfor Single and Proxy. Auto exposesforceProxyandreturnSessioninstead. - Proxy: pick a specific proxy ID for Single or Browser, or set
maxTries, the Proxy outer timeout, andignoreProxiesfor the Proxy engine. Auto also exposesignoreProxies. - Browser: browser-only options such as
checkStatusandcheckText. - Validate:
validate.status(status codes),validate.headers(header key-value rules), andvalidate.data(body accept / fail substrings,|-separated alternatives) accept / fail rules. Available for every Mode, including Auto.
Toolbar Reset
The Reset button on the toolbar (next to History) wipes the active product's form back to defaults. The defaults keep unblocker and tryJsonData on, which match the most common starting point. Use it when you've drifted far from a working baseline and want a clean slate without reloading the page.
Sending and Canceling
Click Send to fire the request. The right column flips to a loading state with a spinner and a Cancel button while the call is in flight. Click Cancel (or hit the button again on mobile) to abort. A canceled request restores the idle placeholder with "Request canceled." instead of rendering an error.
The response card switches to the result the moment the request completes (or fails). Auto runs can take longer than the manual engines because the ladder may climb several rungs on a cold target.
Reading the Response
The response column mirrors the request layout with its own tabs:
| Tab | What it shows |
|---|---|
| Body | Parsed body. Switches between JSON, HTML, and Text views depending on what came back. |
| Headers | Response headers, one per line. |
| Cookies | Cookies returned by the target, in both parsed (host-grouped) and raw (Set-Cookie text) views. The parsed view shows an HO badge on host-only cookies; domain cookies are unmarked. |
| Raw | The full JSON envelope returned by the API. |
A meta strip above the tabs shows the upstream HTTP status, the total time, and the proxy ID that handled the call. For Auto runs, the strip also shows which ladder rung delivered the response, how many sub-attempts were made, and the credits spent.
Carry Auto's Session
After an Auto run that returned a session, a small row under the response lets you carry session.proxy, session.cookies, and session.userAgent into the Single, Proxy, or Browser tab in one click. Use this to switch to manual control after Auto has done the discovery for you, without copying values by hand.
Expand to Full Screen
The expand icon on the response toolbar lifts the response card out of the split layout and into a full-screen overlay. Use it for deep JSON trees, long Set-Cookie dumps, or wide HTML bodies where the half-width column gets cramped. The page itself stops scrolling while the overlay is open. Click the icon again (or press Escape) to collapse.
The curl Reproducer
Below the response, a curl block shows the exact command line equivalent of the request you just built. Copy it to repro the request from a terminal, share it with a teammate, or paste it into a bug report.
For revealable keys, a Reveal key button next to the snippet drops the real plain-text key straight into the curl so you can copy-and-run as is. Click again to hide. Legacy keys (created before the reveal feature shipped) keep a PASTE_PLAINTEXT_FOR_<key-name> placeholder; regenerate the key from the API Keys page to make it revealable.
The reveal is audit-logged on the server every time, and the plain key only lives in memory for the current page session.
Saving Presets
If you find yourself reconfiguring the same target repeatedly, save it. Click Save on the request tabs row to store the current configuration as a named preset.
Open Saved in the toolbar to browse, rename, or delete your presets. Click any preset to load it back into the form.
| Preset field | What it stores |
|---|---|
| Name | A short label (up to 100 characters) |
| Description | Optional notes (up to 500 characters) |
| Endpoint | Which engine the preset is for (auto / single / proxy / browser) |
| Config | The full request payload, including UI fields, headers, cookies, and body |
Presets are scoped to your user account and aren't shared with team members.
Replaying from History
Every request you run is logged. Open History in the toolbar to see your last 20 runs, sorted newest first.
Each row shows the endpoint, target URL, status, and time. Click Replay on any row to load that request back into the form, then Send to run it again.
History is automatically scoped to your account: you only see your own runs.
Opening from Activity
The Activity Log detail dialog has an Open in Playground button. Click it and the Playground loads with both the archived request and the archived response. The form fills in from the stored payload, and the response card shows what the API returned at that moment with an "archived" badge on the proxy meta strip ("archived
From there you can change a parameter and hit Send to run a new request against the live API, or just inspect the archived payload without re-running it. Payloads are kept for 24 hours, so older Activity rows won't have a reloadable response.
Tips
- Start in Playground before writing code against a new target. With Auto on, you'll know within seconds whether a cheap fetch is enough or whether the site forces a browser solve.
- Save a preset for every target you scrape regularly. Replaying a saved preset takes one click; reconstructing the request from memory takes longer.
- Use the Cookies tab to debug session-based scraping. The raw Set-Cookie view shows exactly what the target sent.
- Playground requests are billed against the key you pick. Use a dedicated low-quota key for casual exploration if you want to keep production usage clean.
Related
- API Endpoints: Full parameter reference for all four engines
- Smart Fetch (Auto): What Auto does under the hood
- Choosing the Right Endpoint: When to pick Auto vs Single vs Proxy vs Browser
- API Keys: Manage the keys you authenticate Playground requests with
- Activity Log: Open a past request straight into Playground
- Dashboard Overview: All sidebar sections