# Enable setup

URL: https://docs.hanzo.ai/docs/openapi/iam/post-iam-mfa-setup-enable

> Finishes the enrolment: from here the account's sign-ins ask for this factor.

`POST /v1/iam/mfa/setup/enable`

> [IAM →](https://docs.hanzo.ai/docs/openapi/iam) · [All API references →](https://docs.hanzo.ai/docs/openapi) · [Get started →](https://docs.hanzo.ai/docs/guides)

|               |                                                |
| ------------- | ---------------------------------------------- |
| **Address**   | `https://api.hanzo.ai/v1/iam/mfa/setup/enable` |
| **Method**    | `POST`                                         |
| **Operation** | `post_iam_mfa_setup_enable`                    |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`         |

Finishes the enrolment: from here the account's sign-ins ask for this factor.
It requires the proof initiate handed out — a passcode from the authenticator, or the
code that was sent — and verifies it BEFORE writing anything.

Verifying BEFORE writing is what keeps a client that never completed the proof —
a skipped verify step, a QR scanned into the wrong app, a bug — from switching on
a factor no code can satisfy. That would lock the account out with no
self-service way back: the gate holds the sign-in before minting, so the person
could not obtain the bearer that disable requires.

The recovery codes are minted here and returned ONCE, on the first factor the
account adds. Answering with them is the way back in when no factor can be
produced, so they are the same value the row's digests were made from — by
construction, not by a client echoing them back.

## Request

The document declares no body for `POST /v1/iam/mfa/setup/enable`. The handler is typed in cloud but its shape is not yet emitted, so the fields are not listed here — ask MCP's `describe` for `post_iam_mfa_setup_enable`, which answers from the running route.

## Response

The document declares no response body for this operation. It answers `200` on success and the platform error shape on failure — see [Errors](https://docs.hanzo.ai/docs/errors).

## Examples

**CLI**

```bash
hanzo iam mfa setup enable
```

**SDK**

**.ts**

```ts
import { Configuration, IamApi } from 'hanzoai';

const api = new IamApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postIamMfaSetupEnable();
```

**.py**

```python
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import IamApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = IamApi(client).post_iam_mfa_setup_enable()
```

**.go**

```go
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.IamAPI.PostIamMfaSetupEnable(context.Background()).Execute()
if err != nil {
	return err
}
```

**.rs**

```rust
use hanzo_client::apis::{configuration::Configuration, iam_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = iam_api::post_iam_mfa_setup_enable(&cfg, Default::default()).await?;
```

**.java**

```java
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.IamApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new IamApi(client).postIamMfaSetupEnable();
```

**HTTP**

```bash
curl -X POST https://api.hanzo.ai/v1/iam/mfa/setup/enable \
  -H "Authorization: Bearer $HANZO_API_KEY"
```

**MCP**

MCP reaches **iam** through the `iam` tool, which names its 44 operations with its own verbs — this one among them, under a name only MCP declares. `describe` explains any of them:

```bash
curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "describe",
         "arguments": {
           "op": "list_iam_applications"
         }
       }
     }'
```

---

[IAM API](https://docs.hanzo.ai/docs/openapi/iam) · [All Hanzo APIs](https://docs.hanzo.ai/docs/openapi) · [Interactive reference](https://docs.hanzo.ai/docs/openapi/reference)
