# Leases

Claims so parallel agents never share a device.

Claims so parallel agents never share a device.

## createLease

`POST /v1/leases`

Claim devices so no other agent drives them

Request body: `application/json`.

| Field | Type | What it is |
|---|---|---|
| `deviceIds` | array of string |  |
| `selector` | object |  |
| `ttlSeconds` | integer |  |
| `waitMs` | integer | How long to wait in line for a busy device, up to 60 minutes. A team phone on another Mac waits in that Mac's line, with the people there. |
| `task` | string | What you work on, in a few words ("Checkout test"). A team phone's Mac shows it with your name. |

| Response | Means |
|---|---|
| 201 | Lease granted. `Lease` |
| 4XX | Error (RFC 9457). |
| 5XX | Error (RFC 9457). |

MCP tools on this operation: [`claim_devices`](/reference/mcp/claim-devices/).

## renewLease

`POST /v1/leases/{leaseId}`

Extend a lease

| Parameter | In | Required | Type | What it is |
|---|---|---|---|---|
| `leaseId` | path | yes | string |  |

Request body: `application/json`.

| Field | Type | What it is |
|---|---|---|
| `ttlSeconds` | integer |  |

| Response | Means |
|---|---|
| 200 | Renewed. `Lease` |
| 4XX | Error (RFC 9457). |
| 5XX | Error (RFC 9457). |

## releaseLease

`DELETE /v1/leases/{leaseId}`

Release devices

| Parameter | In | Required | Type | What it is |
|---|---|---|---|---|
| `leaseId` | path | yes | string |  |

| Response | Means |
|---|---|
| 204 | Released. |
| 4XX | Error (RFC 9457). |
| 5XX | Error (RFC 9457). |

MCP tools on this operation: [`release_devices`](/reference/mcp/release-devices/).