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

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 with zero credits, you'll receive a 402 response:

{
  "error": "Insufficient credits",
  "balance": 0,
  "message": "Purchase more credits at screenshotapi.to/dashboard/credits"
}

The request is not processed and no credit is deducted.

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