Create invites

Reserves an invite for each address the limits admit and answers the message the member's mailbox sends for each: subject, text and HTML, the unsubscribe headers, with the member's referral link for that invite and a one-click unsubscribe for that address.

POST /v1/marketing/beta/invites

Addresshttps://api.hanzo.ai/v1/marketing/beta/invites
MethodPOST
Operationpost_marketing_beta_invites
AuthAuthorization: Bearer $HANZO_API_KEY

Reserves an invite for each address the limits admit and answers the message the member's mailbox sends for each: subject, text and HTML, the unsubscribe headers, with the member's referral link for that invite and a one-click unsubscribe for that address. Nothing is sent from here; the member's browser sends each from their own Gmail and reports it to POST /v1/marketing/beta/invites/sent.

An address is skipped, with why, when it is not an email address, is the member's own, cannot be invited (it opted out of the brand's email, its company did, the platform bars it, or it already holds an account: one reason for all, so no one learns which), was invited in the last 30 days, or is past the member's 20 a day or 100 a month. When the limits leave the member nothing to reserve the answer is 429, with Retry-After the seconds until a slot frees.

Request

1 field, body application/json (required).

FieldInTypeRequiredDescription
tobodystring[]—To is the addresses to invite, at most 50.

Response

StatusBodyMeaning
200marketing.BetaInvitesok
defaultproblem-detailsrefused

200 body — 13 fields.

FieldInTypeAlwaysDescription
invitesbodymarketing.BetaInvite[]—Invites are the reserved invites, each with its message.
invites[].headersbodyobject—Headers are the headers the message carries beside its own: the one-click unsubscribe (RFC 8058), List-Unsubscribe and List-Unsubscribe-Post.
invites[].headers.*bodystring—
invites[].htmlbodystring—HTML is the same message as HTML.
invites[].idbodystring—ID is the invite's id: the link's utm_content and what the sent report names.
invites[].linkbodystring—Link is the member's referral link for this invite.
invites[].subjectbodystring—Subject is the message's subject.
invites[].textbodystring—Text is the message's plain text, its unsubscribe line last.
invites[].tobodystring—To is the invited address.
leftbodyinteger (int64)—Left is how many more the member may invite now: the smaller of what is left today and what is left this month.
skippedbodymarketing.BetaInviteSkip[]—Skipped are the addresses not reserved.
skipped[].tobodystring—To is the address as given.
skipped[].whybodystring—Why is the reason: not an email address, your own address, this address cannot be invited, you already invited this address, daily limit reached, monthly limit reached, or too many in one request.

Failure carries the platform error shape — see Errors.

Examples

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

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

resp, _, err := client.MarketingAPI.PostMarketingBetaInvites(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_beta_invites(&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).postMarketingBetaInvites();

The method above is the one at the current release of the document. [email protected] (npm) and [email protected] (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 →

curl -X POST https://api.hanzo.ai/v1/marketing/beta/invites \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "to": [
         "<to>"
       ]
     }'

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.