Create steps

Appends a message to the END of a sequence: the new step's idx is one past the last, so steps arrive in the order they are added.

POST /v1/marketing/sequences/{id}/steps

Addresshttps://api.hanzo.ai/v1/marketing/sequences/{id}/steps
MethodPOST
Operationpost_marketing_sequences_by_id_steps
AuthAuthorization: Bearer $HANZO_API_KEY

Appends a message to the END of a sequence: the new step's idx is one past the last, so steps arrive in the order they are added. Body is required and delaySeconds must be >= 0. Adding a step does not disturb enrollments already walking — one that has passed this index simply never sees it.

Request

5 fields, body application/json (required).

FieldInTypeRequiredDescription
idpathstringyesSequenceID is the sequence id from the path (the route's :id).
bodybodystring—Body is the message text.
delaySecondsbodyinteger (int64)—DelaySeconds is how long after the previous step this one sends (after enrollment, for the first step).
idbodystring—SequenceID is the sequence id from the path (the route's :id).
subjectbodystring—Subject is the email subject line, capped at 1024 bytes.

Response

StatusBodyMeaning
200marketing.Stepok
defaultproblem-detailsrefused

200 body — 7 fields.

FieldInTypeAlwaysDescription
bodybodystring—Body is the message text.
createdAtbodyinteger (int64)—CreatedAt is unix seconds, server-assigned.
delaySecondsbodyinteger (int64)—DelaySeconds is how long after the previous step this one sends (after enrollment, for step 0).
idbodystring—ID is the server-assigned step id ("step_" + 128 random bits).
idxbodyinteger (int64)—Idx is the step's 0-based position, assigned by appending: a new step always lands after the last one.
sequenceIdbodystring—SequenceID is the sequence this step belongs to.
subjectbodystring—Subject is the email subject line, capped at 1024 bytes.

Failure carries the platform error shape — see Errors.

Examples

hanzo marketing sequences steps create <id>
import { Configuration, MarketingApi } from 'hanzoai';

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

resp, _, err := client.MarketingAPI.PostMarketingSequencesByIdSteps(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_sequences_by_id_steps(&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).postMarketingSequencesByIdSteps();
curl -X POST https://api.hanzo.ai/v1/marketing/sequences/<id>/steps \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "body": "<body>",
       "delaySeconds": 0
     }'

MCP reaches marketing through the marketing tool, which names its 35 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?