List webhook events
- Sandbox: available
- Staging: available
- Production: unknown
Every event addressed to the caller, oldest first and keyset paged by cursor, each with its delivery status and payload: expired, failed and held ones too. An event is listed once it is two minutes old, so a page never moves past one a slower transaction has yet to commit. Filter by types, status, patientId, or (for a MANAGER) subscriberId.
Through ovok
- Who can call it: Manager apps, and users whose access policy grants the capabilities.
- Capabilities, all required:
signals_events:read. Project admins have every capability; client applications get no admin bypass. - If your access covers only some patients (anyone but project admins, manager or submitter apps, and anyone whose Patient access has no criteria), name them with
patientId, each one you can read, at most 100. Signals then pages over just those patients, so pages and totals stay true. A patient is named by its Signals id, or by its Medplum Patient id where Signals takes arefId; ovok asks Signals which patient a Signals id is.
AuthorizationBearer <JWT>cursor?stringOpaque keyset cursor: a previous answer's nextCursor, passed back verbatim.
length <= 512limit?numberPage size, 1 to 200. Defaults to 50.
1 <= valuetypes?array<string>Only these event types, comma-separated: alert.trigger,patient.inactive.
length <= 100status?stringOnly deliveries in this state.
"failed""delivered""pending""expired""held"patientId?stringOnly events about this patient: its Signals id, as the payload's patient.
length <= 128subscriberId?stringOnly this subscriber's deliveries, by Signals id or clientId. A subscriber may name only itself.
length <= 128One page of events.
application/json- response
items*array<>nextCursor*stringOpaque keyset cursor. Pass it back as cursor for the next page; null means this page was the last. Do not construct or parse it.
curl -X GET 'https://api.sandbox.ovok.com/v1/signals/api/events'{ "items": [ { "id": "string", "eventId": "string", "eventType": "string", "subscriberId": "string", "status": "pending", "attempts": 0, "nextAttemptAt": "2019-08-24T14:15:22Z", "lastStatusCode": 0, "lastError": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "redeliveredAt": "2019-08-24T14:15:22Z", "payload": {} } ], "nextCursor": "string"}Rotate the webhook signing secret POST
Mints a new Standard Webhooks signing secret (`whsec_` and 32 random bytes) and returns it this once. Every delivery carries `webhook-id` and `webhook-timestamp`; once the subscriber has a secret it also carries `webhook-signature`, so a receiver verifies with the Standard Webhooks library. The secret it replaces keeps signing until `previousSecretExpiresAt` (24 h), so `webhook-signature` holds both and the receiver switches with no gap. Each rotation keeps only the secret it replaces, so rotate again only once the receiver uses the new one. The first call mints the subscriber's first secret. A MANAGER rotates any subscriber of its tenant; a SUBSCRIBER only its own. ### Through ovok - **Who can call it:** Manager apps, and users whose access policy grants the capabilities. - **Capabilities, all required:** `signals_webhooks:update`. Project admins have every capability; client applications get no admin bypass. - It can reach any patient of your project without naming one, so it is for callers that reach every patient: project admins, manager or submitter apps, and anyone whose Patient access has no criteria.
List a delivery's attempts GET
Each POST made for it, oldest first: when, how long, the status code or the error, and the first 2 KB of the answer. ### Through ovok - **Who can call it:** Manager apps, and users whose access policy grants the capabilities. - **Capabilities, all required:** `signals_events:read`. Project admins have every capability; client applications get no admin bypass. - It can reach any patient of your project without naming one, so it is for callers that reach every patient: project admins, manager or submitter apps, and anyone whose Patient access has no criteria.