curl --request GET \
--url https://api.citadel.example/api/v1/webhook_endpoints/{id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.citadel.example/api/v1/webhook_endpoints/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.citadel.example/api/v1/webhook_endpoints/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.citadel.example/api/v1/webhook_endpoints/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "<string>",
"description": "<string>",
"event_types": [
"operation.confirmed"
],
"state": "active",
"disabled_at": "2023-11-07T05:31:56Z",
"consecutive_failures": 123,
"previous_secret_expires_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}Get a webhook endpoint
One endpoint, without its signing secret. Needs the read scope. A key limited to vaults is
refused with 403 vault_limited.
curl --request GET \
--url https://api.citadel.example/api/v1/webhook_endpoints/{id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.citadel.example/api/v1/webhook_endpoints/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.citadel.example/api/v1/webhook_endpoints/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.citadel.example/api/v1/webhook_endpoints/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"url": "<string>",
"description": "<string>",
"event_types": [
"operation.confirmed"
],
"state": "active",
"disabled_at": "2023-11-07T05:31:56Z",
"consecutive_failures": 123,
"previous_secret_expires_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}Authorizations
An API key minted in the console (ctd_…). Authenticates; never authorizes funds. A key
carries scopes (read, wallets.write, transactions.write, events.write,
webhooks.write, policy.write) and may be limited to vaults, to IP addresses, and in
lifetime — see Authentication.
Path Parameters
The endpoint id — id in its row, endpoint.id in a delivery.
Response
The endpoint.
Where Citadel posts. An https:// URL with a host.
What the endpoint is for — your words.
The events it hears. [] hears every event.
operation.confirmed, operation.failed, operation.expired, operation.stuck, operation.awaiting_approval, operation.approved, blockchain_event.confirmed, run.completed, run.failed, wallet.active, wallet.failed active receives its events. paused: you paused it. disabled: Citadel turned it off
after 5 deliveries in a row exhausted their attempts. Neither of the last two gets a
delivery, not even a later one: PATCH with state: active resumes it.
active, paused, disabled When it was paused or disabled; null while active.
Deliveries in a row that exhausted their attempts. At 5 the endpoint is disabled; a delivered one, or a resume, sets it back to 0.
While a rotated secret still signs next to the new one, until when; else null.