---
title: "Bulk assign keys to a guardrail"
method: POST
path: "/guardrails/{id}/assignments/keys"
tags: ["Guardrails"]
---

# Bulk assign keys to a guardrail

`POST /guardrails/{id}/assignments/keys`

Assign multiple API keys to a specific guardrail. A key may hold at most one guardrail; assigning replaces any existing assignment. [Management key](/docs/guides/overview/auth/management-api-keys) required.

## Path parameters

- `id` string, uuid, required — The unique identifier of the guardrail

## Request body

- BulkAssignKeysRequest
  - `key_hashes` string[], required — Array of API key hashes to assign to the guardrail

## Response `200`

Assignment result

- BulkAssignKeysResponse
  - `assigned_count` integer, required — Number of keys successfully assigned

## Other responses

- `400` — Bad Request - Invalid request parameters or malformed input
- `401` — Unauthorized - Authentication required or invalid credentials
- `403` — The guardrail has no workspace and carries a person-name or address sensitive-info filter, and at least one target key belongs to a HIPAA-enabled workspace, where that filter is not available.
- `404` — Not Found - Resource does not exist
- `500` — Internal Server Error - Unexpected server error

## Changes

- **2026-09-15** `936be9349a63` — 1 info
  - added the non-success response with the status `403`

[Change history](https://skmtc.dev/openrouterteam/apis/openrouter-api/changes/guardrails/:id/assignments/keys/post.md)

---

[API](https://skmtc.dev/openrouterteam/apis/openrouter-api.md) · [All operations](https://skmtc.dev/openrouterteam/apis/openrouter-api/llms.txt) · [OpenAPI document](https://skmtc.dev/openrouterteam/apis/openrouter-api/revisions/c3b9702bd9d7?raw)
