Get an import
Fetch one import. Poll this to follow a job to completion; a one- to two-second interval is plenty, and `/api/events/stream` avoids polling altogether.
Fetch one import. Poll this to follow a job to completion; a one- to
two-second interval is plenty, and /api/events/stream avoids polling
altogether.
Authorization
bearerAuth A Clerk session JWT. Obtain one with a Clerk frontend SDK
(session.getToken()) or, for server-to-server use, with a Clerk
machine token. The token's sub claim is the Flambe user id that scopes
every request.
In: header
Path Parameters
Import identifier.
uuidResponse Body
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/api/imports/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "id": "4d1f8c2e-9a3b-4f1e-8c7d-1b2a3c4d5e6f", "type": "web", "status": "completed", "url": "https://www.seriouseats.com/best-chocolate-chip-cookies", "recipe_id": "9b8a7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d", "created_at": "2026-09-10T18:22:04.512Z", "updated_at": "2026-09-10T18:22:31.004Z"}Start an import POST
Creates an import job and enqueues it. Returns `201` immediately with a record whose `status` is `pending` — extraction happens asynchronously on a worker, and takes anywhere from a few seconds to a couple of minutes depending on the source. Which fields are required depends on `type`: | `type` | Required | Notes | | --- | --- | --- | | `web` | `url` | Must be `https`. Recipe sites, Instagram, YouTube, TikTok. | | `media` | `file_ids` | Upload images first with `POST /api/files`. | | `text` | `text` or `text_file_id` | `text` must be at least 3 characters. | | `image_batch` | `file_ids` | Fans out into one child import per image. | Track the job by polling `GET /api/imports/{id}` or by subscribing to `GET /api/events/stream`. When `status` becomes `completed`, `recipe_id` points at the created recipe.
List the import working set GET
The newest imports by `created_at`, intentionally not paginated — this is the bounded window the apps' import screens render. Ordering is by **creation**, not by recency of activity. An old import that just failed or is being retried has a fresh `updated_at` but keeps its original `created_at`, so it is *not* pulled into this window. Use `/api/imports/v2` when you need the archive. Batch parents of any child in the window are fetched and included even when the parent itself falls outside it.