See Import an existing app for which route fits what, and
Import AI artifacts for the Claude and ChatGPT paths.
Rate limited to 20 requests per hour per IP, because a single call can trigger a crawl of
someone else’s site.
Create an Import
url or paste. Everything else is optional.
Setting any of
mode: "site", max_pages or single_page makes it a site snapshot, which is given
a longer fetch budget than other imports (75 seconds rather than 25).
202 Accepted
running,
which is why this is a 202 and not a 201. Poll GET /api/pods/{name} the same way you would
after any other create.
If you didn’t pass a name and the derived one is taken, we suffix it rather than failing. An
explicit name is used as-is, so it can collide and return 409.
Errors
The
422 is the interesting one. It isn’t a bad request - the URL is fine, the path is closed - and
it comes back with the steps for getting that platform’s code out by hand:
Previewing First
Setdry_run: true and you get 200 OK with just the parsed artifact - no pod, no charge. This
is what the dashboard’s preview pane uses.
File content is trimmed in a preview even though paths and sizes are not: anything binary, over
64KB, or past a 128KB total budget comes back with content_omitted set instead of content, and a
site snapshot keeps the content of index.html only. Sizes are always accurate, so use those if you
want to show what’s coming.
Pasting Source
Send one of
body or files, not both. A files project containing a package.json is installed
and built on the pod rather than served as static files.
The Import Catalog
200 OK
With
?url=, the response gains detected_source (site, claude, chatgpt, or unknown) and,
when the URL matches a guided platform, that platform’s guide. This is what the dashboard calls as
you type a URL, so it can show the right next step before you submit.
automatic is false on every guided platform, stated explicitly so nothing implies a one-click
path that doesn’t exist.
Build your own import UI against this endpoint rather than hard-coding the routes and their
caveats. It is served from the backend precisely so the dashboard, the CLI and these docs cannot
drift on what an import actually carries.