Patch updates one sync's mutable policy — direction, trigger and actor — in…
Patch updates one sync's mutable policy — direction, trigger and actor — in place.
PATCH /v1/sync/{id}
| Address | https://api.hanzo.ai/v1/sync/{id} |
| Method | PATCH |
| Operation | patch_sync_by_id |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Patch updates one sync's mutable policy — direction, trigger and actor — in place. The endpoints and the kind are immutable: re-pointing a sync is a delete and a create, so a link can never silently start syncing somewhere else. A field the request omits is left as it was. Changing the direction immediately reconciles the derived outbound mirror, so turning push off stops the upstream being written to rather than merely recording the intent.
Request
14 fields, body application/json (required).
| Field | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string | yes | ID is the sync to update, from the path. |
actor | body | string | — | Actor is the loop-guard identity the sync writes as. |
direction | body | string | — | Direction is both, pull, push or off. |
id | body | string | — | ID is the sync to update, from the path. |
kind | body | string | — | Kind names a different kind of sync, and is refused, for the same reason. |
source | body | endpointReq | — | |
source.connector | body | string | — | Connector names the stored credential to reach this endpoint with. |
source.locator | body | string | — | Locator addresses the resource. For a git source it is the https clone URL on the provider's own host, with no embedded credentials; for a native target it is… |
source.provider | body | string | — | Provider is the platform: github or gitlab for a source; a target defaults to the native Hanzo Git plane. |
target | body | endpointReq | — | |
target.connector | body | string | — | Connector names the stored credential to reach this endpoint with. |
target.locator | body | string | — | Locator addresses the resource. For a git source it is the https clone URL on the provider's own host, with no embedded credentials; for a native target it is… |
target.provider | body | string | — | Provider is the platform: github or gitlab for a source; a target defaults to the native Hanzo Git plane. |
trigger | body | string | — | Trigger is webhook, poll or manual. |
Response
| Status | Body | Meaning |
|---|---|---|
200 | syncView | ok |
200 body — 15 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
actor | body | string | — | Actor is the identity a reconcile writes AS. |
createdAt | body | string | — | CreatedAt is when the link was first declared, RFC3339 in UTC. |
direction | body | string | — | Direction is which way work flows: "both", "pull" (target ← source), "push" (source → target), or "off" — which keeps the link declared and moves nothing. |
id | body | string | — | ID is the link's handle, derived from its source and target — which is what makes re-declaring the same pair an update rather than a duplicate. |
kind | body | string | — | Kind is what is being synced. |
source | body | endpointView | — | |
source.connector | body | string | — | Connector names a connected account from the org's connector registry, when the endpoint reaches its provider through one. |
source.locator | body | string | — | Locator addresses the thing INSIDE that provider, in the provider's own terms — an https clone URL for a hosted forge, a bare repository name for hanzo-git. |
source.provider | body | string | — | Provider is the concrete integration: "github", "gitlab" or "hanzo-git". |
target | body | endpointView | — | |
target.connector | body | string | — | Connector names a connected account from the org's connector registry, when the endpoint reaches its provider through one. |
target.locator | body | string | — | Locator addresses the thing INSIDE that provider, in the provider's own terms — an https clone URL for a hosted forge, a bare repository name for hanzo-git. |
target.provider | body | string | — | Provider is the concrete integration: "github", "gitlab" or "hanzo-git". |
trigger | body | string | — | Trigger is what starts a reconcile: "webhook" (the provider tells us), "poll" (we ask on a schedule), or "manual" (only an explicit call). |
updatedAt | body | string | — | UpdatedAt is bumped by every reconcile, so it reads as the LAST-SYNCED time rather than the last edit. |
Failure carries the platform error shape — see Errors.
Examples
hanzo sync update <id>import { Configuration, SyncApi } from 'hanzoai';
const api = new SyncApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.patchSyncById({ id: 'id', actor: "<actor>", direction: "<direction>" });from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import SyncApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = SyncApi(client).patch_sync_by_id(id='id', actor="<actor>", direction="<direction>")cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.SyncAPI.PatchSyncById(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, sync_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = sync_api::patch_sync_by_id(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.SyncApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new SyncApi(client).patchSyncById();curl -X PATCH https://api.hanzo.ai/v1/sync/<id> \
-H "Authorization: Bearer $HANZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"actor": "<actor>",
"direction": "<direction>"
}'The door reaches sync through the sync tool, which names its 6 operations with its own verbs — this one among them, under a name only the door 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": "get_sync"
}
}
}'How is this guide?