import Indices from 'indicesio';
const client = new Indices({
apiKey: process.env['INDICES_API_KEY'], // This is the default and can be omitted
});
const captureSession = await client.beta.captureSessions.create();
console.log(captureSession.id);import os
from indices import Indices
client = Indices(
api_key=os.environ.get("INDICES_API_KEY"), # This is the default and can be omitted
)
capture_session = client.beta.capture_sessions.create()
print(capture_session.id)curl --request POST \
--url https://api.indices.io/v1beta/capture_sessions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"use_proxy": false,
"cookies": [
{
"name": "<string>",
"value": "<string>",
"domain": "<string>",
"path": "<string>",
"secure": true,
"http_only": true
}
]
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.indices.io/v1beta/capture_sessions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'use_proxy' => false,
'cookies' => [
[
'name' => '<string>',
'value' => '<string>',
'domain' => '<string>',
'path' => '<string>',
'secure' => true,
'http_only' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.indices.io/v1beta/capture_sessions"
payload := strings.NewReader("{\n \"use_proxy\": false,\n \"cookies\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\",\n \"domain\": \"<string>\",\n \"path\": \"<string>\",\n \"secure\": true,\n \"http_only\": true\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.indices.io/v1beta/capture_sessions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"use_proxy\": false,\n \"cookies\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\",\n \"domain\": \"<string>\",\n \"path\": \"<string>\",\n \"secure\": true,\n \"http_only\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.indices.io/v1beta/capture_sessions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"use_proxy\": false,\n \"cookies\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\",\n \"domain\": \"<string>\",\n \"path\": \"<string>\",\n \"secure\": true,\n \"http_only\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "cap_0R3kPq8mWxYz1aBcDeFgHi",
"state": "active",
"browser_session_id": "<string>",
"iframe_url": "<string>",
"created_at": "2026-01-01T12:00:00Z",
"updated_at": "2026-01-06T12:05:00Z"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Start a capture session
Spawn a browser session that records the network traffic of everything done in it.
Once completed, the capture session is a reusable recording: attach it to a task to generate an API from it.
import Indices from 'indicesio';
const client = new Indices({
apiKey: process.env['INDICES_API_KEY'], // This is the default and can be omitted
});
const captureSession = await client.beta.captureSessions.create();
console.log(captureSession.id);import os
from indices import Indices
client = Indices(
api_key=os.environ.get("INDICES_API_KEY"), # This is the default and can be omitted
)
capture_session = client.beta.capture_sessions.create()
print(capture_session.id)curl --request POST \
--url https://api.indices.io/v1beta/capture_sessions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"use_proxy": false,
"cookies": [
{
"name": "<string>",
"value": "<string>",
"domain": "<string>",
"path": "<string>",
"secure": true,
"http_only": true
}
]
}
'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.indices.io/v1beta/capture_sessions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'use_proxy' => false,
'cookies' => [
[
'name' => '<string>',
'value' => '<string>',
'domain' => '<string>',
'path' => '<string>',
'secure' => true,
'http_only' => true
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.indices.io/v1beta/capture_sessions"
payload := strings.NewReader("{\n \"use_proxy\": false,\n \"cookies\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\",\n \"domain\": \"<string>\",\n \"path\": \"<string>\",\n \"secure\": true,\n \"http_only\": true\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.indices.io/v1beta/capture_sessions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"use_proxy\": false,\n \"cookies\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\",\n \"domain\": \"<string>\",\n \"path\": \"<string>\",\n \"secure\": true,\n \"http_only\": true\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.indices.io/v1beta/capture_sessions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"use_proxy\": false,\n \"cookies\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\",\n \"domain\": \"<string>\",\n \"path\": \"<string>\",\n \"secure\": true,\n \"http_only\": true\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "cap_0R3kPq8mWxYz1aBcDeFgHi",
"state": "active",
"browser_session_id": "<string>",
"iframe_url": "<string>",
"created_at": "2026-01-01T12:00:00Z",
"updated_at": "2026-01-06T12:05:00Z"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Enter your API key as the bearer token. Set header: Authorization to Bearer <api_key>
Body
Response
Successful response
Unique identifier for the capture session.
"cap_0R3kPq8mWxYz1aBcDeFgHi"
Current state of the capture session. A session records while active, is completing once completion is requested, and becomes a reusable recording once completed.
active, completing, completed, abandoned, failed "active"
Opaque identifier for the spawned browser session. Null once the browser is gone.
URL to embed in an iframe to control the browser. Only usable while the session is active.
Timestamp when the object was created.
"2026-01-01T12:00:00Z"
Timestamp when the object was last updated.
"2026-01-06T12:05:00Z"