A custom GPT can't open a page in a real browser or show you what a site looks like. An Action can do both. This guide wires Shotmint into a GPT in about five minutes: one schema URL to import, one API key, and a short block of instructions. It also covers the limit that breaks most page-reading Actions: OpenAI caps every Action response at 100,000 characters, and long pages go well over that.
| Operation | What it does |
|---|---|
| content GET /v1/content | Loads the page in Chromium (JavaScript pages work) and returns its main content as Markdown, with title, author, date and the page's own HTTP status. 1 credit. |
| screenshotSignedUrl GET /v1/screenshot/url | Returns a public image URL that the GPT shows inline with Markdown. Free to request. The render happens when the image is first loaded (1 credit), and repeats are cached for 24 hours. |
| account GET /v1/account | Credits left on the key, so the GPT can tell you when you're running low. |
The schema at https://shotmint.creasework.com/openapi-gpt.json holds only these three operations, with one auth scheme and JSON responses. Actions can't show binary images, so the full /openapi.json (PNG and PDF responses, three auth schemes, 20+ operations) is the wrong file for a GPT.
https://shotmint.creasework.com/openapi-gpt.json. The three operations appear under Available actions.X-API-Key, and paste your key. (Auth type Bearer works too: the API accepts Authorization: Bearer as well.)https://shotmint.creasework.com/privacy.When the user gives a URL and wants to see it, call screenshotSignedUrl with that url
(add full_page=true for "whole page", mobile=true and width=390 for "on a phone",
dark_mode=true for "dark mode"). Show the result with Markdown: .
You can't see the image yourself, so don't describe its contents.
When the user wants a page read, summarised or quoted, call content with that url and
max_chars=50000. If status is not 200, say the site returned that status (404 page,
login or bot wall) instead of summarising it. If truncated is true, say you only read
the first part of the page.
The key stays in ChatGPT's Action settings. It never appears in the image URLs, which carry a key id and an HMAC signature instead.
OpenAI's Actions production notes say request and response payloads must each be under 100,000 characters, and that requests time out after 45 seconds (checked 2026-10-25). We ran six real pages through /v1/content and counted the Markdown it returned:
| Page | Markdown characters |
|---|---|
| GitHub: microsoft/playwright README | 11,551 (8,050 with links=false) |
| MDN: Using the Fetch API | 22,115 (14,749) |
| Python docs: Classes tutorial | 39,592 (34,668) |
| Wikipedia: Origami | 68,467 (38,479) |
| Wikipedia: Python (programming language) | 191,399: over the limit |
| Wikipedia: World War II | 424,717 (175,625): over the limit even without links |
Two of the six would make the Action fail outright, and the JSON wrapper (escaped newlines and quotes, plus the metadata fields) adds to the count. That's why the GPT schema defaults max_chars to 50,000 and the instructions ask for it on every call: the content is cut at 50,000 characters, truncated comes back true, and the GPT can say it read only the first part. links=false drops link URLs and images, which cut the measured pages by 12% to 59%.
These are the exact requests the Action sends. Run them with your key to see what the GPT will get:
curl -s "https://shotmint.creasework.com/v1/content?url=https://en.wikipedia.org/wiki/Python_(programming_language)&max_chars=50000" \
-H "X-API-Key: YOUR_KEY" | head -c 600; echo
curl -s "https://shotmint.creasework.com/v1/screenshot/url?url=https://github.com/microsoft/playwright&full_page=true" \
-H "X-API-Key: YOUR_KEY"
The second call returns {"url":"https://shotmint.creasework.com/s/....png?...&sig=...","key_id":"..."}. Open that URL in a browser: that's the image the GPT shows.
We validated the schema with an OpenAPI 3.1 parser and ran every request above against the live API. The ChatGPT editor itself can't be scripted, so the import and chat steps above follow OpenAI's documented flow but weren't run by us. If something in the editor doesn't match, tell us. Claude, Cursor and other MCP clients don't need any of this: point them at the MCP server.
Each page read or new screenshot is one credit, and repeat screenshots of the same URL within 24 hours are free. A free key covers 25 a month. For a GPT you share, €5 buys 2,000 renders with no subscription, and credits never expire.
No signup, no card. Get a key in one click, then buy credits only if you need more (from €5 for 2,000, never expire). From a script, an AI agent, Make or Zapier, POST /v1/keys/free (no body) returns a key as JSON (openapi.json, no-code recipes).
All guides: guides · integrations · comparisons