---
title: "Check the build progress of a site's latest import"
method: GET
path: "/api/v1/sites/{slug}/import-status"
tags: ["Import"]
---

# Check the build progress of a site's latest import

`GET /api/v1/sites/{slug}/import-status`

## Request

- Base URL: `https://api.dotsy.ai`
- URL: `https://api.dotsy.ai/api/v1/sites/{slug}/import-status`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer

A light poll for the editor while a URL import runs: how many pages have landed and whether mirrored assets are still copying. A failed import stays visible here (`phase: failed`) after it stops, so an empty site with a failed import never looks like a site that was never imported. Progress is kept for an hour after its last update.

For the full result of one import, poll `GET /api/v1/sites/{slug}/jobs/{id}` with the `job.id` from the import's 202.

## Path parameters

- `slug` string, required

## Response `200`

The latest import's progress, or `build: null`.

- ImportStatusResponse
  - `build` object, nullable, required: The site's latest import, or `null` when the site has never been imported (or the record has expired).
    - `jobId` string, required: The import's workflow id (the `id` of the 202 response).
    - `phase` 'pages' | 'assets' | 'done' | 'failed', required: `pages`: pages are still being captured. `assets`: pages have landed (the site can be previewed and published) and mirrored assets are still copying. `done`: finished. `failed`: the import stopped; `pagesDone` shows what landed first.
    - `pagesDone` integer, required: Pages committed so far.
    - `pagesTotal` integer, required: Pages the import set out to capture.
    - `pagesLanded` integer, required: Pages the site holds right now (live count, not the job's counter).
    - `updatedAt` number, required: Last progress write, Unix ms.
    - `externalAssets` object: Mirrored asset copy progress. Present once the import has found external assets.
      - `total` integer, required: External assets found in the imported pages.
      - `warmed` integer, required: Assets copied into Dotsy so far.
      - `failed` integer, required
      - `capped` integer, required: Assets left out because of the plan's mirror limits.
      - `skipped` integer, required
      - `warmMode` 'inline' | 'deferred', required: `inline` copies during the import, `deferred` in a background job afterwards.
      - `warmJobState` 'pending' | 'running' | 'done' | 'partial' | 'aborted', required: `partial` means the copy finished with some failures; `aborted` means the asset job itself stopped, so `failed: 0` there does not mean nothing is broken.
      - `manifestGen` integer
      - `abort` object: Present only with `warmJobState: aborted`.
        - `stage` string
        - `reason` string
    - `failure` object: Present only with `phase: failed`.
      - `reason` string, required

## Other responses

- `401`: Missing or invalid credentials.
- `403`: The key or token is scoped to other sites.
- `404`: No such site, or it is not visible to this account (`not_found`).

---

[API](https://skmtc.dev/dotsy/apis/dotsy-api.md) · [All operations](https://skmtc.dev/dotsy/apis/dotsy-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dotsy/apis/dotsy-api/revisions/4272ed3b85d7?raw)
