# Create confirm

URL: https://docs.hanzo.ai/docs/openapi/marketing/post-marketing-subscribe-confirm

> Subscribes the address a confirmation link names and answers 200 confirmed.

`POST /v1/marketing/subscribe/confirm`

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

|               |                                                       |
| ------------- | ----------------------------------------------------- |
| **Address**   | `https://api.hanzo.ai/v1/marketing/subscribe/confirm` |
| **Method**    | `POST`                                                |
| **Operation** | `post_marketing_subscribe_confirm`                    |
| **Auth**      | `Authorization: Bearer $HANZO_API_KEY`                |

Subscribes the address a confirmation link names and answers 200
confirmed. The token is the t value in the link's fragment, and it is the only
authority. The subscriber is filed in the brand's CRM: the person, their place
on the Newsletter list, and the confirmation on their timeline with the page
and language it came from, when it was asked for, and when and from which
address it was confirmed (double opt-in). The brand's opt-out for that address
is lifted, since the person asked to come back. Pressing the same link again
answers 200 and changes nothing.

A caller past thirty presses in an hour answers 429, a link that is missing,
malformed, altered or signed elsewhere 400, one older than seven days 410, and
a deployment whose brand cannot hold the CRM 503.

## Request

1 field, body `application/json` (required).

| Field   | In   | Type   | Required | Description                                                                                                                   |
| ------- | ---- | ------ | -------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `token` | body | string | —        | Token is the t value in the fragment of the link the confirmation mail carried (\<brand site>/newsletter/confirm#t=\<token>). |

## Response

| Status    | Body                   | Meaning |
| --------- | ---------------------- | ------- |
| `200`     | marketing.Subscription | ok      |
| `default` | problem-details        | refused |

`200` body — 1 field.

| Field    | In   | Type   | Always | Description                                                                                                                      |
| -------- | ---- | ------ | ------ | -------------------------------------------------------------------------------------------------------------------------------- |
| `status` | body | string | —      | Status is "pending" from subscribe: a link to confirm is on its way, and the answer is the same whatever the address's standing. |

Failure carries the platform error shape — see [Errors](https://docs.hanzo.ai/docs/errors).

## Examples

**CLI**

```bash
hanzo marketing subscribe confirm
```

**SDK**

**.ts**

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

const api = new MarketingApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postMarketingSubscribeConfirm({ token: "<token>" });
```

**.py**

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

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = MarketingApi(client).post_marketing_subscribe_confirm(token="<token>")
```

**.go**

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

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

**.rs**

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

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

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

**.java**

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

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

var result = new MarketingApi(client).postMarketingSubscribeConfirm();
```

The method above is the one at the current release of the document. `hanzoai@8.5.914` (npm) and `hanzoai@8.5.914` (PyPI) were generated from an earlier release, where this operation carried a different id, so it spells the method differently — regenerating the clients is what makes the two agree. [SDKs →](https://docs.hanzo.ai/docs/sdks)

**HTTP**

```bash
curl -X POST https://api.hanzo.ai/v1/marketing/subscribe/confirm \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "token": "<token>"
     }'
```

**MCP**

MCP reaches **marketing** through the `marketing` tool, which names its 82 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_marketing_audiences"
         }
       }
     }'
```

---

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