List unsubscribe

The PUBLIC one-click endpoint (no principal): a recipient clicks the signed link in an email footer.

GET /v1/marketing/unsubscribe

Addresshttps://api.hanzo.ai/v1/marketing/unsubscribe
MethodGET
Operationget_marketing_unsubscribe
AuthAuthorization: Bearer $HANZO_API_KEY

The PUBLIC one-click endpoint (no principal): a recipient clicks the signed link in an email footer. The token binds (org, channel, address), so a caller can only opt OUT exactly the tuple it was minted for — never another address and never another org. An invalid token is refused, and a deployment with no KMS-sealed key refuses rather than accepting anything.

Request

4 fields.

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).

Response

StatusBodyMeaning
200marketing.Unsubscribedok
defaultproblem-detailsrefused

200 body — 3 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.
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
import { Configuration, MarketingApi } from 'hanzoai';

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

resp, _, err := client.MarketingAPI.GetMarketingUnsubscribe(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::get_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).getMarketingUnsubscribe();
curl https://api.hanzo.ai/v1/marketing/unsubscribe \
  -H "Authorization: Bearer $HANZO_API_KEY"

Tool marketing, op get_marketing_unsubscribe — POST the JSON-RPC envelope to https://api.hanzo.ai/v1/mcp.

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "marketing",
         "arguments": {
           "op": "get_marketing_unsubscribe",
           "input": {}
         }
       }
     }'

Marketing API · All Hanzo APIs · Interactive reference

Was this page useful?