Skip to main content
The import endpoint turns something that already exists elsewhere into a running pod. Two of the four import routes go through it: 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

Send exactly one of 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).
Response: 202 Accepted
The pod is created immediately and the files are pushed in the background once it reaches 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:
Show the guide. A bare error here is a dead end for the user, which is the failure this feature exists to avoid.

Previewing First

Set dry_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

Every route in, every guided platform, and what each one does and does not carry across. Read-only, no outbound fetch, and outside the import rate limit - so it’s safe to call on page load. Response: 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.