---
title: "Batch enroll verified authenticators"
method: POST
path: "/users/authenticators"
tags: ["users"]
---

# Batch enroll verified authenticators

`POST /users/authenticators`

Enroll multiple authenticators across multiple users in a single request. This endpoint is idempotent — re-enrolling the same credential for the same user is a no-op. Each item is processed independently; failures do not affect other items in the batch.

## Request body

- object
  - `authenticators` object[], required — An array of authenticator items to enroll. Maximum 1000 items per request.
    - `userId` string, required — The ID of the user to enroll the authenticator for.
    - `verificationMethod` 'PASSKEY', required — The verification method.
    - `credentialId` string, required — The passkey credential ID from the WebAuthn credential.
    - `credentialPublicKey` string, required — The passkey credential public key (base64url-encoded).
    - `name` string — A display name for the authenticator (e.g. device or browser name).
    - `username` string — The WebAuthn username associated with the passkey (e.g. the user's email or handle shown in the browser's passkey picker).
    - `transports` string[] — Transport hints for the passkey (e.g. "internal", "hybrid").
    - `aaguid` string — The AAGUID of the authenticator that created the passkey.

## Response `200`

OK

- object
  - `total` number, required — The total number of items in the request.
  - `succeeded` number, required — The number of authenticators successfully enrolled.
  - `failed` number, required — The number of items that failed to enroll.
  - `failures` object[], required — A list of items that failed to enroll, with per-item error details. Empty when all items succeed.
    - `userId` string, required — The userId of the failed item.
    - `credentialId` string, required — The credentialId of the failed item.
    - `errorCode` 'invalid_configuration' | 'invalid_request' | 'conflict' | 'unexpected_error', required — A machine-readable error code for programmatic handling.
    - `errorDescription` string, required — A human-readable description of why the item failed.

## Other responses

- `400` — Invalid Request
- `401` — Unauthorized

---

[API](https://skmtc.net/authsignal/apis/call-connect-api.md) · [All operations](https://skmtc.net/authsignal/apis/call-connect-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/authsignal/call-connect-api/versions/5604d744e3ad/schema)
