https://api.veriko.mx/v1/webhooks/{id}Update a webhook endpoint
How-to guide →Updates the receiving address, the subscribed events, or the status of an already registered endpoint. Only what arrives in the body changes: an absent field stays as it was, and a body with no editable field responds with an HTTP 422 status (with no_valid_fields in the body).
The signing secret does not change here. Changing the address leaves the same secret on the new endpoint, so a receiver that already validated signatures keeps validating them. To rotate it there is POST /v1/webhooks/{id}/regenerate-secret.
Setting the status to disabled stops deliveries without losing the history; that is the move while a downed receiver is being fixed, rather than deleting the endpoint and creating it again.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
id* | path | string (uuid) | required | Unique identifier of the webhook endpoint (UUID v4). e.g.f47ac10b-58cc-4372-a567-0e02b2c3d479 |
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string (uri) (?–2048) | optional | New receiver URL. It is rejected if it does not resolve to a public address or is longer than 2048 characters and, in production, also if it does not use HTTPS. e.g.https://example.com/webhooks/entregas |
events | array<string> (items: 1–10) | optional | New events the endpoint subscribes to. They replace the previous list. Between 1 and 10. |
description | string | nullnullable (?–255) | optional | New free-form label to tell this endpoint apart from the others. Alta de pagos en el ERP |
status | string (enum) | optional | Webhook status. active |
curl -X PUT 'https://api.veriko.mx/v1/webhooks/{id}' \
-H 'Authorization: Bearer veriko_••••' \
-H 'Content-Type: application/json' \
-d '{
"url": "https://webhook.example.com/platform",
"events": [
"validation.completed"
],
"status": "active"
}'Python example — coming soon.
JavaScript example — coming soon.
PHP example — coming soon.
| Field | Type | Description |
|---|---|---|
type* | string | JSON:API resource type. Always webhook_endpoint |
id* | string (uuid) | Unique identifier of the webhook endpoint (UUID v4). e.g.a1b2c3d4-e5f6-7890-abcd-ef0123456789 |
attributes* | object | Webhook endpoint data (receiver URL, subscribed events, status, and secret). |
url* | string (uri) | URL that receives the webhook. In production it is rejected if it does not use HTTPS, if it resolves to a private address, or if it is longer than 2048 characters. e.g.https://example.com/webhooks/entregas |
events* | array (items: 1–10, unique items) | Events the endpoint subscribes to, from 1 to 10. |
description* | string | nullnullable | Free-form label to tell this endpoint apart from the others. e.g.Alta de pagos en el ERP |
status* | string |
active |
consecutive_failures* | integer | Number of consecutive failures. Resets on the first success. e.g.0 |
last_delivery_at* | TimestampUTC | null | Date and time of the last successful delivery, in ISO 8601 UTC. |
secret | string | Shared secret for signature verification. Only present in the create and rotate-secret responses; omitted from every other response. It is used to validate the a0b1c2d3e4f5061728394a5b6c7d8e9f00112233445566778899aabbccddeeff |
secret_hint | string | Last 4 characters of the secret, prefixed with ...4f2a |
created_at* | string (date-time) | ISO 8601 timestamp in UTC with an explicit 2026-05-01T05:14:38Z |
updated_at* | string (date-time) | ISO 8601 timestamp in UTC with an explicit 2026-05-01T05:14:38Z |
| Status | Class | Description | Body |
|---|---|---|---|
| 200 | 2xx | Webhook endpoint updated. | WebhookEndpoint |
| 400 | 4xx | The request body is empty or is not valid JSON, or the new URL does not resolve to a public address. | ErrorResponse |
| 401 | 4xx | Authentication is required or the provided credentials are invalid. | ErrorResponse |
| 403 | 4xx | Insufficient permissions. | ErrorResponse |
| 404 | 4xx | not_found: Endpoint does not exist or does not belong to the user. | ErrorResponse |
| 413 | 4xx | The request body exceeds the maximum accepted size (body_too_large). | ErrorResponse |
| 422 | 4xx | Invalid data. Possible codes: webhook_url_invalid_type, webhook_url_empty, webhook_url_too_long, webhook_url_invalid_format, webhook_url_not_https, webhook_events_required, webhook_events_too_many, webhook_event_invalid, webhook_description_invalid_type, webhook_description_too_long, webhook_status_invalid, no_valid_fields. A description longer than 255 characters responds webhook_description_too_long. Every field-level error carries source.pointer. | ErrorResponse |
| 429 | 4xx | Rate limit exceeded | ErrorResponse |
| Status | Code | Example |
|---|---|---|
| 400 | body_empty | The request body is empty. Envelope
|
| 400 | invalid_json | The body is not valid JSON. Envelope
|
| 400 | url_dns_failed | The host name could not be resolved. Envelope
|
| 400 | url_ssrf_blocked | The given URL resolves to a non-public address. Envelope
|
| 401 | unauthorized | Invalid or missing authentication credentials. Envelope
|
| 403 | permission_denied | You do not have permission to access this resource. Envelope
|
| 413 | body_too_large | The request body is too large. Envelope
|
| 429 | rate_limit_exceeded | Rate limit exceeded. Try again in 45 seconds. Envelope
Response headers
|