---
title: "Import a pack from an uploaded zip"
method: POST
path: "/api/v2/vendor/imports"
tags: ["Imports"]
---

# Import a pack from an uploaded zip

`POST /api/v2/vendor/imports`

## Request

- Base URL: `https://craftwork.design`
- URL: `https://craftwork.design/api/v2/vendor/imports`
- Auth: HTTP bearer

Craftwork reads the uploaded zip (formats, asset groups, compatibility) and the optional pack page, copies its images and suggests name, short description, description, categories, tags and previews. Runs 5-60 s in the background: poll getImport until `status` is `ready`, then submitImport. 20 imports an hour per author.

## Request body

- ImportCreate
  - `fileUrl` string, uri, required
  - `fileName` string
  - `fileSize` integer
  - `sourceUrl` string: Pack page elsewhere (Gumroad, UI8, own site)

## Response `202`

Import queued.

- object
  - `data` Import, required
    - `id` integer
    - `status` 'queued' | 'inspecting' | 'fetching_link' | 'generating' | 'ready' | 'failed' | 'applied'
    - `ready` boolean
    - `fileName` string
    - `fileUrl` string
    - `sourceUrl` string, nullable
    - `steps` object[]
      - `key` 'inspect' | 'link' | 'generate'
      - `state` 'pending' | 'running' | 'done' | 'skipped' | 'failed'
      - `message` string, nullable
    - `assets` object, nullable: After review submission: { state, requested, created, failed, skipped }
    - `inventory` object, nullable
      - `status` 'known' | 'unknown'
      - `reason` string, nullable
      - `files` integer
      - `formats` object
      - `assetGroups` integer
      - `groups` object[]: First 200 asset groups
        - `key` string
        - `name` string
        - `kind` 'svg' | 'raster' | 'design'
        - `thumbUrl` string, nullable
    - `link` object, nullable
      - `title` string, nullable
      - `siteName` string, nullable
      - `price` string, nullable
      - `images` integer
      - `error` string, nullable
    - `suggestion` object, nullable
      - `name` string
      - `shortDescription` string
      - `description` string
      - `categories` string[]
      - `subcategories` integer[]
      - `tags` string[]
      - `compatibility` string[]
      - `previews` string[]
      - `ai` boolean
    - `error` string, nullable
    - `draftId` integer, nullable
    - `productId` integer, nullable
    - `createdAt` string
    - `updatedAt` string
    - `dashboardUrl` string: The upload wizard for a draft, else the products list
    - `submitted` 'draft' | 'review': Only in the submitImport response

## Other responses

- `401`: Missing, invalid or revoked API key.
- `403`: The key lacks the scope this endpoint needs (INSUFFICIENT_SCOPE).
- `422`: The body failed validation; details lists each problem.
- `429`: 120 requests a minute per key, or the daily upload limit (DAILY_UPLOAD_LIMIT). See Retry-After.

---

[API](https://skmtc.dev/craftwork/apis/craftwork-author-api.md) - [All operations](https://skmtc.dev/craftwork/apis/craftwork-author-api/llms.txt) - [OpenAPI document](https://skmtc.dev/craftwork/apis/craftwork-author-api/revisions/eb2a8340d0e9?raw)
