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 validate rule 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 only timeout_ms (the total budget).
  • Redirects: toggle and set followRedirects (0-20). Single, Proxy, Auto. Browser follows redirects on its own.
  • Flags: unblocker, tryJsonData, returnBuffer for Single and Proxy. Auto exposes forceProxy and returnSession instead.
  • Proxy: pick a specific proxy ID for Single or Browser, or set maxTries, the Proxy outer timeout, and ignoreProxies for the Proxy engine. Auto also exposes ignoreProxies.
  • Browser: browser-only options such as checkStatus and checkText.
  • Validate: validate.status (status codes), validate.headers (header key-value rules), and validate.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.
Last updated: June 30, 2026