Skip to main content
GET
/
api
/
public
/
v1
/
webhooks
/
{webhookId}
curl -sS https://app.opentrain.ai/api/public/v1/webhooks/<WEBHOOK_ID> \
  -H "Authorization: Bearer $OT_API_TOKEN"
{
  "webhook": {
    "id": "<WEBHOOK_ID>",
    "url": "https://example.com/hooks/opentrain",
    "eventTypes": ["proposal.received", "message.received", "approval.confirmed"],
    "status": "ACTIVE",
    "createdAt": "2026-06-12T10:00:00.000Z",
    "disabledAt": null,
    "disabledReason": null
  }
}
Reads one webhook subscription. The most common use is health-checking: if your endpoint has stopped receiving events, read the subscription and check status — a DISABLED webhook receives no deliveries, and disabledReason explains why (typically repeated delivery failures; see the delivery lifecycle). The signing secret is never returned — it is shown only once at creation. If it is lost, delete the subscription and create a new one. Webhooks belonging to another account return 404. Requirements: webhooks:manage scope + the public_api_webhooks feature.

Request

webhookId
string
required
The webhook subscription ID.

Response

webhook
object

Errors

StatuscodeMeaning
401UNAUTHORIZEDMissing or invalid token
403FORBIDDENMissing webhooks:manage scope, or public_api_webhooks disabled
404NOT_FOUNDNo such webhook, or it belongs to another account (details: {resource: "webhooks", webhookId})
curl -sS https://app.opentrain.ai/api/public/v1/webhooks/<WEBHOOK_ID> \
  -H "Authorization: Bearer $OT_API_TOKEN"
{
  "webhook": {
    "id": "<WEBHOOK_ID>",
    "url": "https://example.com/hooks/opentrain",
    "eventTypes": ["proposal.received", "message.received", "approval.confirmed"],
    "status": "ACTIVE",
    "createdAt": "2026-06-12T10:00:00.000Z",
    "disabledAt": null,
    "disabledReason": null
  }
}