---
title: "Update campaign step"
method: PATCH
path: "/v1/campaigns/updateStep"
tags: ["campaigns"]
---

# Update campaign step

`PATCH /v1/campaigns/updateStep`

## Request

- Base URL: `https://api.zevari.ai`
- URL: `https://api.zevari.ai/v1/campaigns/updateStep`
- Auth: HTTP bearer

Transport: call this endpoint with HTTP PATCH and a JSON request body. Invoke Zevari method campaigns.updateStep.

## Request body

- object
  - `step_id` string, required: Campaign step ID (from campaigns_get)
  - `config` object, required: New step config. Canonical outbound fields per action_type: connect→message (optional, ≤300 chars) or messages{slug:text}; message→body (required) or messages{slug:text}; comment→comment_text (required) or messages{slug:text}. For new LinkedIn campaign maps, use exact linkedin_provider_id (ACoAAA...) keys only; for email maps, use exact lead_email keys only. Omit from_address unless the user explicitly provided one; Zevari resolves the verified sender. POST DESTINATIONS (canonical): set config.post_refs = { "<target_key>": { "id": "<numeric_activity_id>" } } for like_post / react_to_post / comment, or { "*": { "id": "..." } } for a global post. For connect/message contextual references, use config.context_post_refs with the same shape. To allow most-recent dynamic resolution, set config.post_resolution = "dynamic". For threaded replies, also set config.comment_id. Submitting config.post_id / post_url / context_post_id / context_post_url as object maps is rejected with invalid_post_destination_shape — use post_refs instead. Use config.instruction for internal notes. config.note is REJECTED.
  - `delay_hours` number: New delay in hours (optional)

## Response `200`

Successful Zevari API response.

- ZevariResponseEnvelope
  - `ok` boolean, required: False when the underlying tool reports an error or a partial failure.
  - `method` string, required: Public API method name.
  - `data` unknown, required
  - `request_id` string, required: Request correlation ID. Also returned in X-Zevari-Request-Id.

## Other responses

- `400`: Invalid arguments or method execution error.
- `401`: Missing, invalid, expired, revoked, or unauthorized API key.
- `404`: Unknown or non-public Zevari API method.
- `429`: API key rate limit exceeded.
- `500`: Unhandled server error.

---

[API](https://skmtc.dev/zevari/apis/zevari-public-api.md) · [All operations](https://skmtc.dev/zevari/apis/zevari-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zevari/apis/zevari-public-api/revisions/a0bc3afac227?raw)
