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.complete('id');
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.complete(
"id",
)
print(capture_session.id)curl --request POST \
--url https://api.indices.io/v1beta/capture_sessions/{id}/complete \
--header 'Authorization: Bearer <token>'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.indices.io/v1beta/capture_sessions/{id}/complete",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.indices.io/v1beta/capture_sessions/{id}/complete"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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/{id}/complete")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.indices.io/v1beta/capture_sessions/{id}/complete")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
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": {}
}
]
}Complete a capture session
Stop recording and finalize the capture session.
Completion is asynchronous: the browser uploads its recording and the session then transitions to completed. Poll retrieveCaptureSession to observe the transition.
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.complete('id');
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.complete(
"id",
)
print(capture_session.id)curl --request POST \
--url https://api.indices.io/v1beta/capture_sessions/{id}/complete \
--header 'Authorization: Bearer <token>'<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.indices.io/v1beta/capture_sessions/{id}/complete",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.indices.io/v1beta/capture_sessions/{id}/complete"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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/{id}/complete")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.indices.io/v1beta/capture_sessions/{id}/complete")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
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>
Path Parameters
The ID of the capture session to complete.
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"