Skip to main content

Update Webhook Subscription

Updates an existing webhook subscription with new settings.

Endpoint

PUT /v1/webhook-subscriptions/{id}

Authentication

API key required. Include it in the Authorization header:

Authorization: Bearer YOUR_API_KEY

Path Parameters

ParameterTypeDescription
idstringThe ID of the webhook subscription to update.

Request Body

ParameterTypeRequiredDescription
namestringYesA descriptive name for the webhook subscription.
urlstringNoThe URL that will receive webhook notifications
eventsarrayNoArray of event types to subscribe to
secretstringNoA secret key used to sign webhook payloads. Must be at least 8 characters. If left empty, the current secret will be preserved.
activebooleanNoWhether the webhook subscription is active.

Available Events

EventDescription
shipping_channel.createdFires when a new shipping channel is created
shipping_channel.updatedFires when a shipping channel is updated
shipping_channel.deletedFires when a shipping channel is deleted
shipping_channel.validatedFires when a shipping channel is successfully validated
shipping_channel.status_changedFires when a shipping channel's status changes
tracking_parcel.createdFires when a new tracking parcel is created
tracking_parcel.updatedFires when a tracking parcel is updated
tracking_parcel.deletedFires when a tracking parcel is deleted
tracking_parcel.status_changedFires when a tracking parcel's status changes

Example Request Body

{
"name": "Updated Webhook Name",
"url": "https://example.com/webhooks/updated-endpoint",
"events": [
"shipping_channel.created",
"shipping_channel.updated",
"shipping_channel.deleted",
"shipping_channel.status_changed",
"tracking_parcel.status_changed"
],
"active": true
}

Note: If you don't include the secret parameter, the existing secret will be preserved. To update the secret, include the secret parameter with a new value.

Response

200 OK

{
"data": {
"id": "wh_123456",
"name": "Updated Webhook Name",
"url": "https://example.com/webhooks/updated-endpoint",
"events": [
"shipping_channel.created",
"shipping_channel.updated",
"shipping_channel.deleted",
"shipping_channel.status_changed",
"tracking_parcel.status_changed"
],
"secret": "••••••••••••••••",
"active": true,
"created_at": "2025-03-29T16:00:00Z",
"updated_at": "2025-04-07T15:00:00Z"
}
}

Note: For security reasons, the webhook secret is masked in the response.

Error Responses

Status CodeDescription
400Bad Request - Invalid input parameters
401Unauthorized - Invalid or missing API key
403Forbidden - You don't have permission to update this webhook subscription
404Not Found - The specified webhook subscription could not be found
422Unprocessable Entity - Validation errors
429Too Many Requests - Rate limit exceeded
500Server Error - Something went wrong on our end

Validation Errors

If there are validation errors, the response will include details:

{
"error": {
"message": "The given data was invalid.",
"errors": {
"url": [
"The url must be a valid URL."
],
"events": [
"The events must be an array."
]
}
}
}

Example Request

cURL

curl -X PUT \
https://api.shipping-channels.com/v1/webhook-subscriptions/wh_123456 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated Webhook Name",
"url": "https://example.com/webhooks/updated-endpoint",
"events": [
"shipping_channel.created",
"shipping_channel.updated",
"shipping_channel.deleted",
"shipping_channel.status_changed",
"tracking_parcel.status_changed"
],
"active": true
}'

PHP

<?php
$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://api.shipping-channels.com/v1/webhook-subscriptions/wh_123456', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Accept' => 'application/json',
'Content-Type' => 'application/json',
],
'json' => [
'name' => 'Updated Webhook Name',
'url' => 'https://example.com/webhooks/updated-endpoint',
'events' => [
'shipping_channel.created',
'shipping_channel.updated',
'shipping_channel.deleted',
'shipping_channel.status_changed',
'tracking_parcel.status_changed',
],
'active' => true,
],
]);

$data = json_decode($response->getBody(), true);

JavaScript

fetch('https://api.shipping-channels.com/v1/webhook-subscriptions/wh_123456', {
method: 'PUT',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify({
name: 'Updated Webhook Name',
url: 'https://example.com/webhooks/updated-endpoint',
events: [
'shipping_channel.created',
'shipping_channel.updated',
'shipping_channel.deleted',
'shipping_channel.status_changed',
'tracking_parcel.status_changed'
],
active: true
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));