---
title: "Update url, subscribed events, or the disabled flag."
method: PATCH
path: "/webhooks/{id}"
tags: ["webhooks"]
---

# Update url, subscribed events, or the disabled flag.

`PATCH /webhooks/{id}`

## Request

- Base URL: `https://api.agentisend.com`
- URL: `https://api.agentisend.com/webhooks/{id}`
- Auth: HTTP bearer

## Path parameters

- `id` string, uuid, required

## Headers

- `Idempotency-Key` string
- `Resend-Idempotency-Key` string

## Request body

- PatchWebhooksByIdBody
  - `url` string, uri: A new https URL. The previous URL stops receiving events.
  - `endpoint` string, uri: Same as url. url wins if both are sent.
  - `events` union[]: Replace the event list. * subscribes to every type.
    - union
      - '*'
      - 'email.queued' | 'email.sent' | 'email.delivered' | 'email.delivery_delayed' | 'email.bounced' | 'email.complained' | 'email.opened' | 'email.clicked' | 'email.failed' | 'email.scheduled' | 'email.canceled' | 'email.suppressed' | 'domain.created' | 'domain.verified' | 'domain.failed' | 'domain.updated' | 'domain.deleted' | 'suppression.added' | 'suppression.removed' | 'limit.warning' | 'limit.exceeded' | 'agent.approval_requested' | 'agent.approved' | 'agent.rejected' | 'agent.killed' | 'contact.created' | 'contact.updated' | 'contact.deleted' | 'segment.joined' | 'segment.left' | 'segment.created' | 'segment.updated' | 'segment.deleted' | 'broadcast.scheduled' | 'broadcast.sent' | 'broadcast.updated' | 'automation.triggered' | 'email.received' | 'topic.created' | 'topic.updated' | 'topic.deleted' | 'contact.subscribed' | 'contact.unsubscribed' | 'trust.warning' | 'trust.throttled' | 'trust.paused' | 'trust.appealed' | 'trust.restored'
  - `disabled` boolean: true stops delivery without deleting the endpoint.
  - `status` 'enabled' | 'disabled': Same as disabled: disabled stops delivery, enabled resumes it. disabled wins if both are sent.
  - `svix_compat` boolean: Also sign each delivery the way a Svix receiver already verifies. Off unless set.
  - `payload_format` 'native' | 'resend': native is this API’s envelope. resend is the envelope a Resend receiver already parses.

## Response `200`

Success

- GetWebhooksByIdReply
  - `object` 'webhook', required
  - `id` string, uuid, required
  - `url` string, required
  - `endpoint` string, required
  - `events` string[], required
  - `disabled` boolean, required
  - `status` 'enabled' | 'disabled', required
  - `svix_compat` boolean, required
  - `payload_format` 'native' | 'resend', required
  - `last_delivery_status` 'pending' | 'retrying' | 'delivered' | 'dead_lettered', nullable, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `400`: The request is malformed or a field failed validation. Codes: validation_error, invalid_idempotency_key, invalid_cursor, plan_not_purchasable, stripe_signature_invalid, support_upload_rejected, sign_in_check_required.
- `401`: No usable credential was sent. Codes: missing_api_key, session_required, mfa_required.
- `403`: The credential may not do this, or the account or key is stopped. Codes: sending_domain_blocked, young_domain_held, domain_sending_disabled, domain_not_verified, onboarding_recipient_not_a_member, onboarding_sender_unavailable, account_suspended, account_sandboxed, human_action_required, csrf_origin_rejected, charge_not_this_account, invalid_api_key, restricted_api_key, insufficient_role, invite_email_mismatch, domain_scope_violation, dedicated_ip_assigned_by_us, approval_required, staff_review_required, trust_paused, kill_switch_active.
- `404`: Nothing with this id exists on the account. Codes: billing_customer_missing, not_found, session_expired, support_ticket_not_found.
- `409`: The request conflicts with the current state. Codes: domain_already_exists, template_name_taken, template_alias_taken, template_in_use, segment_in_use, contact_resubscribe_required, email_still_scheduled, domain_verified_elsewhere, domain_not_claimable, return_path_subdomain_in_use, overage_not_on_plan, term_not_on_sale, subscription_active, portal_change_unavailable, already_in_account, idempotency_in_flight, idempotency_payload_mismatch, approval_expired, support_closed, support_reopen_expired, support_merge_conflict, support_reply_too_soon.
- `413`: The request body is larger than this operation accepts. Codes: payload_too_large, support_upload_too_large.
- `415`: The request body is not JSON. Codes: unsupported_media_type.
- `429`: A rate, quota or ramp ceiling was reached. Codes: onboarding_daily_cap_reached, trust_throttled, invite_limit_reached, rate_ceiling_exceeded, daily_quota_exceeded, monthly_quota_exceeded, rate_limit_exceeded, support_rate_limited.
- `500`: Something failed on our side. Codes: internal_server_error.

---

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