When the client needs a logical unit (run/history group, full resource state), the API must paginate and update in a way that preserves that unit across requests.
Apply this standard: 1) Pagination must align to domain groups
webhook_id/run) and return the group’s children together.Example contract shape (conceptual):
GET /deliveries?limit=25&offset=... returning attemptsGET /deliveryRuns?endpointId=...&limit=...&cursor=... returning runs:
type DeliveryRun = { runId: string; webhookId: string; attempts: WebhookDelivery[] }
type DeliveryRunsResponse = { items: DeliveryRun[]; nextCursor?: string }
2) Update semantics must be explicit + concurrency-safe
PUT without a revision/ETag, document that it is overwrite-by-replace and that clients must send the complete resource state.ETag + If-Match) so clients can avoid accidental lost updates.3) Don’t export incorrect invariants to the UI