---
title: "Create a ABM provisioning request using device serial number"
method: POST
path: "/v2/seamless"
tags: ["device_onboarding_ABM Provisioning"]
---

# Create a ABM provisioning request using device serial number

`POST /v2/seamless`

⚠️ Apple devices only. 

Creates an ABM provisioning request for one or more devices using device serial numbers supplied in a JSON request body, pre-assigning them to a blueprint and optionally a group.

**About Create ABM Provisioning Request (Serial Number)**

This endpoint is the JSON-body alternative to the CSV upload path for seamless ABM provisioning. It accepts a SeamlessRequestBody containing the assigned_blueprint_id, an optional group_id, and a seamless_info object with unique_ids (comma-separated device identifiers) and unique_id_type. On success it returns a single SeamlessRequest record. This is the preferred method for programmatic or API-driven provisioning workflows where device identifiers are available at runtime rather than in a pre-prepared file. For bulk provisioning from an exported device list, use POST /api/v2/seamless/upload.

**Key Fields**

assigned_blueprint_id (body, required) — UUID of the blueprint to assign to the devices

group_id (body, optional) — UUID of the group to assign the devices to

seamless_info.unique_ids (body) — Comma-separated device identifiers (e.g., serial numbers)

seamless_info.unique_id_type (body) — Integer type code identifying the identifier format

id (response) — SeamlessRequest UUID

assigned_blueprint_id (response) — Confirmed blueprint assignment

group_id (response) — Confirmed group assignment (nullable)

**Common Use Cases**

Programmatically pre-assigning a specific device to a blueprint as part of an automated provisioning pipeline

Registering a known device serial number for zero-touch enrollment without preparing a CSV file

Integrating ABM provisioning into a device lifecycle management workflow driven by an external system

**Best Practices**

Ensure assigned_blueprint_id references a published blueprint version — assigning an unpublished blueprint will result in a device that cannot complete hands-free enrollment

Use comma-separated unique_ids to provision multiple devices in a single call rather than making repeated individual requests

For large-scale bulk provisioning, POST /api/v2/seamless/upload with a CSV may be more practical

## Request body

- DeviceOnboardingSeamlessRequestBody
  - `assigned_blueprint_id` string, uuid
  - `group_id` string, uuid
  - `seamless_info` DeviceOnboardingSeamlessInfo
    - `unique_ids` string
    - `unique_id_type` integer

## Response `200`

Seamless request successfully created.

- object
  - `code` integer
  - `message` string
  - `content` 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)
