Confirm a webhook subscription

POST
/hooks/subscriptions/{subscriptionId}

Confirms a webhook subscription by POSTing one signed webhook.ping to its target_url. Answer 2xx and the subscription starts receiving events; any other outcome returns 412 with the reason, and it stays unconfirmed. This is also the way to test a receiver end to end, since it exercises the real signature headers.

Authorization<token>

API key as Bearer token: Authorization: Bearer

In: header

Path Parameters

subscriptionId*string

ID of the webhook subscription, as returned when it was created or listed.

Request Body

application/json

This operation takes no body fields, but the request must still carry Content-Type: application/json and a JSON body: send {}.

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://terac.com/api/external/v2/hooks/subscriptions/string" \  -H "Content-Type: application/json" \  -d '{}'
{
  "id": "string",
  "target_url": "string",
  "event_types": [
    "submission.status.change"
  ],
  "is_enabled": true,
  "confirmed_at": "string",
  "disabled_at": "string",
  "disabled_reason": "string",
  "created_at": "string",
  "updated_at": "string"
}
{
  "code": "BAD_REQUEST",
  "message": "Invalid input data",
  "issues": []
}

{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "API key required. Include Authorization: Bearer <key> header."
  }
}

{
  "error": {
    "code": "FORBIDDEN",
    "message": "This account is not permitted to use the API."
  }
}

{
  "code": "NOT_FOUND",
  "message": "Not found",
  "issues": []
}
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Rate limit exceeded. Retry after 61 seconds."
  }
}
{
  "code": "INTERNAL_SERVER_ERROR",
  "message": "Internal server error",
  "issues": []
}