Update a webhook endpoint
PATCH /v1/webhooks/{id}
Change the URL, the subscribed events, or pause and resume delivery with active. Send only the fields to change. The signing secret is unchanged (rotate it in the console). Recorded in the audit log as webhook.updated. Scope: webhooks:write.
Send your API key as a bearer token: Authorization: Bearer ssms_sk_.... Test keys run this endpoint against the sandbox; see Authentication for key modes and scopes.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Example: we_a1B2c3D4e5F6. |
Request body
JSON (Content-Type: application/json).
| Field | Type | Required | Description |
|---|---|---|---|
url | string (uri) | No | |
events | * or array of string | No | |
active | boolean | No | false pauses delivery; pending retries for a paused endpoint are dropped. |
description | string | No | At most 120 characters. Nullable. |
Responses
| Status | Meaning | Body |
|---|---|---|
| 200 | The updated endpoint | WebhookEndpoint |
| 401 | Missing, malformed, or revoked API key | Error |
| 402 | Billable live calls only: the prepaid credit balance cannot cover the call (insufficient_credits); nothing was done or charged | Error |
| 429 | Rate limit or quota exceeded | Error |
200: WebhookEndpoint fields
| Field | Type | Description |
|---|---|---|
id | string | Example: we_a1B2c3D4e5F6. |
object | webhook_endpoint | |
url | string (uri) | |
events | * or array of string | |
active | boolean | |
description | string | Nullable. |
created_at | string (date-time) |
Errors
| Status | When |
|---|---|
| 401 | Missing, malformed, or revoked API key |
| 402 | Billable live calls only: the prepaid credit balance cannot cover the call (insufficient_credits); nothing was done or charged |
| 429 | Rate limit or quota exceeded |
Every error has the same JSON shape, and request_id matches the X-Request-Id response header. Errors lists every code and what to do about it.
json
{
"error": {
"code": "invalid_request",
"message": "What went wrong, in plain words.",
"param": "the_field",
"request_id": "req_a1B2c3D4e5F6g7H8"
}
}Examples
curl
bash
curl -X PATCH "https://api.joinsimplesms.com/v1/webhooks/we_a1B2c3D4e5F6" \
-H "Authorization: Bearer $SIMPLESMS_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'Node.js
The Node.js SDK does not wrap this endpoint yet; call it with fetch.
javascript
const res = await fetch('https://api.joinsimplesms.com/v1/webhooks/we_a1B2c3D4e5F6', {
method: 'PATCH',
headers: {
Authorization: `Bearer ${process.env.SIMPLESMS_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
});
if (!res.ok) throw new Error((await res.json()).error.message);
const data = await res.json();Python
The Python SDK does not wrap this endpoint yet; call it over HTTP.
python
import json, os, urllib.request
req = urllib.request.Request(
"https://api.joinsimplesms.com/v1/webhooks/we_a1B2c3D4e5F6",
method="PATCH",
headers={
"Authorization": f"Bearer {os.environ['SIMPLESMS_API_KEY']}",
"Content-Type": "application/json",
},
data=json.dumps({}).encode(),
)
with urllib.request.urlopen(req) as res:
data = json.load(res)