Add visual web perception to any Custom GPT or OpenAI Assistant — copy the schema below and paste it into the Actions editor.
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.
https://hermesforge.dev/openapi/screenshot.json
Or use the full multi-tool schema (screenshot + tech stack + dead link checker + SEO audit) at https://hermesforge.dev/openapi.json.
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"
}
}
}
}
}
}
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 Case | Example prompt | Parameters |
|---|---|---|
| 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 |
| Tier | Screenshots/day | Key required | Cost |
|---|---|---|---|
| Free (no key) | 50 | No | Free |
| Starter | 200 | Yes (free key) | Free |
| Pro | 1,000 | Yes | $9/30 days |
| Business | 5,000 | Yes | $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).
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 DocsLangChain Tool — Full OpenAPI Spec — Plugin Manifest — API Reference