{
  "okfVersion": "0.2",
  "apiVersion": "1.14.0",
  "generated": "2026-08-17T00:00:00Z",
  "conceptCount": 230,
  "concepts": [
    {
      "path": "overview.md",
      "type": "Reference",
      "title": "OpenDPP Integration API — overview",
      "description": "What the OpenDPP Integration API does, how it is organised, and where to start.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "guides/authentication.md",
      "type": "Playbook",
      "title": "Authentication & tenancy",
      "description": "Authenticate with a tenant API key as a Bearer token; tenant identity is token-bound.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "guides/errors.md",
      "type": "Reference",
      "title": "Error model",
      "description": "Error envelopes returned by the API, including the richer ESPR validation-failure shape.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "guides/rate-limits.md",
      "type": "Reference",
      "title": "Rate limits",
      "description": "The per-key plan ladder, the per-IP ceiling, and which of the two bites first.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "guides/public-access-tiers.md",
      "type": "Reference",
      "title": "Public access tiers",
      "description": "How one resolution URL serves tiered views via capability tokens.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "guides/sealing-and-verification.md",
      "type": "Playbook",
      "title": "Sealing & verification",
      "description": "Apply an advanced electronic seal and verify it offline from the redacted document.",
      "resource": "https://opendpp-node.eu/security"
    },
    {
      "path": "guides/interop-aas-untp.md",
      "type": "Reference",
      "title": "Interop: AAS & UNTP credentials",
      "description": "The standards-conformant projections OpenDPP serves alongside JSON-LD, and where to validate them.",
      "resource": "https://github.com/OpenDPP/opendpp-interop"
    },
    {
      "path": "guides/conformance.md",
      "type": "Reference",
      "title": "Conformance honesty",
      "description": "What OpenDPP's output conforms to today, what is partial, and what is on the roadmap.",
      "resource": "https://github.com/OpenDPP/opendpp-interop"
    },
    {
      "path": "tags/passports.md",
      "type": "Reference",
      "title": "Passports",
      "description": "Create, validate, read, update, seal and manage the lifecycle of Digital Product Passports.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/economic-operators.md",
      "type": "Reference",
      "title": "Economic Operators",
      "description": "Register and manage the economic operators (manufacturers/brands, identified by EORI or national registry id) that passports are issued on behalf of.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/battery-units.md",
      "type": "Reference",
      "title": "Battery Units",
      "description": "Per-unit battery serialization (real serials, GS1 AI 21) under a SKU-level passport, plus append-only telemetry events (state of health, charge cycles, status changes) per the EU Battery Regulation.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/facilities.md",
      "type": "Reference",
      "title": "Facilities",
      "description": "Manufacturing facility master data, identified by GS1 GLN-13 (the Unique Facility Identifier).",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/access-grants.md",
      "type": "Reference",
      "title": "Access Grants",
      "description": "Capability tokens implementing tiered legitimate-interest access: issue, approve, deny and revoke dpp_li_… / dpp_auth_… tokens.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/webhooks.md",
      "type": "Reference",
      "title": "Webhooks",
      "description": "Subscribe HTTPS endpoints to passport lifecycle events.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/traceability-audit.md",
      "type": "Reference",
      "title": "Traceability & Audit",
      "description": "UNTP/EPCIS supply-chain traceability events, lineage queries, and the public seal verifier.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/public-resolution.md",
      "type": "Reference",
      "title": "Public Resolution",
      "description": "Unauthenticated, content-negotiated passport resolution: GS1 Digital Link paths, passport and unit pages.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/verifiable-credentials.md",
      "type": "Reference",
      "title": "Verifiable Credentials",
      "description": "Issuer trust endpoints that back the UNTP Verifiable Credential representations: the workspace's did:web DID document (public keys only) and its W3C Bitstring Status List for revocation.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/schemas-vocabulary.md",
      "type": "Reference",
      "title": "Schemas & Vocabulary",
      "description": "Machine-readable contracts: per-category ESPR JSON Schemas, the W3C JSON-LD context, and the curated materials vocabulary.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/qr-codes.md",
      "type": "Reference",
      "title": "QR Codes",
      "description": "Export GS1-Digital-Link QR codes (PNG/SVG, 128–2048 px, GS1 quiet zone) for passports and battery units.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/eidas-keys.md",
      "type": "Reference",
      "title": "eIDAS Keys",
      "description": "Tenant signing-key management.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/account.md",
      "type": "Reference",
      "title": "Account",
      "description": "Identity of the authenticated API key / session: workspace, role, permissions, operator scope, and passport usage against the tier quota — the integration-facing counterpart to the console's profile endpoints.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "tags/service.md",
      "type": "Reference",
      "title": "Service",
      "description": "Service metadata and liveness.",
      "resource": "https://opendpp-node.eu/api-reference"
    },
    {
      "path": "operations/whoami.md",
      "type": "API Endpoint",
      "title": "Identity of the authenticated key / session",
      "description": "Returns a compact, integration-focused view of the calling credential: the workspace, the principal's role and resolved permissions, whether the session is an API key, the operator the key is scoped to (null = workspace-wide), and active-p…",
      "resource": "https://opendpp-node.eu/api/v1/whoami"
    },
    {
      "path": "operations/validateBatteryUnits.md",
      "type": "API Endpoint",
      "title": "Pre-flight: validate battery-unit identifiers without persisting",
      "description": "NON-MUTATING pre-flight for bulk unit import.",
      "resource": "https://opendpp-node.eu/api/v1/passports/{passportId}/units/validate"
    },
    {
      "path": "operations/listBatteryUnits.md",
      "type": "API Endpoint",
      "title": "List serialised battery units under a passport",
      "description": "Lists all serialised units of the passport, newest first (createdAt DESC).",
      "resource": "https://opendpp-node.eu/api/v1/passports/{passportId}/units"
    },
    {
      "path": "operations/serializeBatteryUnits.md",
      "type": "API Endpoint",
      "title": "Serialise individual battery units under a passport (bulk, up to 200)",
      "description": "Creates one or many individual physical battery units (EU Battery Regulation) under a SKU/type-level passport.",
      "resource": "https://opendpp-node.eu/api/v1/passports/{passportId}/units"
    },
    {
      "path": "operations/getBatteryUnit.md",
      "type": "API Endpoint",
      "title": "Get one battery unit as JSON-LD with its dynamic-data history",
      "description": "Returns the unit as a JSON-LD document (Content-Type: application/ld+json) in the privileged tenant view: currentState (the latest telemetry snapshot) and dynamicData (the 500 most recent events, newest first by recordedAt) are included; t…",
      "resource": "https://opendpp-node.eu/api/v1/units/{id}"
    },
    {
      "path": "operations/deleteBatteryUnit.md",
      "type": "API Endpoint",
      "title": "Not deletable: a serialised unit is a marketed physical item (always 409)",
      "description": "Always refused with 409.",
      "resource": "https://opendpp-node.eu/api/v1/units/{id}"
    },
    {
      "path": "operations/listBatteryUnitEvents.md",
      "type": "API Endpoint",
      "title": "List a battery unit's telemetry history (newest first, cursor-paginated)",
      "description": "Returns one page of the unit's append-only dynamic-data history ordered by recordedAt DESC, ties broken by id DESC — so paging is deterministic.",
      "resource": "https://opendpp-node.eu/api/v1/units/{id}/events"
    },
    {
      "path": "operations/recordBatteryUnitEvent.md",
      "type": "API Endpoint",
      "title": "Append an immutable telemetry event to a battery unit",
      "description": "Appends one append-only per-unit dynamic-data record (Annex XIII / Art. 77: SoH, cycle count, remaining capacity, temperature, negative events).",
      "resource": "https://opendpp-node.eu/api/v1/units/{id}/events"
    },
    {
      "path": "operations/bulkRecordBatteryUnitEvents.md",
      "type": "API Endpoint",
      "title": "Append a batch of telemetry events to a battery unit",
      "description": "Appends up to 500 append-only dynamic-data records to one unit in a single request — the batch venue for backfilling a fleet's telemetry.",
      "resource": "https://opendpp-node.eu/api/v1/units/{id}/events/bulk"
    },
    {
      "path": "operations/listFacilities.md",
      "type": "API Endpoint",
      "title": "List facilities in the tenant workspace",
      "description": "Lists all facilities registered under your tenant workspace, sorted by createdAt descending.",
      "resource": "https://opendpp-node.eu/api/v1/facilities"
    },
    {
      "path": "operations/createFacility.md",
      "type": "API Endpoint",
      "title": "Register a facility (GS1 GLN)",
      "description": "Registers a manufacturing/processing facility as tenant-scoped master data, backing the Unique Facility Identifier (UFI, EN 18219).",
      "resource": "https://opendpp-node.eu/api/v1/facilities"
    },
    {
      "path": "operations/getFacility.md",
      "type": "API Endpoint",
      "title": "Get a single facility",
      "description": "Fetches one facility by id, scoped to your tenant workspace.",
      "resource": "https://opendpp-node.eu/api/v1/facilities/{id}"
    },
    {
      "path": "operations/updateFacility.md",
      "type": "API Endpoint",
      "title": "Update facility master data (GLN is immutable)",
      "description": "Partially updates a facility's master data.",
      "resource": "https://opendpp-node.eu/api/v1/facilities/{id}"
    },
    {
      "path": "operations/deleteFacility.md",
      "type": "API Endpoint",
      "title": "Delete a facility (passports are unlinked, never deleted)",
      "description": "Removes the facility master-data row.",
      "resource": "https://opendpp-node.eu/api/v1/facilities/{id}"
    },
    {
      "path": "operations/listGrants.md",
      "type": "API Endpoint",
      "title": "List access grants and pending access requests",
      "description": "Lists the workspace's access grants — capability-token grants for the Battery Regulation's restricted data tiers (Annex XIII(2)–(4)) — including undecided third-party access requests (status: PENDING, issuerType: REQUEST) submitted via the…",
      "resource": "https://opendpp-node.eu/api/v1/grants"
    },
    {
      "path": "operations/createGrant.md",
      "type": "API Endpoint",
      "title": "Issue a legitimate-interest access grant directly",
      "description": "Directly issues an ACTIVE legitimate-interest access grant (no pending request involved) and mints its capability token.",
      "resource": "https://opendpp-node.eu/api/v1/grants"
    },
    {
      "path": "operations/approveGrantRequest.md",
      "type": "API Endpoint",
      "title": "Approve a pending access request and mint its token",
      "description": "Approves a PENDING third-party access request (submitted via the hosted request-access page).",
      "resource": "https://opendpp-node.eu/api/v1/grants/{id}/approve"
    },
    {
      "path": "operations/denyGrantRequest.md",
      "type": "API Endpoint",
      "title": "Deny a pending access request",
      "description": "Denies a PENDING third-party access request: sets status: DENIED and records decidedAt/decidedBy.",
      "resource": "https://opendpp-node.eu/api/v1/grants/{id}/deny"
    },
    {
      "path": "operations/revokeGrant.md",
      "type": "API Endpoint",
      "title": "Revoke an access grant (soft revocation)",
      "description": "Soft-revokes a grant: sets status: REVOKED and revokedAt (the row is retained for audit; the public resolvers reject the token from then on).",
      "resource": "https://opendpp-node.eu/api/v1/grants/{id}"
    },
    {
      "path": "operations/listOperators.md",
      "type": "API Endpoint",
      "title": "List economic operators bound to your workspace",
      "description": "Returns the economic operators bound to your workspace, ordered by name.",
      "resource": "https://opendpp-node.eu/api/v1/operators"
    },
    {
      "path": "operations/registerOperator.md",
      "type": "API Endpoint",
      "title": "Register an economic operator and bind it to your workspace",
      "description": "Registers an economic operator (manufacturer, importer, supplier, …) and binds it to your workspace.",
      "resource": "https://opendpp-node.eu/api/v1/operators"
    },
    {
      "path": "operations/getOperator.md",
      "type": "API Endpoint",
      "title": "Fetch a single bound economic operator",
      "description": "Fetches one economic operator by UUID, scoped to your workspace (404 if no operator with that id exists in your workspace).",
      "resource": "https://opendpp-node.eu/api/v1/operators/{id}"
    },
    {
      "path": "operations/updateOperator.md",
      "type": "API Endpoint",
      "title": "Update an operator's name or role (regId is immutable)",
      "description": "Edits an operator bound to your workspace.",
      "resource": "https://opendpp-node.eu/api/v1/operators/{id}"
    },
    {
      "path": "operations/deleteOperator.md",
      "type": "API Endpoint",
      "title": "Remove an operator (archives if it has passports, else hard-deletes)",
      "description": "Removes an operator, choosing automatically between two outcomes (ESPR passport-persistence compliance — an operator that still has passports must never be hard-deleted):",
      "resource": "https://opendpp-node.eu/api/v1/operators/{id}"
    },
    {
      "path": "operations/restoreOperator.md",
      "type": "API Endpoint",
      "title": "Restore an archived operator and its archived passports",
      "description": "Un-archives an operator that was soft-deleted by DELETE /api/v1/operators/{id} and brings its archived passports back into the active catalogue: clears the operator's archivedAt, then clears archivedAt and retentionUntil on every archived…",
      "resource": "https://opendpp-node.eu/api/v1/operators/{id}/restore"
    },
    {
      "path": "operations/rotateTenantKeys.md",
      "type": "API Endpoint",
      "title": "Rotate the tenant's ECDSA signing key pair",
      "description": "Generates a brand-new ECDSA prime256v1 (P-256) key pair for your workspace's advanced-seal signing and rotates it into the encrypted database vault, replacing the previous key.",
      "resource": "https://opendpp-node.eu/api/v1/tenants/rotate-keys"
    },
    {
      "path": "operations/listPassports.md",
      "type": "API Endpoint",
      "title": "List passports in your workspace (paginated JSON-LD)",
      "description": "Returns the non-archived passports of every economic operator bound to your workspace, newest first (createdAt DESC).",
      "resource": "https://opendpp-node.eu/api/v1/passports"
    },
    {
      "path": "operations/createPassport.md",
      "type": "API Endpoint",
      "title": "Create (ingest) a Digital Product Passport",
      "description": "Creates a SKU/type-level Digital Product Passport.",
      "resource": "https://opendpp-node.eu/api/v1/passports"
    },
    {
      "path": "operations/validatePassport.md",
      "type": "API Endpoint",
      "title": "Dry-run ESPR validation of passport metadata (nothing is stored)",
      "description": "Runs the full ESPR category schema validation on a metadata payload without persisting anything — intended for pre-flight checks in integration pipelines.",
      "resource": "https://opendpp-node.eu/api/v1/passports/validate-only"
    },
    {
      "path": "operations/validatePassportPublic.md",
      "type": "API Endpoint",
      "title": "Permission-free dry-run ESPR metadata validation (strictly rate-limited)",
      "description": "Identical validation semantics to POST /api/v1/passports/validate-only, but requires no specific permission — any valid API key or Console session is accepted, so every plan including the free tier can call it.",
      "resource": "https://opendpp-node.eu/api/v1/passports/validate-only-public"
    },
    {
      "path": "operations/bulkIngestPassports.md",
      "type": "API Endpoint",
      "title": "Bulk-ingest up to 200 passports with per-row error reporting",
      "description": "Ingests up to 200 passports in one request with partial-success semantics: each row is validated and inserted independently; failed rows are skipped and reported as human-readable strings in errors[].",
      "resource": "https://opendpp-node.eu/api/v1/passports/bulk"
    },
    {
      "path": "operations/ingestPassportFromAas.md",
      "type": "API Endpoint",
      "title": "Ingest a passport from an AAS JSON Environment (seal-verified)",
      "description": "Ingests (creates or updates) a Digital Product Passport from an Industry-4.0 Asset Administration Shell (AAS) JSON Environment — the same format produced by OpenDPP's own AAS export.",
      "resource": "https://opendpp-node.eu/api/v1/passports/aas/ingest"
    },
    {
      "path": "operations/passportVcReadinessReport.md",
      "type": "API Endpoint",
      "title": "Catalog-wide UNTP Verifiable-Credential readiness report",
      "description": "A read-only, tenant-scoped report of which SKUs in your catalog can / can't emit a UNTP Verifiable Credential, and why — so you can fix a whole catalog before relying on VCs, instead of probing passports one at a time.",
      "resource": "https://opendpp-node.eu/api/v1/passports/vc-readiness"
    },
    {
      "path": "operations/getPassport.md",
      "type": "API Endpoint",
      "title": "Fetch a single passport (content-negotiated JSON-LD / AAS / HTML)",
      "description": "Owner-side alias of the public resolver.",
      "resource": "https://opendpp-node.eu/api/v1/passports/{id}"
    },
    {
      "path": "operations/updatePassport.md",
      "type": "API Endpoint",
      "title": "Update passport metadata (versioned to history)",
      "description": "Replaces the passport's metadata (the Merkle root and leaf hashes are recomputed) and snapshots the previous metadata into the passport's version history (version = count + 1, changedBy = user email or api-key:<id>, changeReason defaults t…",
      "resource": "https://opendpp-node.eu/api/v1/passports/{id}"
    },
    {
      "path": "operations/deleteDraftPassport.md",
      "type": "API Endpoint",
      "title": "Permanently delete a DRAFT passport",
      "description": "Hard-deletes a passport only while it is a DRAFT (never published, not publicly resolvable, no retention duty).",
      "resource": "https://opendpp-node.eu/api/v1/passports/{id}"
    },
    {
      "path": "operations/sealPassport.md",
      "type": "API Endpoint",
      "title": "Apply the tenant's advanced electronic seal",
      "description": "Signs the passport's Merkle root (SHA-256 tree over the key-sorted top-level metadata entries) with the tenant's vault-held ECDSA P-256 (prime256v1) private key, producing an advanced electronic seal (this is a local cryptographic seal — N…",
      "resource": "https://opendpp-node.eu/api/v1/passports/{id}/seal"
    },
    {
      "path": "operations/updatePassportStatus.md",
      "type": "API Endpoint",
      "title": "Transition passport lifecycle status (recall / decommission / reactivate)",
      "description": "Transitions a published passport between live lifecycle states.",
      "resource": "https://opendpp-node.eu/api/v1/passports/{id}/status"
    },
    {
      "path": "operations/resolvePublicPassport.md",
      "type": "API Endpoint",
      "title": "Resolve a passport by UUID (JSON-LD / AAS / HTML)",
      "description": "Public, content-negotiated resolution of a Digital Product Passport by its server-assigned UUID.",
      "resource": "https://opendpp-node.eu/passport/{id}"
    },
    {
      "path": "operations/resolveGs1Gtin.md",
      "type": "API Endpoint",
      "title": "GS1 Digital Link resolution by GTIN-14 (AI 01)",
      "description": "Unified GS1 Digital Link gateway, GTIN branch.",
      "resource": "https://opendpp-node.eu/01/{gtin14}"
    },
    {
      "path": "operations/resolveGs1GtinSerial.md",
      "type": "API Endpoint",
      "title": "GS1 Digital Link serialised-item redirect (AI 01 + AI 21)",
      "description": "GS1 Digital Link resolution of an *individual serialised item*.",
      "resource": "https://opendpp-node.eu/01/{gtin14}/21/{serial}"
    },
    {
      "path": "operations/resolveGs1Grai.md",
      "type": "API Endpoint",
      "title": "GS1 Digital Link resolution by GRAI (AI 8003)",
      "description": "Unified GS1 Digital Link gateway, GRAI branch (Global Returnable Asset Identifier).",
      "resource": "https://opendpp-node.eu/8003/{grai}"
    },
    {
      "path": "operations/resolvePublicBatteryUnit.md",
      "type": "API Endpoint",
      "title": "Resolve an individual serialised battery unit",
      "description": "Public, content-negotiated view of one individual serialised unit (battery) by its unit UUID, including the embedded SKU/type passport (ofModel, masked by the same tier rules as GET /passport/{id}).",
      "resource": "https://opendpp-node.eu/unit/{id}"
    },
    {
      "path": "operations/getSealCaCertificate.md",
      "type": "API Endpoint",
      "title": "Download the platform seal-CA certificate (PEM)",
      "description": "Downloads the platform seal-CA certificate as PEM.",
      "resource": "https://opendpp-node.eu/.well-known/opendpp-seal-ca.pem"
    },
    {
      "path": "operations/getSectorSchema.md",
      "type": "API Endpoint",
      "title": "Get the ESPR metadata schema for a product category",
      "description": "Returns the machine-readable ESPR metadata schema for a product category.",
      "resource": "https://opendpp-node.eu/api/v1/schemas/{category}"
    },
    {
      "path": "operations/getDppJsonLdContext.md",
      "type": "API Endpoint",
      "title": "Canonical resolvable JSON-LD context for passport & unit documents",
      "description": "Serves the stable, resolvable W3C JSON-LD @context (application/ld+json) that every public passport and battery-unit JSON-LD document references in its @context array — this is the context to dereference when expanding OpenDPP JSON-LD.",
      "resource": "https://opendpp-node.eu/contexts/dpp/v1"
    },
    {
      "path": "operations/getJsonLdContext.md",
      "type": "API Endpoint",
      "title": "W3C JSON-LD context document for passport terms (secondary, fixed term list)",
      "description": "Serves a static W3C JSON-LD @context document (application/ld+json) for the core Digital Product Passport term vocabulary: maps the DPP terms to https://opendpp-node.eu/ns/dpp#… IRIs and createdAt/updatedAt to schema.org dateCreated/dateMo…",
      "resource": "https://opendpp-node.eu/context/v1"
    },
    {
      "path": "operations/getHealth.md",
      "type": "API Endpoint",
      "title": "Service health check",
      "description": "Liveness probe.",
      "resource": "https://opendpp-node.eu/health"
    },
    {
      "path": "operations/getApiVersion.md",
      "type": "API Endpoint",
      "title": "Running API contract version & build identity",
      "description": "Returns the SemVer of the public API contract currently served (apiVersion), plus the source build identity (commit, builtAt).",
      "resource": "https://opendpp-node.eu/api/v1/version"
    },
    {
      "path": "operations/mintGtinCheckDigit.md",
      "type": "API Endpoint",
      "title": "Compute a GTIN check digit from a company prefix + item reference",
      "description": "The actionable counterpart to the non-GS1 ingest advisory: given the GS1 company prefix your organisation legally owns plus an item reference, OpenDPP computes the GS1 mod-10 check digit and returns the resulting 14-digit GTIN + a Digital…",
      "resource": "https://opendpp-node.eu/api/v1/gs1/gtin"
    },
    {
      "path": "operations/decodeGs1.md",
      "type": "API Endpoint",
      "title": "Decode GS1 scan data / element string / Digital Link into structured AIs + HRI",
      "description": "Decodes raw scanner output — AIM-symbology-prefixed scan data (e.g. ]Q1https://id.gs1.org/01/09501101532007/21/VM-1, ]C1010950…), a bracketed GS1 element string ((01)09501101532007(21)VM-1), or a Digital Link URI — into its structured Appl…",
      "resource": "https://opendpp-node.eu/api/v1/gs1/decode"
    },
    {
      "path": "operations/decodeGs1Batch.md",
      "type": "API Endpoint",
      "title": "Batch-decode many GS1 scans / element strings / Digital Links in one request",
      "description": "Batch form of POST /api/v1/gs1/decode for line-side / warehouse stations capturing many scans per second.",
      "resource": "https://opendpp-node.eu/api/v1/gs1/decode/batch"
    },
    {
      "path": "operations/getPassportQrCode.md",
      "type": "API Endpoint",
      "title": "Export a print-grade GS1 Digital Link QR code for a passport",
      "description": "Renders the passport's GS1 Digital Link URI (its digitalLinkUri, e.g. https://opendpp-node.eu/01/09501101530003) as a print-grade QR code and returns it as a binary file download.",
      "resource": "https://opendpp-node.eu/api/v1/passports/{id}/qr"
    },
    {
      "path": "operations/bulkExportPassportLabels.md",
      "type": "API Endpoint",
      "title": "Bulk-export print-grade QR labels for many passports as a ZIP",
      "description": "Renders a GS1 Digital Link QR code for each of the supplied passports and returns them as a single application/zip download (Content-Disposition: attachment; filename=\"labels.zip\") — the export counterpart to the bulk import.",
      "resource": "https://opendpp-node.eu/api/v1/passports/labels"
    },
    {
      "path": "operations/getBatteryUnitQrCode.md",
      "type": "API Endpoint",
      "title": "Export a print-grade QR code for an individual battery unit",
      "description": "Renders the battery unit's GS1 Digital Link URI as a print-grade QR code — the AI-21 path segment carries the unit's real physical serial number (e.g. https://opendpp-node.eu/01/09501101530003/21/BAT-2026-000123).",
      "resource": "https://opendpp-node.eu/api/v1/units/{id}/qr"
    },
    {
      "path": "operations/listMaterials.md",
      "type": "API Endpoint",
      "title": "List the platform-curated material vocabulary",
      "description": "Lists active entries from the platform-global material vocabulary that powers the searchable material/fiber/chemistry pickers in the passport form.",
      "resource": "https://opendpp-node.eu/api/v1/materials"
    },
    {
      "path": "operations/registerTraceabilityEvent.md",
      "type": "API Endpoint",
      "title": "Register a UNTP/EPCIS 2.0 traceability event (VC-shaped)",
      "description": "Registers a supply-chain traceability event carried as a VC-shaped UNTP credential and persists it as an EPCIS 2.0 event row scoped to your tenant.",
      "resource": "https://opendpp-node.eu/api/v1/events"
    },
    {
      "path": "operations/captureEpcisDocument.md",
      "type": "API Endpoint",
      "title": "Capture a native GS1 EPCIS 2.0 document (JSON/JSON-LD)",
      "description": "Captures a native GS1 EPCIS 2.0 document — the standard's own JSON/JSON-LD interchange format — and persists each supported event as an EPCIS event row scoped to your tenant, alongside the VC-shaped POST /api/v1/events path.",
      "resource": "https://opendpp-node.eu/api/v1/events/epcis"
    },
    {
      "path": "operations/getEventLineage.md",
      "type": "API Endpoint",
      "title": "Retrieve the upstream pedigree of an event as a recursive lineage DAG",
      "description": "Returns the full upstream pedigree of a traceability event as a recursive Directed Acyclic Graph: the root event plus, in parents, every event linked upstream through lineage relations registered on the node, walked transitively (parents o…",
      "resource": "https://opendpp-node.eu/api/v1/events/{id}/lineage"
    },
    {
      "path": "operations/verifyPassportSeal.md",
      "type": "API Endpoint",
      "title": "Publicly verify a passport's seal, certificate chain and timestamp",
      "description": "Public seal-verification API — cryptographically verifies that a Digital Product Passport document was sealed by an economic-operator tenant registered on this node and has not been tampered with.",
      "resource": "https://opendpp-node.eu/api/v1/audit/verify"
    },
    {
      "path": "operations/getTenantDidDocument.md",
      "type": "API Endpoint",
      "title": "Resolve a tenant's did:web DID document",
      "description": "Resolves the issuing workspace's did:web DID document (application/did+json).",
      "resource": "https://opendpp-node.eu/tenants/{tenantId}/did.json"
    },
    {
      "path": "operations/getTenantRevocationStatusList.md",
      "type": "API Endpoint",
      "title": "Tenant revocation status list (W3C Bitstring Status List)",
      "description": "Serves the workspace's W3C Bitstring Status List as a signed enveloping vc+jwt (application/vc+jwt) — a BitstringStatusListCredential whose GZIP+base64 encoded bitstring sets the bit of every passport whose status is RECALLED or DECOMMISSI…",
      "resource": "https://opendpp-node.eu/tenants/{tenantId}/status/revocation"
    },
    {
      "path": "operations/listWebhookSubscriptions.md",
      "type": "API Endpoint",
      "title": "List webhook subscriptions (signing secrets stripped)",
      "description": "Lists all webhook subscriptions of the calling workspace.",
      "resource": "https://opendpp-node.eu/api/v1/webhooks/subscriptions"
    },
    {
      "path": "operations/createWebhookSubscription.md",
      "type": "API Endpoint",
      "title": "Register a webhook subscription (signing secret returned once)",
      "description": "Registers an endpoint to receive passport lifecycle webhooks for the calling workspace.",
      "resource": "https://opendpp-node.eu/api/v1/webhooks/subscriptions"
    },
    {
      "path": "operations/updateWebhookSubscription.md",
      "type": "API Endpoint",
      "title": "Update a webhook subscription (url / events / active)",
      "description": "Partially updates a subscription: any of url, events, isActive (key present = set, omitted = unchanged).",
      "resource": "https://opendpp-node.eu/api/v1/webhooks/subscriptions/{id}"
    },
    {
      "path": "operations/deleteWebhookSubscription.md",
      "type": "API Endpoint",
      "title": "Delete a webhook subscription",
      "description": "Deletes a webhook subscription, stopping future deliveries to its endpoint.",
      "resource": "https://opendpp-node.eu/api/v1/webhooks/subscriptions/{id}"
    },
    {
      "path": "operations/rotateWebhookSecret.md",
      "type": "API Endpoint",
      "title": "Rotate a webhook subscription's signing secret",
      "description": "Mints a fresh HMAC-SHA256 signing secret for the subscription and returns it once (the old secret stops validating immediately).",
      "resource": "https://opendpp-node.eu/api/v1/webhooks/subscriptions/{id}/rotate-secret"
    },
    {
      "path": "operations/listWebhookDeliveries.md",
      "type": "API Endpoint",
      "title": "List recent webhook delivery attempts (the outbox)",
      "description": "Returns recent delivery records (the outbox), newest first, for debugging endpoint failures.",
      "resource": "https://opendpp-node.eu/api/v1/webhooks/deliveries"
    },
    {
      "path": "operations/testWebhookSubscription.md",
      "type": "API Endpoint",
      "title": "Send a signed test event to a subscription",
      "description": "Delivers a single signed sample event to the subscription's URL right now and reports the outcome — use it to confirm your endpoint is reachable and that your signature verification works, without waiting for a real passport event.",
      "resource": "https://opendpp-node.eu/api/v1/webhooks/subscriptions/{id}/test"
    },
    {
      "path": "schemas/AasEnvironment.md",
      "type": "Schema",
      "title": "AasEnvironment",
      "description": "An Asset Administration Shell (AAS) v3.0 environment export of the passport, served as application/aas+json.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/AasEnvironment"
    },
    {
      "path": "schemas/AasEnvironmentInput.md",
      "type": "Schema",
      "title": "AasEnvironmentInput",
      "description": "An Asset Administration Shell (AAS) JSON Environment — the format produced by OpenDPP's AAS export of a passport.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/AasEnvironmentInput"
    },
    {
      "path": "schemas/AasIngestBadRequest.md",
      "type": "Schema",
      "title": "AasIngestBadRequest",
      "description": "The 400 bodies of AAS ingestion: the standard error triple (bad request / signature verification / ingestion failure), or an ESPR validation failure with per-field errors[].",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/AasIngestBadRequest"
    },
    {
      "path": "schemas/AasIngestCreated.md",
      "type": "Schema",
      "title": "AasIngestCreated",
      "description": "201 envelope of POST /api/v1/passports/aas/ingest.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/AasIngestCreated"
    },
    {
      "path": "schemas/AasIngestValidationError.md",
      "type": "Schema",
      "title": "AAS ESPR validation failure",
      "description": "AAS ESPR validation failure",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/AasIngestValidationError"
    },
    {
      "path": "schemas/AdvisoryItem.md",
      "type": "Schema",
      "title": "AdvisoryItem",
      "description": "One non-blocking advisory on a response's warnings[] (a heads-up — the request still succeeded) or notices[] (informational — something helpful the API did).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/AdvisoryItem"
    },
    {
      "path": "schemas/ApproveGrantRequest.md",
      "type": "Schema",
      "title": "ApproveGrantRequest",
      "description": "Approval body — only the final expiry is supplied; everything else comes from the original request.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/ApproveGrantRequest"
    },
    {
      "path": "schemas/BatteryUnitCreateItem.md",
      "type": "Schema",
      "title": "BatteryUnitCreateItem",
      "description": "One unit to serialise.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitCreateItem"
    },
    {
      "path": "schemas/BatteryUnitCurrentState.md",
      "type": "Schema",
      "title": "BatteryUnitCurrentState",
      "description": "Latest recorded measurement of the unit (owner/grant tiers only).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitCurrentState"
    },
    {
      "path": "schemas/BatteryUnitDynamicDataEvent.md",
      "type": "Schema",
      "title": "BatteryUnitDynamicDataEvent",
      "description": "One telemetry event in the JSON-LD dynamicData history (privileged view only).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitDynamicDataEvent"
    },
    {
      "path": "schemas/BatteryUnitEventBadRequest.md",
      "type": "Schema",
      "title": "BatteryUnitEventBadRequest",
      "description": "The two 400 bodies of event recording: the standard error triple from handler validation, and the framework's default request-rejection body for malformed JSON.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitEventBadRequest"
    },
    {
      "path": "schemas/BatteryUnitEventListResponse.md",
      "type": "Schema",
      "title": "BatteryUnitEventListResponse",
      "description": "One page of a battery unit's append-only dynamic-data history, newest first.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitEventListResponse"
    },
    {
      "path": "schemas/BatteryUnitEventNode.md",
      "type": "Schema",
      "title": "BatteryUnitEventNode",
      "description": "One append-only telemetry event (owner/grant tiers only).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitEventNode"
    },
    {
      "path": "schemas/BatteryUnitEventRow.md",
      "type": "Schema",
      "title": "BatteryUnitEventRow",
      "description": "One immutable per-unit telemetry record — the reads return exactly the fields documented here.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitEventRow"
    },
    {
      "path": "schemas/BatteryUnitEventType.md",
      "type": "Schema",
      "title": "BatteryUnitEventType",
      "description": "Per-unit dynamic-data event category (Annex XIII / Art. 77 telemetry).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitEventType"
    },
    {
      "path": "schemas/BatteryUnitJsonLd.md",
      "type": "Schema",
      "title": "BatteryUnitJsonLd",
      "description": "JSON-LD document for one serialised battery unit, privileged tenant view (isPrivileged=true): includes currentState + dynamicData telemetry (restricted to legitimate-interest holders/authorities on the public view, where a restrictedData m…",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitJsonLd"
    },
    {
      "path": "schemas/BatteryUnitLineageRef.md",
      "type": "Schema",
      "title": "BatteryUnitLineageRef",
      "description": "Public lineage pointer between battery units.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitLineageRef"
    },
    {
      "path": "schemas/BatteryUnitListResponse.md",
      "type": "Schema",
      "title": "BatteryUnitListResponse",
      "description": "A page of the serialised battery units recorded under one passport, with the paging envelope.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitListResponse"
    },
    {
      "path": "schemas/BatteryUnitRestrictedDataNotice.md",
      "type": "Schema",
      "title": "BatteryUnitRestrictedDataNotice",
      "description": "Marker replacing per-unit telemetry in anonymous (public-tier) responses, with a pointer for requesting legitimate-interest access (Annex XIII(2)-(4)).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitRestrictedDataNotice"
    },
    {
      "path": "schemas/BatteryUnitRow.md",
      "type": "Schema",
      "title": "BatteryUnitRow",
      "description": "One physical serialised battery — the reads return exactly the fields documented here.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitRow"
    },
    {
      "path": "schemas/BatteryUnitSerialisationFailedError.md",
      "type": "Schema",
      "title": "BatteryUnitSerialisationFailedError",
      "description": "400 body when every item in the serialisation batch failed.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitSerialisationFailedError"
    },
    {
      "path": "schemas/BatteryUnitSerialiseBadRequest.md",
      "type": "Schema",
      "title": "BatteryUnitSerialiseBadRequest",
      "description": "The three 400 bodies of unit serialisation: the standard error triple, the all-items-failed Serialisation Failed report, and the framework's default request-rejection body.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitSerialiseBadRequest"
    },
    {
      "path": "schemas/BatteryUnitStatus.md",
      "type": "Schema",
      "title": "BatteryUnitStatus",
      "description": "Annex XIII battery-status vocabulary (EU Battery Regulation).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitStatus"
    },
    {
      "path": "schemas/BatteryUnitTombstoneJsonLd.md",
      "type": "Schema",
      "title": "BatteryUnitTombstoneJsonLd",
      "description": "Tombstone (HTTP 410): once a battery is recycled its passport has ceased to exist.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitTombstoneJsonLd"
    },
    {
      "path": "schemas/BulkBatteryUnitEventsRequest.md",
      "type": "Schema",
      "title": "BulkBatteryUnitEventsRequest",
      "description": "A batch of telemetry records for one unit.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BulkBatteryUnitEventsRequest"
    },
    {
      "path": "schemas/BulkBatteryUnitEventsResponse.md",
      "type": "Schema",
      "title": "BulkBatteryUnitEventsResponse",
      "description": "The partial-success report of a bulk telemetry ingest.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/BulkBatteryUnitEventsResponse"
    },
    {
      "path": "schemas/CreateGrantRequest.md",
      "type": "Schema",
      "title": "CreateGrantRequest",
      "description": "Direct-issuance body.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/CreateGrantRequest"
    },
    {
      "path": "schemas/DefaultRequestRejectionError.md",
      "type": "Schema",
      "title": "Default request-rejection error body",
      "description": "The default 400 body of a request rejected before the handler runs — a syntactically malformed JSON body, or an envelope (schema) violation — so none of the handler-built {success:false, ...} shapes apply.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/DefaultRequestRejectionError"
    },
    {
      "path": "schemas/DeleteOperatorResponse.md",
      "type": "Schema",
      "title": "DeleteOperatorResponse",
      "description": "Outcome of removing an economic operator: whether it was archived rather than deleted, and how many of its passports were archived with it.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/DeleteOperatorResponse"
    },
    {
      "path": "schemas/DidWebDocument.md",
      "type": "Schema",
      "title": "DidWebDocument",
      "description": "A tenant's did:web DID document (public-key material only).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/DidWebDocument"
    },
    {
      "path": "schemas/DppJsonLdContextDocument.md",
      "type": "Schema",
      "title": "DppJsonLdContextDocument",
      "description": "The fixed W3C JSON-LD context document served by GET /context/v1: maps DigitalProductPassport, economicOperator, metadata, digitalSeal, signingPublicKey and proof to https://opendpp-node.eu/ns/dpp#… IRIs, and createdAt/updatedAt to schema.…",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/DppJsonLdContextDocument"
    },
    {
      "path": "schemas/DppVocabContextDocument.md",
      "type": "Schema",
      "title": "DppVocabContextDocument",
      "description": "The canonical resolvable JSON-LD context served by GET /contexts/dpp/v1 — the context every public passport and battery-unit document references in its @context.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/DppVocabContextDocument"
    },
    {
      "path": "schemas/EconomicOperatorNode.md",
      "type": "Schema",
      "title": "EconomicOperatorNode",
      "description": "Embedded economic-operator JSON-LD node (public in all tiers).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/EconomicOperatorNode"
    },
    {
      "path": "schemas/EpcisCaptureResponse.md",
      "type": "Schema",
      "title": "EpcisCaptureResponse",
      "description": "Per-event outcome of capturing an EPCIS 2.0 document, with partial-success semantics: some events may be stored while others fail.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/EpcisCaptureResponse"
    },
    {
      "path": "schemas/EpcisDocument.md",
      "type": "Schema",
      "title": "EpcisDocument",
      "description": "A GS1 EPCIS 2.0 document (JSON/JSON-LD).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/EpcisDocument"
    },
    {
      "path": "schemas/Error.md",
      "type": "Schema",
      "title": "Error",
      "description": "Standard error body.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/Error"
    },
    {
      "path": "schemas/FacilityCreateRequest.md",
      "type": "Schema",
      "title": "FacilityCreateRequest",
      "description": "A facility to register: its GS1 GLN-13, name and country, plus optional activity and street address.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/FacilityCreateRequest"
    },
    {
      "path": "schemas/FacilityCreatedEnvelope.md",
      "type": "Schema",
      "title": "FacilityCreatedEnvelope",
      "description": "Confirmation that a facility was registered, carrying the stored record.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/FacilityCreatedEnvelope"
    },
    {
      "path": "schemas/FacilityDeletedEnvelope.md",
      "type": "Schema",
      "title": "FacilityDeletedEnvelope",
      "description": "Confirmation that a facility was deleted.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/FacilityDeletedEnvelope"
    },
    {
      "path": "schemas/FacilityEnvelope.md",
      "type": "Schema",
      "title": "FacilityEnvelope",
      "description": "A single facility record.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/FacilityEnvelope"
    },
    {
      "path": "schemas/FacilityListEnvelope.md",
      "type": "Schema",
      "title": "FacilityListEnvelope",
      "description": "A page of the workspace's facilities, with the paging envelope.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/FacilityListEnvelope"
    },
    {
      "path": "schemas/FacilityRow.md",
      "type": "Schema",
      "title": "FacilityRow",
      "description": "A facility (GS1 GLN) master-data row, exactly as stored.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/FacilityRow"
    },
    {
      "path": "schemas/FacilityUpdateRequest.md",
      "type": "Schema",
      "title": "FacilityUpdateRequest",
      "description": "Partial update.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/FacilityUpdateRequest"
    },
    {
      "path": "schemas/ForwardedResolverError.md",
      "type": "Schema",
      "title": "ForwardedResolverError",
      "description": "Forwarded public-resolver body (no success field).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/ForwardedResolverError"
    },
    {
      "path": "schemas/ForwardedResolverRateLimitError.md",
      "type": "Schema",
      "title": "ForwardedResolverRateLimitError",
      "description": "Forwarded public-resolver limiter body (no success field, no headers).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/ForwardedResolverRateLimitError"
    },
    {
      "path": "schemas/GlobalRateLimitError.md",
      "type": "Schema",
      "title": "GlobalRateLimitError",
      "description": "Global rate-limit plugin default body (with x-ratelimit-* headers).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/GlobalRateLimitError"
    },
    {
      "path": "schemas/GrantDecisionResponse.md",
      "type": "Schema",
      "title": "GrantDecisionResponse",
      "description": "Returned by deny and revoke: the updated grant, no token.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/GrantDecisionResponse"
    },
    {
      "path": "schemas/GrantIssuedResponse.md",
      "type": "Schema",
      "title": "GrantIssuedResponse",
      "description": "Returned by direct issuance (201) and request approval (200).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/GrantIssuedResponse"
    },
    {
      "path": "schemas/GrantListResponse.md",
      "type": "Schema",
      "title": "GrantListResponse",
      "description": "List envelope for GET /api/v1/grants (paginated).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/GrantListResponse"
    },
    {
      "path": "schemas/GrantRevokeForbidden.md",
      "type": "Schema",
      "title": "GrantRevokeForbidden",
      "description": "The two 403 bodies of grant revocation: the route-level {error, message} body (an AUTHORITY grant cannot be revoked by the workspace; no success field) and the standard middleware envelope.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/GrantRevokeForbidden"
    },
    {
      "path": "schemas/GrantRouteError.md",
      "type": "Schema",
      "title": "GrantRouteError",
      "description": "Error body used by the grants endpoints' route-level errors (400/403/404/409).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/GrantRouteError"
    },
    {
      "path": "schemas/GrantRow.md",
      "type": "Schema",
      "title": "GrantRow",
      "description": "Tenant-facing projection of an access grant.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/GrantRow"
    },
    {
      "path": "schemas/Gs1BatchDecodeError.md",
      "type": "Schema",
      "title": "Gs1BatchDecodeError",
      "description": "A per-item decode failure — the batch itself still returns 200 (partial-success).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/Gs1BatchDecodeError"
    },
    {
      "path": "schemas/Gs1BatchDecodeOk.md",
      "type": "Schema",
      "title": "Gs1BatchDecodeOk",
      "description": "A successfully decoded item — the same fields as the single-scan 200 minus success.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/Gs1BatchDecodeOk"
    },
    {
      "path": "schemas/Gs1BatchDecodeResult.md",
      "type": "Schema",
      "title": "Gs1BatchDecodeResult",
      "description": "One batch-decode result, aligned to its input item: a decoded scan (ok: true) or a per-item error (ok: false + error).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/Gs1BatchDecodeResult"
    },
    {
      "path": "schemas/HealthStatus.md",
      "type": "Schema",
      "title": "HealthStatus",
      "description": "Health-check body of GET /health.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/HealthStatus"
    },
    {
      "path": "schemas/MaterialVocabularyListResponse.md",
      "type": "Schema",
      "title": "MaterialVocabularyListResponse",
      "description": "Envelope of GET /api/v1/materials.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/MaterialVocabularyListResponse"
    },
    {
      "path": "schemas/MaterialVocabularyRow.md",
      "type": "Schema",
      "title": "MaterialVocabularyRow",
      "description": "One entry of the platform-curated material vocabulary.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/MaterialVocabularyRow"
    },
    {
      "path": "schemas/MerkleTreeAttestationProof.md",
      "type": "Schema",
      "title": "MerkleTreeAttestationProof",
      "description": "OpenDPP's own proof type — an ADVANCED electronic seal: an ECDSA prime256v1 signature over a SHA-256 Merkle root of the key-sorted metadata (one leaf per top-level metadata key).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/MerkleTreeAttestationProof"
    },
    {
      "path": "schemas/OperatorGetResponse.md",
      "type": "Schema",
      "title": "OperatorGetResponse",
      "description": "A single economic operator record.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/OperatorGetResponse"
    },
    {
      "path": "schemas/OperatorListResponse.md",
      "type": "Schema",
      "title": "OperatorListResponse",
      "description": "The economic operators bound to the calling workspace.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/OperatorListResponse"
    },
    {
      "path": "schemas/OperatorMinimalError.md",
      "type": "Schema",
      "title": "OperatorMinimalError",
      "description": "Minimal error envelope used by the operator/key self-service handlers — note the standard error key is ABSENT (unlike the shared Error schema).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/OperatorMinimalError"
    },
    {
      "path": "schemas/OperatorMinimalErrorResponse.md",
      "type": "Schema",
      "title": "OperatorMinimalErrorResponse",
      "description": "An operator-endpoint error: either the route's minimal {error, message} body (no success field) or the standard middleware envelope.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/OperatorMinimalErrorResponse"
    },
    {
      "path": "schemas/OperatorRow.md",
      "type": "Schema",
      "title": "OperatorRow",
      "description": "An economic-operator record (EconomicOperator).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/OperatorRow"
    },
    {
      "path": "schemas/PassportAasEnvironment.md",
      "type": "Schema",
      "title": "PassportAasEnvironment",
      "description": "IDTA Asset Administration Shell environment (returned when Accept contains application/aas+json), role-filtered for the caller's access tier.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportAasEnvironment"
    },
    {
      "path": "schemas/PassportBulkBadRequest.md",
      "type": "Schema",
      "title": "PassportBulkBadRequest",
      "description": "The 400 bodies of bulk ingestion: every row failed (Bulk Ingestion Failed), or the request never reached row processing and returns the default request-rejection body.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportBulkBadRequest"
    },
    {
      "path": "schemas/PassportBulkFailure.md",
      "type": "Schema",
      "title": "PassportBulkFailure",
      "description": "400 body of POST /api/v1/passports/bulk when EVERY row failed.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportBulkFailure"
    },
    {
      "path": "schemas/PassportBulkRequest.md",
      "type": "Schema",
      "title": "PassportBulkRequest",
      "description": "A batch of passports to ingest, with optional dry-run preview and upsert-on-conflict behaviour.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportBulkRequest"
    },
    {
      "path": "schemas/PassportBulkResult.md",
      "type": "Schema",
      "title": "PassportBulkResult",
      "description": "201 partial-success envelope of POST /api/v1/passports/bulk.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportBulkResult"
    },
    {
      "path": "schemas/PassportBulkRow.md",
      "type": "Schema",
      "title": "PassportBulkRow",
      "description": "One bulk-ingestion row.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportBulkRow"
    },
    {
      "path": "schemas/PassportCreateBadRequest.md",
      "type": "Schema",
      "title": "PassportCreateBadRequest",
      "description": "The 400 bodies of passport creation: an ESPR validation failure with per-field errors[], or the standard error triple / pre-handler rejection.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportCreateBadRequest"
    },
    {
      "path": "schemas/PassportCreateRequest.md",
      "type": "Schema",
      "title": "PassportCreateRequest",
      "description": "A passport to create: its product identifier and ESPR category metadata, with optional operator and facility binding, a draft flag, and enrichment held outside the sealed metadata.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportCreateRequest"
    },
    {
      "path": "schemas/PassportCreateValidationError.md",
      "type": "Schema",
      "title": "ESPR validation failure",
      "description": "ESPR validation failure",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportCreateValidationError"
    },
    {
      "path": "schemas/PassportEnrichmentInput.md",
      "type": "Schema",
      "title": "PassportEnrichmentInput",
      "description": "Optional presentational (non-regulatory) marketing enrichment, stored OUTSIDE the ESPR-validated metadata and the Merkle seal; it never appears in the JSON-LD passport document.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportEnrichmentInput"
    },
    {
      "path": "schemas/PassportGetNotFound.md",
      "type": "Schema",
      "title": "PassportGetNotFound",
      "description": "The two 404 bodies of an authenticated passport read: the standard workspace-scoped envelope, or the body forwarded from the public resolver (no success field).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportGetNotFound"
    },
    {
      "path": "schemas/PassportGetTooManyRequests.md",
      "type": "Schema",
      "title": "PassportGetTooManyRequests",
      "description": "The two 429 bodies of an authenticated passport read: the global limiter's default body (with x-ratelimit-* headers), or the body forwarded from the inner public resolver's limiter (no headers).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportGetTooManyRequests"
    },
    {
      "path": "schemas/PassportIngestCreated.md",
      "type": "Schema",
      "title": "PassportIngestCreated",
      "description": "201 envelope of POST /api/v1/passports.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportIngestCreated"
    },
    {
      "path": "schemas/PassportListItem.md",
      "type": "Schema",
      "title": "PassportListItem",
      "description": "One JSON-LD passport document as it appears in GET /api/v1/passports list responses.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportListItem"
    },
    {
      "path": "schemas/PassportListResponse.md",
      "type": "Schema",
      "title": "PassportListResponse",
      "description": "Envelope of GET /api/v1/passports.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportListResponse"
    },
    {
      "path": "schemas/PassportMetadataInput.md",
      "type": "Schema",
      "title": "PassportMetadataInput",
      "description": "The ESPR product metadata payload.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportMetadataInput"
    },
    {
      "path": "schemas/PassportQuotaError.md",
      "type": "Schema",
      "title": "PassportQuotaError",
      "description": "402 body for a write blocked by billing.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportQuotaError"
    },
    {
      "path": "schemas/PassportSealResponse.md",
      "type": "Schema",
      "title": "PassportSealResponse",
      "description": "200 envelope of POST /api/v1/passports/{id}/seal.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportSealResponse"
    },
    {
      "path": "schemas/PassportStatusUpdateRequest.md",
      "type": "Schema",
      "title": "PassportStatusUpdateRequest",
      "description": "Body of PUT /api/v1/passports/{id}/status.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportStatusUpdateRequest"
    },
    {
      "path": "schemas/PassportStatusUpdateResponse.md",
      "type": "Schema",
      "title": "PassportStatusUpdateResponse",
      "description": "200 envelope of PUT /api/v1/passports/{id}/status.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportStatusUpdateResponse"
    },
    {
      "path": "schemas/PassportUpdateBadRequest.md",
      "type": "Schema",
      "title": "PassportUpdateBadRequest",
      "description": "The two 400 bodies of a passport update: the standard error triple, or an ESPR validation failure (which, unlike creation, carries NO warnings array).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportUpdateBadRequest"
    },
    {
      "path": "schemas/PassportUpdateRequest.md",
      "type": "Schema",
      "title": "PassportUpdateRequest",
      "description": "Body of PUT /api/v1/passports/{id}.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportUpdateRequest"
    },
    {
      "path": "schemas/PassportUpdateResponse.md",
      "type": "Schema",
      "title": "PassportUpdateResponse",
      "description": "200 envelope of PUT /api/v1/passports/{id}.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportUpdateResponse"
    },
    {
      "path": "schemas/PassportUpdateValidationError.md",
      "type": "Schema",
      "title": "PassportUpdateValidationError",
      "description": "400 ESPR validation failure body of PUT /api/v1/passports/{id}.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportUpdateValidationError"
    },
    {
      "path": "schemas/PassportValidateOnlyError.md",
      "type": "Schema",
      "title": "PassportValidateOnlyError",
      "description": "400 envelope of the validate-only endpoints.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportValidateOnlyError"
    },
    {
      "path": "schemas/PassportValidateOnlyRequest.md",
      "type": "Schema",
      "title": "PassportValidateOnlyRequest",
      "description": "A metadata payload to validate against its ESPR category rules without persisting anything.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportValidateOnlyRequest"
    },
    {
      "path": "schemas/PassportValidateOnlyResult.md",
      "type": "Schema",
      "title": "PassportValidateOnlyResult",
      "description": "200 envelope of the validate-only endpoints (only the declared keys are emitted).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PassportValidateOnlyResult"
    },
    {
      "path": "schemas/PublicBatteryUnitJsonLd.md",
      "type": "Schema",
      "title": "PublicBatteryUnitJsonLd",
      "description": "Public JSON-LD document for one individual serialised battery unit (EU Battery Regulation).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PublicBatteryUnitJsonLd"
    },
    {
      "path": "schemas/PublicFacilityNode.md",
      "type": "Schema",
      "title": "PublicFacilityNode",
      "description": "Embedded manufacturing-facility JSON-LD node — the GS1 GLN-backed Unique Facility Identifier (UFI, EN 18219).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PublicFacilityNode"
    },
    {
      "path": "schemas/PublicPassportJsonLd.md",
      "type": "Schema",
      "title": "PublicPassportJsonLd",
      "description": "The public, redacted JSON-LD Digital Product Passport document (application/ld+json).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/PublicPassportJsonLd"
    },
    {
      "path": "schemas/RecordBatteryUnitEventRequest.md",
      "type": "Schema",
      "title": "RecordBatteryUnitEventRequest",
      "description": "One telemetry record.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/RecordBatteryUnitEventRequest"
    },
    {
      "path": "schemas/RecordBatteryUnitEventResponse.md",
      "type": "Schema",
      "title": "RecordBatteryUnitEventResponse",
      "description": "Confirmation that a dynamic-data record was appended to a battery unit, echoing the stored event.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/RecordBatteryUnitEventResponse"
    },
    {
      "path": "schemas/RegisterOperatorRequest.md",
      "type": "Schema",
      "title": "RegisterOperatorRequest",
      "description": "An economic operator to register: its legal name and registration identifier, with an optional identifier scheme and supply-chain role.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/RegisterOperatorRequest"
    },
    {
      "path": "schemas/RegisterOperatorResponse.md",
      "type": "Schema",
      "title": "RegisterOperatorResponse",
      "description": "Confirmation that an economic operator was registered, carrying the stored record and any non-blocking advisories.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/RegisterOperatorResponse"
    },
    {
      "path": "schemas/RestoreOperatorResponse.md",
      "type": "Schema",
      "title": "RestoreOperatorResponse",
      "description": "Outcome of restoring an archived economic operator, including how many of its passports were restored.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/RestoreOperatorResponse"
    },
    {
      "path": "schemas/RotateTenantKeysResponse.md",
      "type": "Schema",
      "title": "RotateTenantKeysResponse",
      "description": "Confirmation that the workspace's signing key was rotated, returning the new public key.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/RotateTenantKeysResponse"
    },
    {
      "path": "schemas/SealCertificateReport.md",
      "type": "Schema",
      "title": "SealCertificateReport",
      "description": "Present only for x5c-carrying proofs on a verified: true outcome whose chain is TRUSTED — chainValid AND keyMatchesProof both true (the two policy verified: false responses AND any untrusted-chain outcome omit it): the certified legal iden…",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/SealCertificateReport"
    },
    {
      "path": "schemas/SealTimestampReport.md",
      "type": "Schema",
      "title": "SealTimestampReport",
      "description": "Present only when payload.proof.rfc3161.token was supplied AND verification proceeds past the key-registration and operator-binding gates (the two policy verified: false responses omit it).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/SealTimestampReport"
    },
    {
      "path": "schemas/SealVerifyRequest.md",
      "type": "Schema",
      "title": "SealVerifyRequest",
      "description": "Verification request.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/SealVerifyRequest"
    },
    {
      "path": "schemas/SealVerifyResponse.md",
      "type": "Schema",
      "title": "SealVerifyResponse",
      "description": "Always HTTP 200 once the request is well-formed.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/SealVerifyResponse"
    },
    {
      "path": "schemas/SectorJsonSchemaDocument.md",
      "type": "Schema",
      "title": "SectorJsonSchemaDocument",
      "description": "A JSON Schema draft-07 document describing the ESPR metadata payload for one product category, served as application/schema+json.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/SectorJsonSchemaDocument"
    },
    {
      "path": "schemas/SectorVocabularyContext.md",
      "type": "Schema",
      "title": "SectorVocabularyContext",
      "description": "Per-category JSON-LD vocabulary context, returned by GET /api/v1/schemas/{category} when Accept contains application/ld+json.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/SectorVocabularyContext"
    },
    {
      "path": "schemas/SerializeBatteryUnitsRequest.md",
      "type": "Schema",
      "title": "SerializeBatteryUnitsRequest",
      "description": "Either a single unit object, or a batch wrapper {units: [...]}.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/SerializeBatteryUnitsRequest"
    },
    {
      "path": "schemas/SerializeBatteryUnitsResponse.md",
      "type": "Schema",
      "title": "SerializeBatteryUnitsResponse",
      "description": "Returned (201) when at least one unit was created.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/SerializeBatteryUnitsResponse"
    },
    {
      "path": "schemas/ServiceVersion.md",
      "type": "Schema",
      "title": "ServiceVersion",
      "description": "Running API contract version and source build identity, returned by GET /api/v1/version.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/ServiceVersion"
    },
    {
      "path": "schemas/TraceEventRegistered.md",
      "type": "Schema",
      "title": "TraceEventRegistered",
      "description": "201 envelope of POST /api/v1/events.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/TraceEventRegistered"
    },
    {
      "path": "schemas/TraceLineageNode.md",
      "type": "Schema",
      "title": "TraceLineageNode",
      "description": "One node of the recursive upstream lineage DAG.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/TraceLineageNode"
    },
    {
      "path": "schemas/TraceLineageResponse.md",
      "type": "Schema",
      "title": "TraceLineageResponse",
      "description": "The upstream pedigree of a traceability event, as a recursive graph of the events it derives from.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/TraceLineageResponse"
    },
    {
      "path": "schemas/UntpEventCredential.md",
      "type": "Schema",
      "title": "UntpEventCredential",
      "description": "A UNTP/EPCIS 2.0 traceability event wrapped as a VC-shaped credential.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/UntpEventCredential"
    },
    {
      "path": "schemas/UntpEventCredentialSubject.md",
      "type": "Schema",
      "title": "UntpEventCredentialSubject",
      "description": "The EPCIS event payload.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/UntpEventCredentialSubject"
    },
    {
      "path": "schemas/UntpEventProof.md",
      "type": "Schema",
      "title": "UntpEventProof",
      "description": "Credential proof.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/UntpEventProof"
    },
    {
      "path": "schemas/UntpVerificationMethod.md",
      "type": "Schema",
      "title": "UntpVerificationMethod",
      "description": "Embedded verification-method object.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/UntpVerificationMethod"
    },
    {
      "path": "schemas/UpdateOperatorRequest.md",
      "type": "Schema",
      "title": "UpdateOperatorRequest",
      "description": "Both fields are optional.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/UpdateOperatorRequest"
    },
    {
      "path": "schemas/UpdateOperatorResponse.md",
      "type": "Schema",
      "title": "UpdateOperatorResponse",
      "description": "The economic operator as stored after the update.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/UpdateOperatorResponse"
    },
    {
      "path": "schemas/ValidationErrorItem.md",
      "type": "Schema",
      "title": "ValidationErrorItem",
      "description": "One field-level finding from ESPR category validation.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/ValidationErrorItem"
    },
    {
      "path": "schemas/WebhookDeliveriesResponse.md",
      "type": "Schema",
      "title": "WebhookDeliveriesResponse",
      "description": "Recent webhook delivery attempts for a subscription, newest first, for debugging endpoint failures.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookDeliveriesResponse"
    },
    {
      "path": "schemas/WebhookDeliveryRow.md",
      "type": "Schema",
      "title": "WebhookDeliveryRow",
      "description": "One outbox delivery record (event-level).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookDeliveryRow"
    },
    {
      "path": "schemas/WebhookEnvelope.md",
      "type": "Schema",
      "title": "WebhookEnvelope",
      "description": "The signed body of every webhook delivery.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookEnvelope"
    },
    {
      "path": "schemas/WebhookEventFilter.md",
      "type": "Schema",
      "title": "WebhookEventFilter",
      "description": "Subscribable event filter values.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookEventFilter"
    },
    {
      "path": "schemas/WebhookSecretRotateResponse.md",
      "type": "Schema",
      "title": "WebhookSecretRotateResponse",
      "description": "Confirmation that a subscription's HMAC signing secret was rotated; the new secret is returned once and cannot be retrieved again.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSecretRotateResponse"
    },
    {
      "path": "schemas/WebhookSubscriptionCreateRequest.md",
      "type": "Schema",
      "title": "WebhookSubscriptionCreateRequest",
      "description": "An endpoint to receive webhook deliveries, and the event types it subscribes to.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionCreateRequest"
    },
    {
      "path": "schemas/WebhookSubscriptionCreateResponse.md",
      "type": "Schema",
      "title": "WebhookSubscriptionCreateResponse",
      "description": "Confirmation that a webhook subscription was created, carrying the stored subscription.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionCreateResponse"
    },
    {
      "path": "schemas/WebhookSubscriptionDeleteResponse.md",
      "type": "Schema",
      "title": "WebhookSubscriptionDeleteResponse",
      "description": "Confirmation that a webhook subscription was deleted.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionDeleteResponse"
    },
    {
      "path": "schemas/WebhookSubscriptionListResponse.md",
      "type": "Schema",
      "title": "WebhookSubscriptionListResponse",
      "description": "The calling workspace's webhook subscriptions.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionListResponse"
    },
    {
      "path": "schemas/WebhookSubscriptionRow.md",
      "type": "Schema",
      "title": "WebhookSubscriptionRow",
      "description": "A webhook subscription row with the HMAC signing secret stripped (it is shown exactly once, in the 201 create response).",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionRow"
    },
    {
      "path": "schemas/WebhookSubscriptionUpdateRequest.md",
      "type": "Schema",
      "title": "WebhookSubscriptionUpdateRequest",
      "description": "All fields optional; include only what you want to change.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionUpdateRequest"
    },
    {
      "path": "schemas/WebhookSubscriptionUpdateResponse.md",
      "type": "Schema",
      "title": "WebhookSubscriptionUpdateResponse",
      "description": "The webhook subscription as stored after the update.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionUpdateResponse"
    },
    {
      "path": "schemas/WebhookSubscriptionWithSecret.md",
      "type": "Schema",
      "title": "WebhookSubscriptionWithSecret",
      "description": "The full subscription row as returned ONLY by the 201 create response — includes the HMAC-SHA256 signing secret.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionWithSecret"
    },
    {
      "path": "schemas/WebhookTestResult.md",
      "type": "Schema",
      "title": "WebhookTestResult",
      "description": "The outcome of delivering a signed sample event to a subscription's endpoint right now.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WebhookTestResult"
    },
    {
      "path": "schemas/WhoamiResponse.md",
      "type": "Schema",
      "title": "WhoamiResponse",
      "description": "The calling credential's identity: its workspace, the resolved auth principal and permissions, and active-passport usage against the plan quota.",
      "resource": "https://opendpp-node.eu/openapi.json#/components/schemas/WhoamiResponse"
    },
    {
      "path": "webhooks/passport.ingested.md",
      "type": "Webhook Event",
      "title": "passport.ingested",
      "description": "Passport created or first published",
      "resource": "https://opendpp-node.eu/openapi.json#/webhooks/passport.ingested"
    },
    {
      "path": "webhooks/passport.recalled.md",
      "type": "Webhook Event",
      "title": "passport.recalled",
      "description": "Passport recalled",
      "resource": "https://opendpp-node.eu/openapi.json#/webhooks/passport.recalled"
    },
    {
      "path": "webhooks/passport.sealed.md",
      "type": "Webhook Event",
      "title": "passport.sealed",
      "description": "Passport sealed with an advanced electronic seal",
      "resource": "https://opendpp-node.eu/openapi.json#/webhooks/passport.sealed"
    },
    {
      "path": "webhooks/passport.status_updated.md",
      "type": "Webhook Event",
      "title": "passport.status_updated",
      "description": "Passport status changed (decommission or reactivation)",
      "resource": "https://opendpp-node.eu/openapi.json#/webhooks/passport.status_updated"
    },
    {
      "path": "webhooks/passport.updated.md",
      "type": "Webhook Event",
      "title": "passport.updated",
      "description": "Passport edited in place",
      "resource": "https://opendpp-node.eu/openapi.json#/webhooks/passport.updated"
    }
  ]
}