Skip to content

List webhooks

GET
/api/v1/organizations/{orgID}/webhooks
curl --request GET \
--url 'https://api.aetherplatform.cloud/api/v1/organizations/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/webhooks?limit=50' \
--header 'Authorization: Bearer <token>'

Lists the organization’s webhooks. Responses never include the signing secret.

orgID
required
string format: uuid

Organization UUID.

cursor
string format: uuid

Opaque cursor (a UUID) for pagination; pass back the prior page’s next_cursor.

limit
integer
default: 50 >= 1 <= 100

Maximum number of items per page (1-100, default 50).

A page of webhooks.

Media typeapplication/json
object
items
required
Array<object>
object
id
required
string format: uuid
org_id
required
string format: uuid
url
required

Delivery endpoint. Must be https, without embedded credentials, and must not point at private or internal address ranges.

string
description
required
string
events
required

Subscribed event types, validated against the catalog: cluster.created, cluster.ready, cluster.upgraded, cluster.degraded, cluster.deleted, node.replaced, usage.alert, invoice.generated, ticket.updated — or exactly ["*"] to subscribe to every catalog type. usage.alert fires once per budget threshold crossed in a month; its payload is {budget_eur, spend_eur, threshold_pct, billing_month}. invoice.generated fires at month close when an org’s invoice is generated; its payload is {invoice_id, invoice_number, amount_cents, currency, period_start, period_end}. It also fires when an issued invoice is voided and re-issued under a new number (a discount code applied on Pay): that payload additionally carries replaces_invoice_id, the id of the voided invoice, so the same period arrives a second time and the earlier invoice must be reversed, not added to. The field is absent from a month-close event. ticket.updated fires whenever a support ticket is created, receives a new message, or changes status; its payload is {ticket_id, status, severity, category, last_message_author_type, updated_at} where last_message_author_type is tenant or provider for a message event and empty ("") for a status-only change.

Array<string>
enabled
required

Disabled webhooks receive no deliveries.

boolean
secret

Server-generated signing secret (whsec_<hex>). Returned once — present only in create and rotate-secret responses; list and get never include it.

string
created_at
required
string format: date-time
updated_at
required
string format: date-time
next_cursor
string | null
Examplegenerated
{
"items": [
{
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"org_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"url": "example",
"description": "example",
"events": [
"example"
],
"enabled": true,
"secret": "example",
"created_at": "2026-04-15T12:00:00Z",
"updated_at": "2026-04-15T12:00:00Z"
}
],
"next_cursor": "example"
}

Missing or invalid credentials.

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
status_url

The platform status page (https://status.aetherplatform.cloud). Present on 5xx answers written by the API’s error writer and on no other; absent, not null, on 4xx.

string format: uri
decline_code

The payment provider’s decline code. Present only on 402 payment_declined; it is its own field and is never folded into message.

string
invoice_id

Present on exactly these errors of the invoice pay and pay/confirm endpoints: 402 payment_declined, 402 payment_method_required, 409 invoice_already_paid, 409 invoice_not_issued, 409 invoice_below_minimum, 409 payment_not_in_flight, and 409 invoice_void when the void invoice was replaced. It is the id of the live invoice, which after a re-issue is the replacement and not the id in the request URL (on 409 invoice_void from pay/confirm it is the replacement’s id). Absent on every other error — 400 (including discount_code_invalid), 403, 404, the discount_* 409s, 409 invoice_void with no replacement (nothing live to name), every 5xx and 503 code — and never null.

string format: uuid
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
],
"status_url": "https://example.com",
"decline_code": "example",
"invoice_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
}
}

Refused by the organization role policy (see Authorization in the API description). error.code is forbidden when the caller is not a member of the organization (or the API token belongs to another organization), insufficient_role when the caller’s organization role is below the operation’s minimum role, and token_not_permitted when the request was authenticated with an API token on an operation API tokens may not use (the API Tokens operations; the handler-gated operations named in the API description: deleting the organization, changing a member’s role or payment_mode, paying an invoice including its confirm step, and discounts; and for a cluster-pinned machine token every operation except the loadbalancer-ips and loadbalancer-vms operations). email_unverified when a portal user’s e-mail address is not verified (see Authentication).

Media typeapplication/json
object
error
required
object
code
required

A stable, machine-readable error code.

string
message
required
string
details
Array<object>
object
field
required
string
code
required
string
message
required
string
status_url

The platform status page (https://status.aetherplatform.cloud). Present on 5xx answers written by the API’s error writer and on no other; absent, not null, on 4xx.

string format: uri
decline_code

The payment provider’s decline code. Present only on 402 payment_declined; it is its own field and is never folded into message.

string
invoice_id

Present on exactly these errors of the invoice pay and pay/confirm endpoints: 402 payment_declined, 402 payment_method_required, 409 invoice_already_paid, 409 invoice_not_issued, 409 invoice_below_minimum, 409 payment_not_in_flight, and 409 invoice_void when the void invoice was replaced. It is the id of the live invoice, which after a re-issue is the replacement and not the id in the request URL (on 409 invoice_void from pay/confirm it is the replacement’s id). Absent on every other error — 400 (including discount_code_invalid), 403, 404, the discount_* 409s, 409 invoice_void with no replacement (nothing live to name), every 5xx and 503 code — and never null.

string format: uuid
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": [
{
"field": "example",
"code": "example",
"message": "example"
}
],
"status_url": "https://example.com",
"decline_code": "example",
"invoice_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
}
}