---
title: "Renew the maintenance lease"
method: POST
path: "/vaults/v1/{vault_id}/maintenance-leases/{maintenance_lease_id}/heartbeat"
tags: ["vault"]
---

# Renew the maintenance lease

`POST /vaults/v1/{vault_id}/maintenance-leases/{maintenance_lease_id}/heartbeat`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/vaults/v1/{vault_id}/maintenance-leases/{maintenance_lease_id}/heartbeat`
- Auth: one of:
  - API key in header `SIGN-IN-WITH-X`
  - HTTP bearer

Proves the holder still reaches the control plane. Requires ownership AND current validity: an expired lease can never be resurrected, and renewal can never move the hard deadline.

## Path parameters

- `vault_id` string, required
- `maintenance_lease_id` string, required

## Headers

- `SIGN-IN-WITH-X` string, required

## Request body

- object
  - `holder_token` string, required

## Response `200`

Lease renewed

- object
  - `maintenance_lease_id` string
  - `expires_at` string, date-time, nullable

## Other responses

- `400`: VALIDATION_FAILED
- `403`: Not authorized (VAULT_ACCESS_DENIED)
- `404`: No active lease you hold matches (expired, consumed, released, or not yours)

---

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