Guides

Set up website previews without writing backend code.

Start with your platform: Webflow, Bubble, or WordPress. Use the dashboard to scan a site, choose pages, save previews, and copy the setup you need.

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

  1. Create or choose a website preview in the dashboard.
  2. Copy the generated JavaScript from the integration guide.
  3. Add an Embed block where the preview should appear.
  4. Paste the snippet before the closing body tag and publish.
webflow snippet
<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:// or http://.

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.

http header
Authorization: Bearer YOUR_API_KEY

Security tip: Never commit API keys or expose them in public repositories.

Advanced API

Capture one exact URL

POST/api/v1/screenshot

Send 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

url
https://shotapi-production.up.railway.app/api/v1/screenshot

Headers

HeaderValue
AuthorizationBearer YOUR_API_KEY
Content-Typeapplication/json

Request body parameters

ParameterTypeRequiredDescription
urlstringYesThe website URL to capture
viewport_widthnumberNoBrowser viewport width. Default: 1280
viewport_heightnumberNoBrowser viewport height. Default: 1024
full_pagebooleanNoCapture the full scrollable page. Default: false
formatstringNoImage format: png, jpg, or webp. Default: png

Successful response

json
{
  "success": true,
  "screenshot_id": "uuid-here",
  "screenshot_url": "https://...",
  "credits_used": 1,
  "credits_remaining": 24,
  "processing_time_ms": 3200
}

cURL

bash
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

javascript
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

python
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 codeErrorDescription
400Bad RequestInvalid URL or request parameters
401UnauthorizedInvalid or missing API key
402Payment RequiredInsufficient credits in your account
429Too Many RequestsRate limit exceeded
500Internal Server ErrorAn 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

10

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.