# Start a Preparation

> Coming soon, upon request — this feature is turned on for your tenant by the Aurea team. [Contact us](https://www.aureahub.com/contact)

Start the auxiliary ceremony of a future wallet now, on this device, so that making the wallet later takes seconds.

## Overview

- The device joins the answer's `sessionId` as `DEVICE` and `BACKUP`, runs the auxiliary ceremony with its own primes, keeps the result sealed on the device, then posts its digest as `DEVICE` (`{ "auxDigest": "<64 hex>" }`, [Relay: Post Result](https://docs.aureahub.com/docs/mpc-relay-result.md)). The preparation is `ready` when Aurea's cosigner's digest is the same ([Prepare the Device in Advance](https://docs.aureahub.com/docs/guide-device-preparation.md) › Your Own Client).
- `cggmp` on `secp256k1`, relay version 2 with the cosigner's roster statement only.
- Bound to the user and to the device key; a preparation makes at most one wallet ([Start DKG Ceremony](https://docs.aureahub.com/docs/mpc-dkg-start.md) › `preparation`). Where your tenant's mode is `shadow`, it runs but no wallet uses it.
- The same `clientRef` again answers the same preparation (`200`), so a retried request never starts a second one.

### `POST /v1/mpc/preparations`

Authentication: bearer token required.

Starts a device preparation and has Aurea's cosigner join its session.

**Request body**

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `deviceKey` | object | yes | `{ "alg": "ES256", "spki" }`: the device's preparation key, public part — a P-256 SubjectPublicKeyInfo (DER), standard base64. Its private part never leaves the device; it proves the device when the wallet is made |
| `clientRef` | string | yes | A UUID the device makes for this preparation; the same request again with it answers the same preparation |
| `scheme` | string | no | `cggmp`, the only engine prepared |
| `curve` | string | no | `secp256k1`, the only curve prepared |
| `wireVersion` | integer | no | The relay version: `2`, the only one a preparation runs on |
| `rosterStatement` | boolean | no | The client waits for the cosigner's signed roster statement: send `true` |

**Responses**

`201` Started

```json
{
  "preparationId": "9a4c1e27-5b3d-4f8a-b6e2-0d7c3a91f5e4",
  "sessionId": "prep-2f6b8d14-7c3e-4a95-8e1d-5b0a9c4f7e32",
  "state": "running",
  "expiresAt": "2026-12-11T09:10:02.118Z"
}
```

`200` The Same clientRef

```json
{
  "preparationId": "9a4c1e27-5b3d-4f8a-b6e2-0d7c3a91f5e4",
  "sessionId": "prep-2f6b8d14-7c3e-4a95-8e1d-5b0a9c4f7e32",
  "state": "running",
  "expiresAt": "2026-12-11T09:10:02.118Z"
}
```

`409` Unavailable

```json
{
  "statusCode": 409,
  "error": "ConflictError",
  "message": "Device preparation is not switched on for this tenant: set the wallet up as before.",
  "details": { "code": "MPC_PREPARATION_UNAVAILABLE", "reason": "off" }
}
```

## Refusals

- `400` `MPC_PREPARATION_INVALID` — the body is not valid, or `deviceKey.spki` is not a P-256 public key.
- `403` — the role cannot run MPC ceremonies, or MPC wallets are not enabled for your tenant.
- `409` `MPC_PREPARATION_UNAVAILABLE` — `details.reason` `off` (your tenant's mode), `tenant_cosigner` (your tenant uses its own co-signer), `wire` (not relay version 2 with the roster statement), `scheme`: make wallets as before.
- `409` `MPC_PREPARATION_LIMIT` — the user already has `maxOpen` open preparations; `409` `MPC_PREPARATION_CONFLICT` — the `clientRef` names another device key's or an ended preparation: make a new one.
- `423` — the tenant or the user is frozen; `429` `MPC_CEREMONY_THROTTLED` — too many requests.
- `503` `MPC_PREPARATION_BUSY` — too many preparations run right now: try again after `Retry-After`.

---

Web version: https://docs.aureahub.com/#mpc-preparations-create
