Choose
Choose your setup
Webflow
Use an Embed block and paste the generated snippet from your dashboard.
Bubble
Add an HTML element and use the saved preview where your page needs an image.
WordPress
Paste the preview image into a Custom HTML block or trusted snippets area.
Webflow instructions
- Create or choose a website preview in the dashboard.
- Copy the generated JavaScript from the integration guide.
- Add an Embed block where the preview should appear.
- Paste the snippet before the closing body tag and publish.
<img id="my-screenshot" alt="Website preview" />
Need API keys, saved previews, or generated snippets? Open the Dashboard.
Start
Basic flow
1Create your account
- Sign up at /signup.
- Verify your email address.
- Get 25 free credits automatically.
2Create your first preview
- Go to your Dashboard.
- Scan a public homepage or capture one exact URL.
- Save the screenshots you want to use in your library.
3Copy your setup
- Open the platform guide that matches your site builder.
- Copy the snippet or image element from your Dashboard.
- Paste it into Webflow, Bubble, WordPress, or Custom HTML.
4Test your integration
- Refresh your website.
- The screenshot should appear automatically.
- Check your Dashboard to see credit usage.
Common issues
Screenshot not showing?
- Check the browser console for errors.
- Verify the API key is correct.
- Make sure the target URL starts with
https://orhttp://.
Scan failed or page is blocked?
- Some sites block automated browsers with Cloudflare or similar protection.
- Login-only pages, private dashboards, and admin/editor URLs cannot be captured.
- Try the public homepage or another public page on the same site.
API returns 401 Unauthorized?
- Your API key is incorrect or missing.
- Check for extra spaces in the Authorization header.
- Create a new API key in Dashboard.
Out of credits?
- Check your remaining credits in Dashboard.
- Purchase more credits on the Pricing page.
Advanced
Advanced: API authentication
You can skip this section if you use the dashboard and platform guides. Use the API only when you want to capture exact URLs from your own backend, server action, or trusted automation.
The API uses Bearer token authentication. Include your API key in the Authorization header with every request.
Authorization: Bearer YOUR_API_KEY
Security tip: Never commit API keys or expose them in public repositories.
Advanced API
Capture one exact URL
/api/v1/screenshotSend one public URL and receive a screenshot URL back. Dashboard Site Scan uses the same screenshot engine, but the API is better when you already know the exact URL you want to capture.
Endpoint URL
https://shotapi-production.up.railway.app/api/v1/screenshot
Headers
| Header | Value |
|---|---|
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
Request body parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | The website URL to capture |
| viewport_width | number | No | Browser viewport width. Default: 1280 |
| viewport_height | number | No | Browser viewport height. Default: 1024 |
| full_page | boolean | No | Capture the full scrollable page. Default: false |
| format | string | No | Image format: png, jpg, or webp. Default: png |
Successful response
{
"success": true,
"screenshot_id": "uuid-here",
"screenshot_url": "https://...",
"credits_used": 1,
"credits_remaining": 24,
"processing_time_ms": 3200
}cURL
curl -X POST https://shotapi-production.up.railway.app/api/v1/screenshot \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com",
"viewport_width": 1920,
"viewport_height": 1080
}'JavaScript fetch
const response = await fetch('https://shotapi-production.up.railway.app/api/v1/screenshot', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://example.com',
viewport_width: 1920,
viewport_height: 1080
})
});
const data = await response.json();
console.log(data.screenshot_url);Python requests
import requests
response = requests.post(
'https://shotapi-production.up.railway.app/api/v1/screenshot',
json={'url': 'https://example.com'},
headers={
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
)
data = response.json()
print(data['screenshot_url'])Errors
Error codes
| Status code | Error | Description |
|---|---|---|
| 400 | Bad Request | Invalid URL or request parameters |
| 401 | Unauthorized | Invalid or missing API key |
| 402 | Payment Required | Insufficient credits in your account |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Internal Server Error | An error occurred on the server |
Limits
Rate limits
Rate limits are enforced per API key. New accounts use the default limit below.
Current API key
requests per minute
If you need a higher API limit for a real workflow, contact support before launch traffic starts. Dashboard Site Scan runs through the background capture queue and is not meant for high-volume API load testing.
Ready to get started?
Sign up now and get 25 free credits to test SiteCatch.