---
title: "Register signing keys in bulk"
method: POST
path: "/key_link/signing_keys/bulk"
tags: ["Key Link"]
---

# Register signing keys in bulk

`POST /key_link/signing_keys/bulk`

## Request

- Base URL: `https://api.fireblocks.io/v1`
- URL: `https://api.fireblocks.io/v1/key_link/signing_keys/bulk`
- Auth: none declared
- TypeScript: <https://skmtc.dev/fireblocks/apis/fireblocks-api/docs/key_link/signing_keys/bulk/post.ts> (a function with typed inputs; its response is checked against the schema)

Accepts a set of signing keys certified by a single validation key and queues them for registration in the background. Returns a job id to poll. A workspace can have one bulk registration at a time; submitting another while one is QUEUED or IN_PROGRESS is rejected with 409. Bulk registrations from different workspaces share a limited number of slots, so a job may wait QUEUED behind another workspace's before it starts. Keys already registered in the workspace are recognized and skipped, so resubmitting the same request after a failure is safe and only processes what is missing. Every key must carry its own proof of ownership; a bulk registration has no interactive step in which one can arrive later.

## Headers

- `Idempotency-Key` string

## Request body

- CreateBulkSigningKeys
  - `validationKeyId` string, required: The id of the validation key that signed every certificate in this request, as returned when the validation key was registered. Not the signingDeviceKeyId of any signing key.
  - `keys` BulkSigningKey[], required: The signing keys to register.
    - `signingDeviceKeyId` string, required: The ID, name or label of the key specified on the customer's signing device.
    - `signedCertPem` string, required: The signed certificate that includes the public key PEM of the signing key, signed by the validation key declared for the request.
    - `agentUserId` string, required: Id of user to which this key belongs
    - `proofOfOwnership` BulkProofOfOwnership, required: Proof that the customer holds the private key. Required for every key, unlike the single key endpoint: bulk registration has no interactive step in which a proof can arrive later.
      - `message` string, required: The message to be signed by the key as proof of ownership. 64 to 1024 bytes in hexadecimal format.
      - `signature` string, required: The signature of the message. 64 bytes in hexadecimal format.

## Response `202`

Registration is queued

- CreateBulkSigningKeysResponse
  - `jobId` string, required: Id of the registration job. Poll it for progress.

## Other responses

- `409`: Error Response
- `default`: Error Response

---

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