---
title: "Verify Boot Attestation"
method: POST
path: "/servers/boot/attestation"
tags: ["Servers"]
---

# Verify Boot Attestation

`POST /servers/boot/attestation`

## Request

- Base URL: `https://api.chutes.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.chutes.ai/servers/boot/attestation`
- Auth: none declared

Verify boot attestation and return LUKS passphrase.

Both VM generations reach this route, so the hotkey proof is EXTRACTED rather than required:
a presented signature is verified here and 401s if it does not hold, but its absence is left
for the handler to judge once the quote names the attested image. See
process_boot_attestation, which requires a proof from any image whose measured initramfs
ships the signer.

Verifies the TDX quote against the expected boot measurements and returns the LUKS passphrase
for disk decryption if valid. For VMs >= 1.3.0 it also returns a luks_quote_nonce for the
following runtime call (POST /provision on 1.4.0+, POST /luks/attest on 1.3.x); for 1.4.0+ it
additionally returns root_next + root_confirm_nonce and the VM's ephemeral auth SS58.

## Headers

- `X-Chutes-Nonce` string, nullable
- `X-Chutes-Hotkey` string, nullable

## Request body

- BootAttestationArgs: Request model for boot attestation.
  - `quote` string, required: Base64 encoded TDX quote
  - `miner_hotkey` string, required: Miner hotkey that owns this VM
  - `vm_name` string, required: VM name/identifier
  - `first_boot` boolean: True when the VM detected a fresh (re-downloaded) image via its LUKS2 header token

## Response `200`

Successful Response

- string

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-16** `23e8895b217d`: 2 breaking, 4 warning, 2 info
  - the response's body type changed from `object` to `string` for status `200`
  - removed the required property `key` from the response with the `200` status
  - removed the optional property `luks_quote_nonce` from the response with the `200` status
  - removed the optional property `root_confirm_nonce` from the response with the `200` status
  - …4 more
- **2026-09-02** `37e3c562aa28`: 2 warning
  - deleted the `header` request parameter `X-Chutes-Signature`
  - deleted the `header` request parameter `X-Operator-Signature`
- **2026-08-26** `8d909638091e`: 1 info
  - endpoint added
- **2026-08-22** `05d9af05d87e`: 1 breaking
  - api path removed without deprecation
- **2026-08-04** `352418d4e3a2`: 4 info
  - added the new optional request property `first_boot`
  - added the optional property `root_confirm_nonce` to the response with the `200` status
  - added the optional property `root_next` to the response with the `200` status
  - added the optional property `vm_auth_ss58` to the response with the `200` status

[Operation history](https://skmtc.dev/chutes/apis/chutes-api/changes/servers/boot/attestation/post.md)

---

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