Create actions
Counts one action of the signed-in caller: a star on a Hanzo repository, verified on GitHub for the login named, or a follow of a founder's link, taken on trust.
POST /v1/marketing/beta/actions
| Address | https://api.hanzo.ai/v1/marketing/beta/actions |
| Method | POST |
| Operation | post_marketing_beta_actions |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Counts one action of the signed-in caller: a star on a Hanzo repository, verified on GitHub for the login named, or a follow of a founder's link, taken on trust. An action already counted changes nothing. A star GitHub does not show answers 422, and a login another account's stars are counted for, 409.
Request
3 fields, body application/json (required).
| Field | In | Type | Required | Description |
|---|---|---|---|---|
action | body | string | — | Action is star or follow. |
github | body | string | — | GitHub is the person's GitHub login, for a star. |
target | body | string | — | Target is the repository starred (hanzoai/<name>) or the founder's link followed (antje or zach, then github, linkedin or x: zach/github). |
Response
| Status | Body | Meaning |
|---|---|---|
200 | marketing.Beta | ok |
default | problem-details | refused |
200 body — 21 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
actions | body | marketing.BetaAction[] | — | Actions are the actions that earned points, oldest first. |
actions[].action | body | string | — | Action is what was done: star, verified on GitHub, or follow, counted on trust. |
actions[].at | body | string | — | At is when it was counted, RFC 3339 in UTC. |
actions[].points | body | integer (int64) | — | Points is what the action earned. |
actions[].target | body | string | — | Target is what it was done to: a repository (hanzoai/ai) for a star, a founder's link (zach/github) for a follow. |
answers | body | marketing.BetaAnswer[] | — | Answers are the application's answers. |
answers[].answer | body | string[] | — | Answer is what the person answered: one entry for a typed answer or a single choice, one entry per option for several. |
answers[].id | body | string | — | ID is the question's id on the form, such as "builds". |
answers[].question | body | string | — | Question is the question as the form asked it. |
applied | body | boolean | — | Applied is whether the account has applied: its record names a program. |
betas | body | string[] | — | Betas are the ids of the unreleased products asked for. |
github | body | string | — | GitHub is the GitHub login the account's stars are counted for. |
lead | body | string | — | Lead is the reference the application was filed under as a lead. |
of | body | integer (int64) | — | Of is how many people are on the waitlist, as the board counts them. |
place | body | integer (int64) | — | Place is the record's place on the waitlist, 1 first; 0 with no record, or when the board did not answer. |
points | body | integer (int64) | — | Points is the sum of what Actions earned. |
program | body | string | — | Program is the program applied to: beta, research or partner. |
requested | body | object | — | Requested is when each of Betas was asked for, RFC 3339 in UTC, by id. |
requested.* | body | string | — | |
score | body | integer (int64) | — | Score is what the waitlist ranks the record by: Points, the account's referrals and its token usage (GET /v1/leaderboard/beta says how). |
since | body | string | — | Since is when the record began, as the CRM stamped it; empty with no record. |
Failure carries the platform error shape — see Errors.
Examples
hanzo marketing beta actionsimport { Configuration, MarketingApi } from 'hanzoai';
const api = new MarketingApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.postMarketingBetaActions({ action: "<action>", github: "<github>" });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_actions(action="<action>", github="<github>")cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)
resp, _, err := client.MarketingAPI.PostMarketingBetaActions(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_actions(&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).postMarketingBetaActions();curl -X POST https://api.hanzo.ai/v1/marketing/beta/actions \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": "<action>",
"github": "<github>"
}'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"
}
}
}'