---
title: "Add an SSH public key (computes fingerprint)"
method: POST
path: "/v1/orgs/{orgId}/ssh-keys/create"
tags: ["SSH Keys"]
---

# Add an SSH public key (computes fingerprint)

`POST /v1/orgs/{orgId}/ssh-keys/create`

## Path parameters

- `orgId` string, required

## Request body

- CreateSshKeyRequest
  - `name` string, required
  - `publicKey` string, required

## Response `200`

Added

- SshKeySummary
  - `attachedVmCount` integer — Number of live (non-terminated) VMs this key is attached to. Zero means the key is not scoped to any VM. The dashboard shows an "in use" indicator and warns before deleting a key that is in use.
  - `blockingVms` string[] — Names of VMs for which this is the only key that still resolves to a live org key. Deleting the key is refused (409) while this is non-empty; attach another key to those VMs first.
  - `createdAt` string, required
  - `fingerprint` string, required
  - `id` string, required
  - `name` string, required
  - `publicKey` string, required

## Other responses

- `400` — Invalid key
- `401` — Missing or invalid API key
- `403` — API key lacks the required scope
- `409` — The request conflicts with existing state

---

[API](https://skmtc.net/openrelay/apis/openrelay-api.md) · [All operations](https://skmtc.net/openrelay/apis/openrelay-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openrelay/openrelay-api/versions/32905b8f44f8/schema)
