Versioned data envelope.
application/json
{
"type": "object",
"required": [
"data",
"requestId"
],
"properties": {
"data": {},
"requestId": {
"type": "string"
}
}
}Requires the evidence_exporter bearer role and all seven exporter Ed25519 signing headers. This signed mutation does not use Idempotency-Key; it deduplicates by the signed exporter and event identity.
/api/v2/evidence-exports/notificationsnotifyEvidenceExportV2Send one of the allowed bearer credential roles. Alternatives are OR; credentials named within one alternative are AND.
evidenceExporterBearerCredential bound to one evidence_exporter resource.
| Name | Location | Requirement | Schema |
|---|---|---|---|
content-digestSHA-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-idStable signed event identity used for deduplication. | header | Required | {"type":"string","pattern":"^[A-Za-z0-9._:-]{1,160}$"} |
x-pc-event-timestampCanonical 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-idIdentifier of the Ed25519 verification key. | header | Required | {"type":"string","pattern":"^[A-Za-z0-9._:-]{1,160}$"} |
x-pc-schema-versionSigned body schema version; must equal the body schemaVersion. | header | Required | {"type":"string","const":"evidence-export-notification-v1"} |
x-pc-signature-versionSignature 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-signatureEd25519 signature over the documented canonical input. | header | Required | {"type":"string","pattern":"^ed25519=:[A-Za-z0-9+/]{86}==:$"} |
Required request body.
application/json
{
"$ref": "#/components/schemas/EvidenceExportNotification",
"type": "object",
"additionalProperties": false,
"required": [
"schemaVersion",
"eventId",
"eventType",
"occurredAt",
"exporterId",
"specVersion",
"exportId",
"exportVersion",
"bundleHash",
"contentType",
"byteLength",
"downloadUrl",
"downloadExpiresAt",
"match"
],
"properties": {
"schemaVersion": {
"type": "string",
"const": "evidence-export-notification-v1"
},
"eventId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,160}$"
},
"eventType": {
"type": "string",
"const": "evidence.bundle.available"
},
"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$"
},
"exporterId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,200}$"
},
"specVersion": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,200}$"
},
"exportId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,200}$"
},
"exportVersion": {
"type": "integer",
"minimum": 1
},
"supersedes": {
"type": "object",
"additionalProperties": false,
"required": [
"exportId",
"exportVersion",
"sha256"
],
"properties": {
"exportId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,200}$"
},
"exportVersion": {
"type": "integer",
"minimum": 1
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
}
},
"bundleHash": {
"type": "object",
"additionalProperties": false,
"required": [
"algorithm",
"value"
],
"properties": {
"algorithm": {
"type": "string",
"const": "sha256"
},
"value": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
}
}
},
"contentType": {
"type": "string",
"const": "application/json"
},
"byteLength": {
"type": "integer",
"minimum": 1,
"maximum": 10485760
},
"downloadUrl": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"pattern": "^https://(?![^/?#]*@)(?:[A-Za-z0-9](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?\\.)*[A-Za-z](?:[A-Za-z0-9-]{0,61}[A-Za-z0-9])?(?::(?:0|[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?(?:[/?][^#\\s]*)?$",
"description": "HTTPS URL with a conventional DNS hostname whose final label begins with an ASCII letter, an optional canonical decimal port from 0 through 65535, and no user information or fragment. IP literals and other WHATWG normalization forms are intentionally outside this conservative published schema; runtime URL parsing remains authoritative."
},
"downloadExpiresAt": {
"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$"
},
"match": {
"type": "object",
"additionalProperties": false,
"minProperties": 1,
"properties": {
"externalCaseId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,200}$"
},
"transactionId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,200}$"
},
"merchantId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,200}$"
},
"network": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,200}$"
},
"transactionHash": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,200}$"
}
}
},
"retention": {
"type": "object",
"additionalProperties": false,
"properties": {
"profileId": {
"type": "string",
"pattern": "^[A-Za-z0-9._:-]{1,200}$"
},
"sourceRetentionUntil": {
"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$"
},
"sourceLegalHoldActive": {
"type": "boolean"
}
}
}
}
}Versioned data envelope.
application/json
{
"type": "object",
"required": [
"data",
"requestId"
],
"properties": {
"data": {},
"requestId": {
"type": "string"
}
}
}RFC 9457 style problem response.
application/problem+json
{
"$ref": "#/components/schemas/Problem",
"type": "object",
"required": [
"type",
"title",
"status",
"code",
"detail",
"requestId"
],
"properties": {
"type": {
"type": "string",
"format": "uri"
},
"title": {
"type": "string"
},
"status": {
"type": "integer"
},
"code": {
"type": "string"
},
"detail": {
"type": "string"
},
"requestId": {
"type": "string"
}
}
}{
"data": {},
"requestId": "requestId_test"
}