Retry deliveries

Posts a delivery's response to its webhook again, now, and answers how it went.

POST /v1/form/forms/{id}/webhooks/{webhook}/deliveries/{delivery}/retry

Addresshttps://api.hanzo.ai/v1/form/forms/{id}/webhooks/{webhook}/deliveries/{delivery}/retry
MethodPOST
Operationredeliver_form_webhook
AuthAuthorization: Bearer $HANZO_API_KEY

Posts a delivery's response to its webhook again, now, and answers how it went. A delivery that failed, or was waiting on a retry when the service restarted, is sent this way. An org admin only.

Request

3 fields.

FieldInTypeRequiredDescription
idpathstringyesID is the form's id or slug, from the path.
webhookpathstringyesWebhook is the webhook's id, from the path.
deliverypathstringyesDelivery is the delivery's id, from the path.

Response

StatusBodyMeaning
200form.Deliveryok
defaultproblem-detailsrefused

200 body — 10 fields.

FieldInTypeAlwaysDescription
attemptsbodyinteger (int64)—Attempts is how many posts were made.
codebodyinteger (int64)—Code is the last HTTP status the address answered; 0 when it did not answer.
createdbodystring—Created is when the first attempt was made, RFC 3339.
errorbodystring—Error is why the last attempt failed.
idbodystring—ID is the delivery's id; the body carries it as event_id.
nextbodystring—Next is when the next attempt is due, RFC 3339; empty when none is.
responsebodystring—Response is the response's id.
statusbodystring—Status is delivered, retrying or failed.
updatedbodystring—Updated is when the last was, RFC 3339.
webhookbodystring—Webhook is the webhook's id.

Failure carries the platform error shape — see Errors.

Examples

hanzo form forms webhooks deliveries retry <id> <webhook> <delivery>
import { Configuration, FormApi } from 'hanzoai';

const api = new FormApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.redeliverFormWebhook({ id: 'id', webhook: 'webhook', delivery: 'delivery' });
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).redeliver_form_webhook(id='id', webhook='webhook', delivery='delivery')
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.FormAPI.RedeliverFormWebhook(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::redeliver_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).redeliverFormWebhook();

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/<webhook>/deliveries/<delivery>/retry \
  -H "Authorization: Bearer $HANZO_API_KEY"

Tool form, op redeliver_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": "redeliver_form_webhook",
           "input": {
             "id": "<id>",
             "webhook": "<webhook>",
             "delivery": "<delivery>"
           }
         }
       }
     }'

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.