List endpoints
/v1/webhook-endpointsRequires webhooks:read. Returns endpoints owned by the key organization, or the organization selected with X-Affinity-Organization-Id. Platform delegation requires a webhook grant in the key's mode.
Request example
curl -X GET 'https://api.affinityrx.com/v1/webhook-endpoints' \
-H "Authorization: Bearer $AFFINITY_API_KEY" \
-H 'Affinity-Version: 2026-09-28'Response example
These examples show the body structure. Values can differ. Select a status code to see its response.
{
"data": [
{
"organizationId": "acct_01j2y8m6jcc9tt24af5pw9x1bc",
"practiceIds": [
"prac_01j2y8m6jcc9tt24af5pw9x1bc"
],
"apiVersion": "<string>",
"consecutiveFailures": 0,
"createdAt": "<string>",
"description": "<string>",
"id": "whe_01j2y8m6jcc9tt24af5pw9x1bc",
"livemode": false,
"object": "webhook_endpoint",
"payloadStyle": "thin",
"status": "active",
"subscribedEvents": [
"<string>"
],
"updatedAt": "<string>",
"url": "<string>"
}
],
"hasMore": false,
"object": "list",
"url": "/v1/webhook-endpoints"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 400,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 401,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 403,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 404,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 409,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 422,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}{
"code": "<string>",
"data": "<string>",
"detail": "<string>",
"instance": "<string>",
"requestId": "<string>",
"status": 429,
"title": "<string>",
"traceId": "<string>",
"type": "<string>"
}Implementation specification
Use these field types and limits to build your integration. Download the OpenAPI document for the complete contract.
Query parameters
endingBeforestringPattern: ^whe_[0-7][0-9a-hjkmnp-tv-z]{25}$
limitintegerDefault: 25
Minimum: 1
Maximum: 100
startingAfterstringPattern: ^whe_[0-7][0-9a-hjkmnp-tv-z]{25}$
Headers
Affinity-VersionstringSelects the HTTP API contract for this request only. When omitted, API-key requests use their service account’s stored version. Does not change the stored default.
Pin requests to 2026-09-28.
X-Affinity-Organization-IdstringDefaults to the API key organization. A platform may select a practice or pharmacy only with an explicit webhook grant in this mode. This changes the webhook owner, not the caller or event subscriptions.
Response specifications
200Successful response
application/json
dataobject[]requiredShow data fields
Array items · object
organizationIdstringrequiredPattern: ^acct_[0-7][0-9a-hjkmnp-tv-z]{25}$
practiceIdsany[]requiredShow practiceIds fields
Array items · any
All of · 1: any
any
Pattern: ^prac_[0-7][0-9a-hjkmnp-tv-z]{25}$
apiVersionstringrequiredconsecutiveFailuresintegerrequiredMinimum: 0
createdAtstringrequireddescriptionstringrequiredidstringrequiredPattern: ^whe_[0-7][0-9a-hjkmnp-tv-z]{25}$
livemodebooleanrequiredobjectstringrequiredAllowed: "webhook_endpoint"
payloadStylestringrequiredAllowed: "thin", "snapshot"
statusstringrequiredAllowed: "active", "suspended", "disabled"
subscribedEventsstring[]requiredShow subscribedEvents fields
Array items · string
string
updatedAtstringrequiredurlstringrequiredhasMorebooleanrequiredobjectstringrequiredAllowed: "list"
urlstringrequiredAllowed: "/v1/webhook-endpoints"
400HTTP 400
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
401Unauthorized
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
403Forbidden
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
404Not found
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
409Conflict
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
422Validation error
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri
429Too many requests
application/json
codestringrequireddataobjectdetailstringrequiredinstancestringrequiredrequestIdstringrequiredstatusintegerrequiredMinimum: 400
Maximum: 599
titlestringrequiredtraceIdstringtypestringrequiredFormat: uri