PUT /v1/alerts/destinations/{name}
Stores where alerts named name go, for this project: a Slack incoming webhook (kind: slack, its https://hooks.slack.com/... URL) or a webhook (kind: webhook, an https URL). The URL is stored encrypted at the edge and never returned. A webhook's deliveries are signed as job webhooks are (B3OS-Signature: t=<t>, v1=<hex HMAC-SHA256 of "<t>.<raw body>">) with a secret B3OS makes when you store the destination: it is in this response only (secret), and rotate: true makes a new one.

Authentication

Bearer Token (b3os_sk_ API key or b3os_pat_ token)

Path Parameters

name string required path
The destination's name, as observe.notify names it.
Min length 1Max length 63Pattern ^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$
Example: "ops-slack"

Request Body required

application/json
kind string REQUIRED
Values slack webhook
url string (uri) REQUIRED
slack: the incoming webhook URL (https://hooks.slack.com/...). webhook: any https URL without a user or password.
Max length 2048
rotate boolean
A webhook only - make a new signing secret (returned once).

Responses

200 The destination; secret once, for a new webhook or a rotation.
application/json
name string REQUIRED
object string REQUIRED
Values alert_destination
kind string REQUIRED
Values slack webhook
host string REQUIRED
The URL's host; the URL itself is never returned.
secret string | null
A webhook's signing secret, in the response that made it only.
secret_hint string | null REQUIRED
created_at string (date-time) REQUIRED
updated_at string (date-time) REQUIRED
400 The request failed validation (invalid_request, invalid_url).
401 Missing, malformed, expired or revoked credentials (unauthorized).
403 Authenticated but not allowed (forbidden, egress_denied).
404 The object does not exist or belongs to another project.
413 The request body exceeds this operation's limit.
415 The Content-Type is not accepted by this operation.
429 A rate, concurrency or quota limit applies (rate_limited, concurrency_limited, quota_exceeded).
500 Something failed inside B3OS (internal). Retry with backoff.
503 The node or the product is not available right now (node_unavailable, product_unavailable, capacity_unavailable).
curl -X PUT 'https://beta-api.b3os.org/v1/alerts/destinations/ops-slack' \  -H 'Authorization: Bearer YOUR_API_TOKEN' \  -H 'Content-Type: application/json' \  -d '{  "kind": "webhook",  "url": "https://hooks.example.com/b3os"}'
const response = await fetch('https://beta-api.b3os.org/v1/alerts/destinations/ops-slack', {  method: 'PUT',  headers: {      "Authorization": "Bearer YOUR_API_TOKEN",      "Content-Type": "application/json"  },  body: JSON.stringify({    "kind": "webhook",    "url": "https://hooks.example.com/b3os"  })});const data = await response.json();console.log(data);
import requestsheaders = {    'Authorization': 'Bearer YOUR_API_TOKEN'}response = requests.put('https://beta-api.b3os.org/v1/alerts/destinations/ops-slack', headers=headers, json={  "kind": "webhook",  "url": "https://hooks.example.com/b3os"})print(response.json())
200 Response
{  "name": "ops-hook",  "object": "alert_destination",  "kind": "webhook",  "host": "hooks.example.com",  "secret": "whsec_ex4mple7ex4mple7ex4mple7ex4mple7",  "secret_hint": "whsec_...mpl7",  "created_at": "2026-11-07T09:00:00.000Z",  "updated_at": "2026-11-07T09:00:00.000Z"}
Ask a question... ⌘I