Create unsubscribe

The one-click unsubscribe a mail client sends from the List-Unsubscribe header (RFC 8058): the same signed link the footer carries, POSTed with the form body List-Unsubscribe=One-Click.

POST /v1/marketing/unsubscribe

Addresshttps://api.hanzo.ai/v1/marketing/unsubscribe
MethodPOST
Operationpost_marketing_unsubscribe
AuthAuthorization: Bearer $HANZO_API_KEY

The one-click unsubscribe a mail client sends from the List-Unsubscribe header (RFC 8058): the same signed link the footer carries, POSTed with the form body List-Unsubscribe=One-Click. It opts out exactly what a click on the link does, under the same token check, and is as public.

Request

6 fields, body application/x-www-form-urlencoded (required).

FieldInTypeRequiredDescription
orgquerystring—Org is the org the link was minted for.
channelquerystring—Channel is the surface to opt out of.
addressquerystring—Address is the recipient to opt out.
tokenquerystring—Token is the HMAC over (org, channel, address), the only authority here.
listquerystring—List is the marketing list the link leaves, as on the signed link.
List-Unsubscribebodystring—OneClick is the form's List-Unsubscribe field, "One-Click" from a mail client.

Response

StatusBodyMeaning
200marketing.Unsubscribedok
defaultproblem-detailsrefused

200 body — 6 fields.

FieldInTypeAlwaysDescription
addressbodystring—Address is the recipient now opted out, normalized (lower-cased, trimmed) to the form the send gate matches on — so it can differ in case from the address the link carried.
channelbodystring—Channel is the ONE surface opted out of: email, sms, social, meta, google or tiktok.
companybodystring—Company is the domain opted out whole, when the link asked for it.
listbodystring—List is the marketing list the address left, when the link was a list's.
offerbodystring—Offer is the domain the reader may opt out whole by asking again with company=true: the company's own domain, never a free mail provider's.
unsubscribedbodyboolean—Unsubscribed is always true here: the opt-out is idempotent, so a second click on the same link confirms the same thing rather than reporting nothing changed.

Failure carries the platform error shape — see Errors.

Examples

hanzo marketing unsubscribe create
import { Configuration, MarketingApi } from 'hanzoai';

const api = new MarketingApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postMarketingUnsubscribe({ List-Unsubscribe: "<List-Unsubscribe>" });
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_unsubscribe(list-unsubscribe="<List-Unsubscribe>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.MarketingAPI.PostMarketingUnsubscribe(context.Background()).Execute()
if err != nil {
	return err
}
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_unsubscribe(&cfg, Default::default()).await?;
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).postMarketingUnsubscribe();
curl -X POST https://api.hanzo.ai/v1/marketing/unsubscribe \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d '{
       "List-Unsubscribe": "<List-Unsubscribe>"
     }'

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:

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 · All Hanzo APIs · Interactive reference

Was this page useful?
Broken link or missing step? Drop it in #docs on Discord or open a PR.