ChatGPT Integration

Screenshot API for ChatGPT Custom Actions

Add visual web perception to any Custom GPT or OpenAI Assistant — copy the schema below and paste it into the Actions editor.

No signup required to start. The free tier (50 screenshots/day) works immediately, no API key needed. Your Custom GPT will capture screenshots out of the box.

How It Works

Custom GPTs and OpenAI Assistants support Actions — custom API calls defined by an OpenAPI schema. When a user asks your GPT to screenshot a URL, it calls the Hermesforge API and returns the image directly in the conversation.

ChatGPT already routes screenshot requests to this API organically — many users have discovered it without any integration work. Adding it as an explicit Action gives you control over the behavior and unlocks structured use cases.

Quick Setup (2 minutes)

1 Open your Custom GPT editor → go to Configure → scroll to Actions → click Add action → click Import from URL.
2 Paste this URL and click Import:
https://hermesforge.dev/openapi/screenshot.json
3 That's it. Click Save. Your GPT can now screenshot any URL.

Or use the full multi-tool schema (screenshot + tech stack + dead link checker + SEO audit) at https://hermesforge.dev/openapi.json.

Manual Schema

If you prefer to paste the schema directly, use this minimal version covering the screenshot action:

{
  "openapi": "3.1.0",
  "info": {
    "title": "Hermesforge Screenshot API",
    "description": "Capture any URL as PNG, JPEG, WebP, or PDF. Supports dark mode, full-page, mobile viewport, ad blocking, and custom JavaScript.",
    "version": "2.1.0"
  },
  "servers": [
    { "url": "https://hermesforge.dev" }
  ],
  "paths": {
    "/api/screenshot": {
      "get": {
        "operationId": "captureScreenshot",
        "summary": "Capture a screenshot of any URL",
        "description": "Renders the page in a real Chromium browser and returns an image. Free tier: 50/day, no API key needed. Optional: pass X-API-Key header for higher limits.",
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "required": true,
            "description": "The URL to screenshot (must include https://)",
            "schema": { "type": "string", "example": "https://example.com" }
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "description": "Output format: png (default), jpeg, webp, or pdf",
            "schema": { "type": "string", "enum": ["png", "jpeg", "webp", "pdf"], "default": "png" }
          },
          {
            "name": "viewport",
            "in": "query",
            "required": false,
            "description": "Device preset: mobile, tablet, desktop (default: desktop 1280x720)",
            "schema": { "type": "string", "enum": ["mobile", "tablet", "desktop", "desktop_hd", "macbook", "iphone_14", "og", "twitter"] }
          },
          {
            "name": "full_page",
            "in": "query",
            "required": false,
            "description": "Capture full scrollable page (true) or viewport only (false)",
            "schema": { "type": "boolean", "default": true }
          },
          {
            "name": "dark_mode",
            "in": "query",
            "required": false,
            "description": "Enable dark mode rendering",
            "schema": { "type": "boolean", "default": false }
          },
          {
            "name": "block_ads",
            "in": "query",
            "required": false,
            "description": "Block ads, trackers, and cookie banners",
            "schema": { "type": "boolean", "default": false }
          },
          {
            "name": "width",
            "in": "query",
            "required": false,
            "description": "Viewport width in pixels (ignored if viewport preset set)",
            "schema": { "type": "integer", "default": 1280 }
          },
          {
            "name": "delay",
            "in": "query",
            "required": false,
            "description": "Wait N milliseconds after page load before capturing (useful for animations or lazy-loaded content)",
            "schema": { "type": "integer", "default": 0 }
          }
        ],
        "responses": {
          "200": {
            "description": "Screenshot image (PNG, JPEG, WebP) or PDF",
            "content": {
              "image/png": { "schema": { "type": "string", "format": "binary" } },
              "image/jpeg": { "schema": { "type": "string", "format": "binary" } },
              "image/webp": { "schema": { "type": "string", "format": "binary" } },
              "application/pdf": { "schema": { "type": "string", "format": "binary" } }
            }
          },
          "429": {
            "description": "Rate limit exceeded. Get a free API key at https://hermesforge.dev/api/keys"
          }
        }
      }
    }
  }
}

Example GPT Prompt Instructions

Add these instructions to your Custom GPT's system prompt to enable natural-language screenshot requests:

You can capture screenshots of any URL using the captureScreenshot action.

When a user asks to "screenshot", "capture", "show me", or "take a picture of" a URL, call captureScreenshot with:
- url: the full URL (always include https://)
- viewport: "mobile" for mobile view, "desktop" for desktop (default)
- full_page: true unless the user specifies viewport/above-fold only
- dark_mode: true if user asks for dark mode or night mode
- block_ads: true if user asks for clean or ad-free screenshot

Display the returned image inline in your response.

If you receive a 429 error, tell the user: "The free tier limit has been reached. They can get a free API key at https://hermesforge.dev/api/keys to continue."

Use Cases

Use CaseExample promptParameters
Basic screenshot"Screenshot github.com"url only
Mobile preview"Show me the mobile version of stripe.com"viewport=mobile
OG image preview"What does this URL look like when shared on social?"viewport=og (1200x630)
Full-page capture"Capture the full page including below the fold"full_page=true
Dark mode"Screenshot this in dark mode"dark_mode=true
Clean screenshot"Take a screenshot without ads"block_ads=true
Delayed capture"Screenshot after animations finish"delay=2000
PDF export"Give me a PDF of this page"format=pdf

Rate Limits & API Keys

TierScreenshots/dayKey requiredCost
Free (no key)50NoFree
Starter200Yes (free key)Free
Pro1,000Yes$9/30 days
Business5,000Yes$29/30 days

API keys are free for the Starter tier. Get one at /api/keys. Pass as X-API-Key: hf_yourkey header or &key=hf_yourkey query parameter.

For production Custom GPTs that need consistent availability, add your API key to the Action's authentication settings (type: API Key, header: X-API-Key).

Already Working?

ChatGPT's ChatGPT-User bot already routes screenshot requests to this API through organic discovery. If your Custom GPT is generating those calls, you're already integrated — this page just makes it explicit and gives you control over the parameters.

Need higher limits or a dedicated endpoint? Get a free API key — takes 30 seconds, no payment required for 200/day. For production use: see pricing.

Get Free API Key Full API Docs

Other Integrations

LangChain ToolFull OpenAPI SpecPlugin ManifestAPI Reference