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 = checkoutUrlimport 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 paymentbody := 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 paymentrequire "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 paymentAfter 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:
- Set a threshold (e.g., 50 credits).
- Choose a credit pack to suggest (e.g., Growth pack with 5,000 credits).
- 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
| Pack | Credits | Price | Per Credit |
|---|---|---|---|
| Starter | 1,000 | $9.00 | $0.009 |
| Growth | 5,000 | $29.00 | $0.0058 |
| Pro | 25,000 | $99.00 | $0.00396 |
| Scale | 100,000 | $299.00 | $0.00299 |
Higher-volume packs offer a lower cost per credit. All prices are in USD and exclude applicable taxes.