POSTlive

Notify the court of a signed evidence export

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/notificationsnotifyEvidenceExportV2

Authentication and authority

Send one of the allowed bearer credential roles. Alternatives are OR; credentials named within one alternative are AND.

evidenceExporterBearer

Credential bound to one evidence_exporter resource.

Parameters

NameLocationRequirementSchema
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.

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

Stable signed event identity used for deduplication.

headerRequired{"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()).

headerRequired{"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.

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

Signed body schema version; must equal the body schemaVersion.

headerRequired{"type":"string","const":"evidence-export-notification-v1"}
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.

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

Ed25519 signature over the documented canonical input.

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

Request body

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"
        }
      }
    }
  }
}

Responses

202

Versioned data envelope.

application/json

{
  "type": "object",
  "required": [
    "data",
    "requestId"
  ],
  "properties": {
    "data": {},
    "requestId": {
      "type": "string"
    }
  }
}
default

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"
    }
  }
}

Example response

Successful response

{
  "data": {},
  "requestId": "requestId_test"
}

Usage notes

  • Responses reflect the current authoritative resource state.
  • The request is accepted only when its credential, authority, case state, and resource preconditions are satisfied.