bird webhooks update <webhook-id> [flags]
Update a webhook endpoint
Change an endpoint's URL, description, subscribed event types, or delivery status. Only the fields sent change: events replaces the whole subscription set, and status pauses or re-enables delivery. Events fired while paused are not delivered. On a connector endpoint, --field and the secret flags replace the fields they name and keep the rest; every send, retries included, uses the new credentials, and deliveries prepared after the change use the new fields. Secret values are never printed, and no response includes them.
Build the request from flags, a JSON WebhookEndpointUpdate body via --body-file ("-" reads
stdin), or both — a flag overrides the matching body field. Run --example to
print a ready-to-edit body, or --dry-run to print the resolved request without
sending it.
# print the body shape (no credentials needed)
bird webhooks update --example
# the body it prints:
{
"description": "Updated webhook endpoint",
"events": ["email.delivered", "email.bounced", "email.complained"],
"status": "active",
"url": "https://example.com/webhook"
}
# rotate a connector endpoint's API key without it reaching argv or shell history
bird webhooks update whk_123 --credential api_key=- < claude-key.txt
| Name | Description |
|---|
--url | Replacement delivery URL. Same rules as at creation: HTTPS, at most 2048 characters, and the host must be publicly reachable (private, loopback, and link-local addresses return a 422). Omit to keep the current URL. A connector endpoint's URL comes from its connector and cannot be replaced: any value returns a 422. |
--description | Human-readable label for this endpoint, up to 256 characters. |
--events <v1,v2,…> | Replaces all event subscriptions with this list. Omit to keep the current set. Types outside the event catalog return a 422. See https://bird.com/docs/guides/webhooks#event-catalog for the current values. |
--status | paused stops all deliveries; active re-enables a paused endpoint. Omit to leave the status unchanged. Events that fire while paused are not delivered and a replay cannot recover them, because they were never attempted; after re-enabling, Replay failed deliveries reaches only the deliveries that failed before the pause. A degraded endpoint cannot be reset through this field: it returns to active automatically once deliveries succeed again. Possible values: active, paused. |
| Name | Description |
|---|
--field <key=value> | A new value for a nonsecret field of the endpoint's connector, as name=value; repeat for each. Secret fields take --credential, never a value on the command line. |
--credential <key=value> | A secret field of the connector, as name=FILE: the file holding its value, or - for stdin. Repeat for each; only one can read stdin. The value never goes on the command line. |
| Name | Description |
|---|
--body-file | Read the JSON request body from this file; "-" reads stdin |
--example | Print a complete example request body, then exit |
--dry-run | Print the resolved request without sending it, then exit |
--idempotency-key | Deduplication key; a retry with the same key won't act twice |
| Name | Description |
|---|
--response-schema | Print the fields this command returns, then exit |