> For the complete documentation index, see [llms.txt](https://peoplescourt.ai/llms.txt). This page is also available as Markdown.

# Receive a sparse informational case event

Delivered at least once. Verify the Ed25519 signature, deduplicate by eventId across deliveryId values, use sequence only as an ordering cursor, acknowledge promptly, and fetch authoritative state before acting.

Reference

Webhooks

POST

live

Inbound webhook

`webhook: caseNotification`

`receivePartnerCaseNotificationV2`

## Authentication and authority

Inbound callback. Verify all seven required Ed25519 signing headers; no Partner API bearer credential is sent.

## Parameters

Name

Location

Requirement

Schema

`content-digest`

SHA-256 of the exact request bytes, formatted as an RFC 9530-style binary content digest. It is the final line of the canonical signature input.

header

Required

{"type":"string","pattern":"^sha-256=:[A-Za-z0-9+/]{43}=:$"}

`x-pc-event-id`

Stable signed event identity used for deduplication.

header

Required

{"type":"string","pattern":"^[A-Za-z0-9._:-]{1,160}$"}

`x-pc-event-timestamp`

Canonical UTC ISO 8601 instant (the value must equal new Date(value).toISOString()).

header

Required

{"type":"string","format":"date-time","pattern":"^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}Z$"}

`x-pc-key-id`

Identifier of the Ed25519 verification key.

header

Required

{"type":"string","pattern":"^[A-Za-z0-9._:-]{1,160}$"}

`x-pc-schema-version`

Signed body schema version; must equal the body schemaVersion.

header

Required

{"type":"string","const":"case-event-v2"}

`x-pc-signature-version`

Signature protocol version. It is validated as a constant; the canonical input is version-defined and does not include this header or the signature itself.

header

Required

{"type":"string","const":"pc-webhook-ed25519-v1"}

`x-pc-signature`

Ed25519 signature over the documented canonical input.

header

Required

{"type":"string","pattern":"^ed25519=:[A-Za-z0-9+/]{86}==:$"}

## Request body

Required request body.

application/json

```json
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schemaVersion",
    "eventId",
    "deliveryId",
    "sequence",
    "type",
    "occurredAt",
    "caseId",
    "externalCaseId",
    "actionRequired"
  ],
  "properties": {
    "schemaVersion": {
      "type": "string",
      "const": "case-event-v2"
    },
    "eventId": {
      "type": "string",
      "pattern": "^[A-Za-z0-9._:-]{1,160}$"
    },
    "deliveryId": {
      "type": "string"
    },
    "sequence": {
      "type": "integer",
      "minimum": 1
    },
    "type": {
      "type": "string"
    },
    "occurredAt": {
      "type": "string",
      "format": "date-time",
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}Z$"
    },
    "caseId": {
      "type": "string"
    },
    "externalCaseId": {
      "type": "string"
    },
    "actionRequired": {
      "type": "boolean"
    },
    "deadlineAt": {
      "type": "string",
      "format": "date-time",
      "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{3}Z$"
    },
    "caseEvent": {
      "$ref": "#/components/schemas/CanonicalCaseEvent",
      "type": "object",
      "additionalProperties": false,
      "required": [
        "schemaVersion",
        "id",
        "cursor",
        "type",
        "occurredAt"
      ],
      "properties": {
        "schemaVersion": {
          "type": "string",
          "const": "case-event-v1"
        },
        "id": {
          "type": "string"
        },
        "cursor": {
          "type": "string",
          "description": "Opaque cursor identifying a position in the case event stream. Never interpret or compare cursor text."
        },
        "label": {
          "type": "string",
          "description": "Party-facing label for the event."
        },
        "type": {
          "type": "string"
        },
        "occurredAt": {
          "type": "string",
          "format": "date-time"
        }
      }
    }
  }
}
```

## Responses

### 204

Event accepted.

## Errors

Read the response status and stable error code. See [errors](https://peoplescourt.ai/docs/api/errors.md) and [rate limits](https://peoplescourt.ai/docs/api/rate-limits.md) for recovery. Refresh the resource before resolving a state or digest conflict.

## Idempotency and retries

- For throttling, honor Retry-After when present. Back off on retryable server failures.
- Callbacks are informational and at least once. Deduplicate by event ID and fetch authoritative state before acting.

## Inbound webhook

This callback is implemented by the partner. Verify the documented signature headers and acknowledge only after accepting the event.
