ScreenshotAPI

Usage API

Endpoints for viewing screenshot logs and account usage statistics.

Screenshot Log

GET /api/v1/usage

Returns the screenshot request history for the authenticated user. Includes both successful and failed requests, ordered by creation date (newest first). Requires session authentication.

Query Parameters

ParameterTypeDefaultDescription
limitnumber50Number of entries to return
offsetnumber0Number of entries to skip (for pagination)

Response

[
  {
    "id": "scr_abc123def456",
    "url": "https://example.com",
    "status": "completed",
    "durationMs": 2340,
    "errorMessage": null,
    "createdAt": "2026-03-24T15:30:00.000Z"
  },
  {
    "id": "scr_ghi789jkl012",
    "url": "https://broken-site.invalid",
    "status": "failed",
    "durationMs": 5012,
    "errorMessage": "Navigation timeout of 30000ms exceeded",
    "createdAt": "2026-03-24T15:25:00.000Z"
  }
]

Fields

FieldTypeDescription
idstringUnique screenshot identifier
urlstringThe URL that was screenshotted
statusstring"completed" or "failed"
durationMsnumberTime taken in milliseconds
errorMessagestring | nullError description if the screenshot failed
createdAtstringISO 8601 timestamp

Example

curl "https://screenshotapi.to/api/v1/usage?limit=20&offset=0" \
  --cookie "session=your_session_cookie"
const params = new URLSearchParams({ limit: '20', offset: '0' })

const response = await fetch(
  `https://screenshotapi.to/api/v1/usage?${params}`,
  { credentials: 'include' }
)

const logs = await response.json()
logs.forEach(entry => {
  const status = entry.status === 'completed' ? '✓' : '✗'
  console.log(`${status} ${entry.url} (${entry.durationMs}ms)`)
})
import requests

response = requests.get(
    "https://screenshotapi.to/api/v1/usage",
    params={"limit": 20, "offset": 0},
    cookies={"session": "your_session_cookie"}
)

for entry in response.json():
    status = "✓" if entry["status"] == "completed" else "✗"
    print(f"{status} {entry['url']} ({entry['durationMs']}ms)")
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://screenshotapi.to/api/v1/usage?limit=20&offset=0", nil)
	req.AddCookie(&http.Cookie{Name: "session", Value: "your_session_cookie"})
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	var logs []struct {
		Status     string `json:"status"`
		URL        string `json:"url"`
		DurationMs int    `json:"durationMs"`
	}
	if err := json.NewDecoder(resp.Body).Decode(&logs); err != nil {
		log.Fatal(err)
	}
	for _, entry := range logs {
		status := "✗"
		if entry.Status == "completed" {
			status = "✓"
		}
		fmt.Printf("%s %s (%dms)\n", status, entry.URL, entry.DurationMs)
	}
}
require "net/http"
require "json"

uri = URI("https://screenshotapi.to/api/v1/usage?limit=20&offset=0")
req = Net::HTTP::Get.new(uri)
req["Cookie"] = "session=your_session_cookie"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
logs = JSON.parse(response.body)
logs.each do |entry|
  status = entry["status"] == "completed" ? "✓" : "✗"
  puts "#{status} #{entry['url']} (#{entry['durationMs']}ms)"
end
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => "https://screenshotapi.to/api/v1/usage?limit=20&offset=0",
    CURLOPT_COOKIE => "session=your_session_cookie",
    CURLOPT_RETURNTRANSFER => true,
]);
$logs = json_decode(curl_exec($ch), true);
curl_close($ch);

foreach ($logs as $entry) {
    $status = $entry['status'] === 'completed' ? '✓' : '✗';
    echo "{$status} {$entry['url']} ({$entry['durationMs']}ms)\n";
}

Usage Statistics

GET /api/v1/usage/stats

Returns aggregate usage statistics for the authenticated user. Requires session authentication.

Response

{
  "totalScreenshots": 1247,
  "last30Days": 342,
  "failedScreenshots": 18,
  "avgDurationMs": 2156
}

Fields

FieldTypeDescription
totalScreenshotsnumberTotal screenshots taken all time
last30DaysnumberScreenshots taken in the last 30 days
failedScreenshotsnumberTotal failed screenshots all time
avgDurationMsnumberAverage duration for successful screenshots in milliseconds

Example

curl "https://screenshotapi.to/api/v1/usage/stats" \
  --cookie "session=your_session_cookie"
const response = await fetch('https://screenshotapi.to/api/v1/usage/stats', {
  credentials: 'include'
})

const stats = await response.json()
console.log(`Total: ${stats.totalScreenshots}`)
console.log(`Last 30 days: ${stats.last30Days}`)
console.log(`Failed: ${stats.failedScreenshots}`)
console.log(`Avg duration: ${stats.avgDurationMs}ms`)
import requests

response = requests.get(
    "https://screenshotapi.to/api/v1/usage/stats",
    cookies={"session": "your_session_cookie"}
)

stats = response.json()
print(f"Total: {stats['totalScreenshots']}")
print(f"Last 30 days: {stats['last30Days']}")
print(f"Failed: {stats['failedScreenshots']}")
print(f"Avg duration: {stats['avgDurationMs']}ms")
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://screenshotapi.to/api/v1/usage/stats", nil)
	req.AddCookie(&http.Cookie{Name: "session", Value: "your_session_cookie"})
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	var stats struct {
		TotalScreenshots  int `json:"totalScreenshots"`
		Last30Days        int `json:"last30Days"`
		FailedScreenshots int `json:"failedScreenshots"`
		AvgDurationMs     int `json:"avgDurationMs"`
	}
	if err := json.NewDecoder(resp.Body).Decode(&stats); err != nil {
		log.Fatal(err)
	}
	fmt.Printf("Total: %d\n", stats.TotalScreenshots)
	fmt.Printf("Last 30 days: %d\n", stats.Last30Days)
	fmt.Printf("Failed: %d\n", stats.FailedScreenshots)
	fmt.Printf("Avg duration: %dms\n", stats.AvgDurationMs)
}
require "net/http"
require "json"

uri = URI("https://screenshotapi.to/api/v1/usage/stats")
req = Net::HTTP::Get.new(uri)
req["Cookie"] = "session=your_session_cookie"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http| http.request(req) }
stats = JSON.parse(response.body)
puts "Total: #{stats['totalScreenshots']}"
puts "Last 30 days: #{stats['last30Days']}"
puts "Failed: #{stats['failedScreenshots']}"
puts "Avg duration: #{stats['avgDurationMs']}ms"
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => "https://screenshotapi.to/api/v1/usage/stats",
    CURLOPT_COOKIE => "session=your_session_cookie",
    CURLOPT_RETURNTRANSFER => true,
]);
$stats = json_decode(curl_exec($ch), true);
curl_close($ch);

echo "Total: {$stats['totalScreenshots']}\n";
echo "Last 30 days: {$stats['last30Days']}\n";
echo "Failed: {$stats['failedScreenshots']}\n";
echo "Avg duration: {$stats['avgDurationMs']}ms\n";

Use Cases

  • Dashboard widgets — Display usage at a glance.
  • Monitoring — Track failure rates and alert on spikes.
  • Cost estimation — Use last30Days to project future credit usage.
  • Performance tracking — Monitor avgDurationMs over time to detect regressions.

On this page