ScreenshotAPI

Credits

Understand the credit-based pricing system, purchase credit packs, and configure auto top-up.

How Credits Work

ScreenshotAPI uses a simple credit-based pricing model:

  • 1 screenshot = 1 credit
  • Credits are deducted only for successful screenshots
  • Failed requests are never charged
  • Credits never expire
  • New accounts receive 200 free screenshots per month, and that included allowance resets at the start of each billing period (the first of the month on the free plan)
  • Your plan's included allowance is always used first; credit packs are only drawn on after it runs out for the current period

This means you only pay for what you use — flexible subscriptions and pay-as-you-go credit packs, no overage fees, and no wasted spend.

Checking Your Balance

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

const { balance } = await response.json()
console.log(`Remaining credits: ${balance}`)
import requests

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

balance = response.json()["balance"]
print(f"Remaining credits: {balance}")
req, _ := http.NewRequest("GET", "https://screenshotapi.to/api/v1/credits", 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 result struct{ Balance int }
json.NewDecoder(resp.Body).Decode(&result)
fmt.Printf("Remaining credits: %d\n", result.Balance)
require "net/http"
require "json"

uri = URI("https://screenshotapi.to/api/v1/credits")
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)
}

balance = JSON.parse(response.body)["balance"]
puts "Remaining credits: #{balance}"
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => "https://screenshotapi.to/api/v1/credits",
    CURLOPT_COOKIE => "session=your_session_cookie",
    CURLOPT_RETURNTRANSFER => true,
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
echo "Remaining credits: " . $response["balance"];

Your credit balance is also returned in the x-credits-remaining response header after every screenshot request, so you can track your balance without making a separate API call.

Credit Packs

Purchase credits in pre-configured packs. View available packs:

curl "https://screenshotapi.to/api/v1/credits/packs"
[
  {
    "id": "pack_starter",
    "name": "Starter",
    "credits": 1000,
    "priceCents": 900,
    "isPopular": false
  },
  {
    "id": "pack_growth",
    "name": "Growth",
    "credits": 5000,
    "priceCents": 2900,
    "isPopular": true
  },
  {
    "id": "pack_pro",
    "name": "Pro",
    "credits": 25000,
    "priceCents": 9900,
    "isPopular": false
  },
  {
    "id": "pack_scale",
    "name": "Scale",
    "credits": 100000,
    "priceCents": 29900,
    "isPopular": false
  }
]

The /credits/packs endpoint is public and does not require authentication.

Purchasing Credits

To purchase a credit pack, send the pack ID. You'll receive a checkout URL:

curl -X POST "https://screenshotapi.to/api/v1/credits/purchase" \
  -H "Content-Type: application/json" \
  -d '{"packId": "pack_pro"}' \
  --cookie "session=your_session_cookie"
const response = await fetch('https://screenshotapi.to/api/v1/credits/purchase', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  credentials: 'include',
  body: JSON.stringify({ packId: 'pack_pro' })
})

const { checkoutUrl } = await response.json()
// Redirect user to checkoutUrl to complete payment
window.location.href = checkoutUrl
import requests

response = requests.post(
    "https://screenshotapi.to/api/v1/credits/purchase",
    json={"packId": "pack_pro"},
    cookies={"session": "your_session_cookie"}
)

checkout_url = response.json()["checkoutUrl"]
# Redirect user to checkout_url to complete payment
body := strings.NewReader(`{"packId": "pack_pro"}`)
req, _ := http.NewRequest("POST", "https://screenshotapi.to/api/v1/credits/purchase", body)
req.Header.Set("Content-Type", "application/json")
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 result struct{ CheckoutURL string `json:"checkoutUrl"` }
json.NewDecoder(resp.Body).Decode(&result)
// Redirect user to result.CheckoutURL to complete payment
require "net/http"
require "json"

uri = URI("https://screenshotapi.to/api/v1/credits/purchase")
req = Net::HTTP::Post.new(uri, "Content-Type" => "application/json")
req["Cookie"] = "session=your_session_cookie"
req.body = { packId: "pack_pro" }.to_json

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) { |http|
  http.request(req)
}

checkout_url = JSON.parse(response.body)["checkoutUrl"]
# Redirect user to checkout_url to complete payment
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => "https://screenshotapi.to/api/v1/credits/purchase",
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
    CURLOPT_COOKIE => "session=your_session_cookie",
    CURLOPT_POSTFIELDS => json_encode(["packId" => "pack_pro"]),
    CURLOPT_RETURNTRANSFER => true,
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
// Redirect user to $response["checkoutUrl"] to complete payment

After successful payment, credits are automatically added to your account.

Transaction History

View your credit transaction history:

curl "https://screenshotapi.to/api/v1/credits/transactions?limit=10&offset=0" \
  --cookie "session=your_session_cookie"

Each transaction shows the type (purchase, auto_topup, usage, subscription), amount, description, and timestamp.

Auto Top-Up

Auto top-up helps you stay ahead of credit shortages by notifying you when your balance is low.

Configure credit balance monitoring from your dashboard. When your balance drops below a threshold you set, you'll be prompted to purchase more credits.

How it works:

  1. Set a threshold (e.g., 50 credits).
  2. Choose a credit pack to suggest (e.g., Growth pack with 5,000 credits).
  3. When your balance drops below 50, you'll see a prompt to buy more credits.

You can enable, disable, or reconfigure auto top-up at any time from the settings page.

Insufficient Credits

If you attempt a screenshot request once your plan's monthly allowance is used up and you have zero credits, you'll receive a 402 response:

{
  "error": "Insufficient quota",
  "message": "You've reached your plan's monthly screenshot limit. Your included allowance resets on 2026-08-01. Upgrade your plan or buy a credit pack to keep capturing now: https://screenshotapi.to/dashboard/billing",
  "remainingInPlan": 0,
  "creditBalance": 0,
  "quotaResetsAt": "2026-08-01T00:00:00.000Z",
  "upgradeUrl": "https://screenshotapi.to/dashboard/billing"
}

The request is not processed and no credit is deducted. quotaResetsAt tells you when the included allowance returns, so an integration can requeue rather than fail permanently. To restore access immediately instead, buy a credit pack or upgrade your plan at the upgradeUrl.

Pricing Summary

PackCreditsPricePer Credit
Starter1,000$9.00$0.009
Growth5,000$29.00$0.0058
Pro25,000$99.00$0.00396
Scale100,000$299.00$0.00299

Higher-volume packs offer a lower cost per credit. All prices are in USD and exclude applicable taxes.

On this page