Create webhooks

Adds a webhook to a form: every completed response is posted to its https address as JSON, signed with Hanzo-Signature: t=<unix seconds>,sha256=<base64 of HMAC-SHA256(secret, "<seconds>." + body)>; a receiver refuses a timestamp older than five minutes and an event_id it has seen.

POST /v1/form/forms/{id}/webhooks

Addresshttps://api.hanzo.ai/v1/form/forms/{id}/webhooks
MethodPOST
Operationcreate_form_webhook
AuthAuthorization: Bearer $HANZO_API_KEY

Adds a webhook to a form: every completed response is posted to its https address as JSON, signed with Hanzo-Signature: t=<unix seconds>,sha256=<base64 of HMAC-SHA256(secret, "<seconds>." + body)>; a receiver refuses a timestamp older than five minutes and an event_id it has seen. The secret is the one given (16 to 256 characters) or one minted, kept in KMS and answered here once. A form has at most the platform's number of webhooks. An org admin only.

Request

8 fields, body application/json (required).

FieldInTypeRequiredDescription
idpathstringyesID is the form's id or slug, from the path.
enabledbodyboolean—Enabled is whether responses are posted.
idbodystring—ID is the form's id or slug, from the path.
rotatebodyboolean—Rotate mints a new secret on a replace, and answers it.
secretbodystring—Secret sets the signing secret: 16 to 256 characters.
tagbodystring—Tag names the webhook in its form, at most 64 characters.
urlbodystring—URL is the https address posted to.
webhookbodystring—Webhook is the webhook's id, from the path of a replace.

Response

StatusBodyMeaning
201form.Webhookcreated
defaultproblem-detailsrefused

201 body — 8 fields.

FieldInTypeAlwaysDescription
createdbodystring—Created is when the webhook was made, RFC 3339.
enabledbodyboolean—Enabled is whether responses are posted.
formbodystring—Form is the form's id.
idbodystring—ID is the webhook's id.
secretbodystring—Secret is the signing secret, answered once: when the webhook is made or its secret is set or rotated.
tagbodystring—Tag names the webhook in its form.
updatedbodystring—Updated is when it last changed, RFC 3339.
urlbodystring—URL is the https address posted to.

Failure carries the platform error shape — see Errors.

Examples

hanzo form forms webhooks create <id>
import { Configuration, FormApi } from 'hanzoai';

const api = new FormApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.createFormWebhook({ id: 'id', enabled: false, id: "<id>" });
from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import FormApi

client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = FormApi(client).create_form_webhook(id='id', enabled=False, id="<id>")
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.FormAPI.CreateFormWebhook(context.Background()).Execute()
if err != nil {
	return err
}
use hanzo_client::apis::{configuration::Configuration, form_api};

let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();

let result = form_api::create_form_webhook(&cfg, Default::default()).await?;
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.FormApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new FormApi(client).createFormWebhook();

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/form/forms/<id>/webhooks \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "enabled": false,
       "id": "<id>"
     }'

Tool form, op create_form_webhook — POST the JSON-RPC envelope to https://api.hanzo.ai/v1/mcp.

curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "form",
         "arguments": {
           "op": "create_form_webhook",
           "input": {
             "id": "<id>",
             "enabled": false
           }
         }
       }
     }'

Form 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.