Try it
Check what a site shows in another country, test a page without exposing your own IP, or try cdpfleet's browsers by hand. With an API key the tab stays open longer, can be shared with someone by link, and hands its cookies back to your code.
The same from code
POST /v1/functions/livetab with your API key returns application/json — more options than here, such as your own proxy or a browser of your choice. All live tab fields.
curl -s https://cdpfleet.com/v1/functions/livetab \
-H "x-api-key: $CDPFLEET_API_KEY" -H "content-type: application/json" \
-d '{"url":"https://example.com/","country":"de","max_duration":900}' -o livetab.json -D - | grep -i '^x-call-id'
// Node.js 18+: save as livetab.mjs, run node livetab.mjs
const res = await fetch('https://cdpfleet.com/v1/functions/livetab', {
method: 'POST',
headers: { 'x-api-key': process.env.CDPFLEET_API_KEY, 'content-type': 'application/json' },
body: JSON.stringify({
url: 'https://example.com/',
country: 'de',
max_duration: 900,
}),
signal: AbortSignal.timeout(30000),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`); // 429: wait Retry-After seconds
const { live_url } = await res.json();
console.log(live_url); // open it in any browser: anyone with the link can use the tab
# Python 3 with requests (pip install requests): save as livetab.py, run python livetab.py
import os
import requests
r = requests.post(
"https://cdpfleet.com/v1/functions/livetab",
headers={"x-api-key": os.environ["CDPFLEET_API_KEY"]},
json={
"url": "https://example.com/",
"country": "de",
"max_duration": 900,
},
timeout=30,
)
if not r.ok:
raise SystemExit(f"{r.status_code} {r.text}") # 429: wait r.headers["Retry-After"] seconds
print(r.json()["live_url"]) # open it in any browser: anyone with the link can use the tab
// Java 17+: save as Main.java, run java -cp gson-2.11.0.jar Main.java (Gson: com.google.code.gson:gson)
import com.google.gson.JsonParser;
import java.net.URI;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
public class Main {
public static void main(String[] args) throws Exception {
String body = """
{
"url": "https://example.com/",
"country": "de",
"max_duration": 900
}
""";
HttpResponse<byte[]> res = HttpClient.newHttpClient().send(
HttpRequest.newBuilder(URI.create("https://cdpfleet.com/v1/functions/livetab"))
.header("x-api-key", System.getenv("CDPFLEET_API_KEY"))
.header("content-type", "application/json")
.timeout(Duration.ofSeconds(30))
.POST(HttpRequest.BodyPublishers.ofString(body))
.build(),
HttpResponse.BodyHandlers.ofByteArray());
if (res.statusCode() != 200) { // 429: wait Retry-After seconds
throw new RuntimeException(res.statusCode() + " " + new String(res.body()));
}
String liveUrl = JsonParser.parseString(new String(res.body(), StandardCharsets.UTF_8)).getAsJsonObject().get("live_url").getAsString();
System.out.println(liveUrl); // open it in any browser: anyone with the link can use the tab
}
}
// .NET 8+: dotnet new console, replace Program.cs with this, run dotnet run
using System.Text;
using System.Text.Json;
using var http = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
http.DefaultRequestHeaders.Add("x-api-key", Environment.GetEnvironmentVariable("CDPFLEET_API_KEY"));
var body = """
{
"url": "https://example.com/",
"country": "de",
"max_duration": 900
}
""";
var res = await http.PostAsync("https://cdpfleet.com/v1/functions/livetab",
new StringContent(body, Encoding.UTF8, "application/json"));
if (!res.IsSuccessStatusCode) // 429: wait Retry-After seconds
throw new Exception($"{(int)res.StatusCode} {await res.Content.ReadAsStringAsync()}");
using var json = JsonDocument.Parse(await res.Content.ReadAsStringAsync());
Console.WriteLine(json.RootElement.GetProperty("live_url").GetString()); // open it in any browser: anyone with the link can use the tab
// Go 1.21+: save as main.go, run go run main.go
package main
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"os"
"strings"
"time"
)
func main() {
body := `{
"url": "https://example.com/",
"country": "de",
"max_duration": 900
}`
req, _ := http.NewRequest("POST", "https://cdpfleet.com/v1/functions/livetab", strings.NewReader(body))
req.Header.Set("x-api-key", os.Getenv("CDPFLEET_API_KEY"))
req.Header.Set("content-type", "application/json")
res, err := (&http.Client{Timeout: 30 * time.Second}).Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
data, err := io.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
if res.StatusCode != http.StatusOK { // 429: wait Retry-After seconds
log.Fatalf("%s %s", res.Status, data)
}
var tab struct {
LiveURL string `json:"live_url"`
}
if err := json.Unmarshal(data, &tab); err != nil {
log.Fatal(err)
}
fmt.Println(tab.LiveURL) // open it in any browser: anyone with the link can use the tab
}
Free tool limits
- 20 runs a day and 2 at once per address, after a quick Cloudflare check.
- Runs on a shared cdpfleet browser through the free Community proxy in the country you pick; at busy times a run can take longer or ask you to retry.
- Public pages only: private and local addresses are refused. Up to 60 seconds per page.
- For more — your own threads, your own or residential proxies, any browser and phone devices — call the same functions with an API key; the Community plan is free, and paid plans add more.