---
title: "Create a ABM provisioning request by uploading file"
method: POST
path: "/v2/seamless/upload"
tags: ["device_onboarding_ABM Provisioning"]
---

# Create a ABM provisioning request by uploading file

`POST /v2/seamless/upload`

⚠️ Apple devices only. 

Creates one or more ABM provisioning requests by uploading a CSV file containing device identifiers, assigning devices to a blueprint and optionally a group.

**About Create ABM Provisioning Request (CSV Upload)**

Seamless provisioning (also referred to as ABM provisioning in Esper) pre-assigns newly enrolled Apple Business Manager devices to a blueprint and group before they reach end users, enabling hands-free setup. This endpoint accepts a multipart/form-data CSV upload (csv_file) containing the device identifiers to provision. On success, it returns a paginated list of SeamlessRequest records — one per device in the file — each including the assigned blueprint, group, and identifier metadata. For provisioning a single device by serial number without a CSV, use POST /api/v2/seamless.

**Key Fields**

csv_file (body, required) — Binary CSV file containing device identifiers

id (response) — SeamlessRequest UUID

assigned_blueprint_id (response) — Blueprint UUID assigned to the devices

group_id (response) — Group UUID assigned to the devices (nullable)

unique_ids (response) — The device identifiers from the CSV

unique_id_type (response) — Integer type code identifying the identifier format used

tenant_id (response) — Tenant UUID

**Common Use Cases**

Bulk pre-assigning a shipment of Apple devices to a blueprint and deployment group before enrollment

Automating ABM provisioning for large device deployments using exported device lists

Setting up hands-free enrollment workflows for iOS devices entering an ABM-managed fleet

**Best Practices**

Validate CSV formatting before upload — a 400 response indicates invalid file format or contents

For single-device provisioning or API-driven workflows without a file, use POST /api/v2/seamless with a JSON body instead

Capture the returned SeamlessRequest records to confirm each device was registered with the correct blueprint and group assignments

## Response `200`

ABM provisioning request successfully created.

- object
  - `code` integer
  - `message` string
  - `content` object
    - `count` integer
    - `previous` string
    - `next` string
    - `results` DeviceOnboardingSeamlessRequest[]
      - `id` string, uuid
      - `assigned_blueprint_id` string, uuid
      - `group_id` string, uuid, nullable
      - `unique_ids` string
      - `unique_id_type` integer
      - `tenant_id` string

## Other responses

- `400` — Bad request
- `401` — Authorization information is missing or invalid.
- `500` — Internal server error

---

[API](https://skmtc.net/esper/apis/esper-api-reference.md) · [All operations](https://skmtc.net/esper/apis/esper-api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/esper/esper-api-reference/revisions/e1f64cbb488e/schema)
