From 069896a5346ba75b898ac0b30bb3204efa98090c Mon Sep 17 00:00:00 2001 From: g Date: Mon, 22 Jun 2026 10:38:03 +0300 Subject: [PATCH] chore: reset to OpenDPP API contract 1.0.0 (initial release) Sync the OKF knowledge bundle to the rebaselined OpenDPP public API contract 1.0.0 (mirrored from the backend's okf/**) and add an initial-release CHANGELOG. Bundle validates (211 concepts). --- CHANGELOG.md | 10 ++++++++++ guides/authentication.md | 2 +- guides/conformance.md | 2 +- guides/errors.md | 2 +- guides/interop-aas-untp.md | 2 +- guides/public-access-tiers.md | 2 +- guides/rate-limits.md | 2 +- guides/sealing-and-verification.md | 2 +- index.md | 2 +- log.md | 4 ++-- manifest.json | 4 ++-- operations/approveGrantRequest.md | 2 +- operations/auditEventLineage.md | 4 ++-- operations/bulkIngestPassports.md | 2 +- operations/createFacility.md | 2 +- operations/createGrant.md | 2 +- operations/createPassport.md | 2 +- operations/createWebhookSubscription.md | 2 +- operations/deleteBatteryUnit.md | 2 +- operations/deleteDraftPassport.md | 2 +- operations/deleteFacility.md | 2 +- operations/deleteOperator.md | 2 +- operations/deleteWebhookSubscription.md | 2 +- operations/denyGrantRequest.md | 2 +- operations/getApiVersion.md | 2 +- operations/getBatteryUnit.md | 2 +- operations/getBatteryUnitQrCode.md | 2 +- operations/getDppJsonLdContext.md | 2 +- operations/getEventLineage.md | 2 +- operations/getFacility.md | 2 +- operations/getHealth.md | 2 +- operations/getJsonLdContext.md | 2 +- operations/getOperator.md | 2 +- operations/getPassport.md | 2 +- operations/getPassportQrCode.md | 2 +- operations/getSealCaCertificate.md | 2 +- operations/getSectorSchema.md | 2 +- operations/getTenantDidDocument.md | 2 +- operations/getTenantRevocationStatusList.md | 2 +- operations/ingestPassportFromAas.md | 2 +- operations/listBatteryUnitEvents.md | 2 +- operations/listBatteryUnits.md | 2 +- operations/listFacilities.md | 2 +- operations/listGrants.md | 2 +- operations/listMaterials.md | 2 +- operations/listOperators.md | 2 +- operations/listPassports.md | 2 +- operations/listWebhookDeliveries.md | 2 +- operations/listWebhookSubscriptions.md | 2 +- operations/recordBatteryUnitEvent.md | 2 +- operations/registerOperator.md | 2 +- operations/registerTraceabilityEvent.md | 2 +- operations/resolveGs1Grai.md | 2 +- operations/resolveGs1Gtin.md | 2 +- operations/resolveGs1GtinSerial.md | 2 +- operations/resolvePublicBatteryUnit.md | 2 +- operations/resolvePublicPassport.md | 2 +- operations/restoreOperator.md | 2 +- operations/revokeGrant.md | 2 +- operations/rotateTenantKeys.md | 2 +- operations/rotateWebhookSecret.md | 2 +- operations/sealPassport.md | 2 +- operations/serializeBatteryUnits.md | 2 +- operations/testWebhookSubscription.md | 2 +- operations/updateFacility.md | 2 +- operations/updateOperator.md | 2 +- operations/updatePassport.md | 2 +- operations/updatePassportStatus.md | 2 +- operations/updateWebhookSubscription.md | 2 +- operations/validatePassport.md | 4 ++-- operations/validatePassportPublic.md | 2 +- operations/verifyPassportSeal.md | 2 +- operations/whoami.md | 2 +- overview.md | 2 +- schemas/AasEnvironment.md | 2 +- schemas/AasEnvironmentInput.md | 2 +- schemas/AasIngestCreated.md | 2 +- schemas/ApproveGrantRequest.md | 2 +- schemas/BatteryUnitCreateItem.md | 2 +- schemas/BatteryUnitCurrentState.md | 2 +- schemas/BatteryUnitDeleteResponse.md | 2 +- schemas/BatteryUnitDynamicDataEvent.md | 2 +- schemas/BatteryUnitEventListResponse.md | 2 +- schemas/BatteryUnitEventNode.md | 2 +- schemas/BatteryUnitEventRow.md | 2 +- schemas/BatteryUnitEventType.md | 2 +- schemas/BatteryUnitJsonLd.md | 2 +- schemas/BatteryUnitLineageRef.md | 2 +- schemas/BatteryUnitListResponse.md | 2 +- schemas/BatteryUnitRestrictedDataNotice.md | 2 +- schemas/BatteryUnitRow.md | 2 +- schemas/BatteryUnitSerialisationFailedError.md | 2 +- schemas/BatteryUnitStatus.md | 2 +- schemas/BatteryUnitTombstoneJsonLd.md | 2 +- schemas/CreateGrantRequest.md | 2 +- schemas/DeleteOperatorResponse.md | 2 +- schemas/DidWebDocument.md | 2 +- schemas/DppJsonLdContextDocument.md | 2 +- schemas/DppVocabContextDocument.md | 2 +- schemas/EconomicOperatorNode.md | 2 +- schemas/Error.md | 2 +- schemas/FacilityCreateRequest.md | 2 +- schemas/FacilityCreatedEnvelope.md | 2 +- schemas/FacilityDeletedEnvelope.md | 2 +- schemas/FacilityEnvelope.md | 2 +- schemas/FacilityListEnvelope.md | 2 +- schemas/FacilityRow.md | 2 +- schemas/FacilityUpdateRequest.md | 2 +- schemas/FastifyDefaultBadRequest.md | 2 +- schemas/GrantDecisionResponse.md | 2 +- schemas/GrantIssuedResponse.md | 2 +- schemas/GrantListResponse.md | 2 +- schemas/GrantRouteError.md | 2 +- schemas/GrantRow.md | 2 +- schemas/HealthStatus.md | 2 +- schemas/MaterialVocabularyListResponse.md | 2 +- schemas/MaterialVocabularyRow.md | 2 +- schemas/MerkleTreeAttestationProof.md | 2 +- schemas/OperatorGetResponse.md | 2 +- schemas/OperatorListResponse.md | 2 +- schemas/OperatorMinimalError.md | 2 +- schemas/OperatorRow.md | 2 +- schemas/PassportAasEnvironment.md | 2 +- schemas/PassportBulkFailure.md | 2 +- schemas/PassportBulkRequest.md | 2 +- schemas/PassportBulkResult.md | 2 +- schemas/PassportBulkRow.md | 2 +- schemas/PassportCreateRequest.md | 2 +- schemas/PassportEnrichmentInput.md | 2 +- schemas/PassportIngestCreated.md | 2 +- schemas/PassportListItem.md | 2 +- schemas/PassportListResponse.md | 2 +- schemas/PassportMetadataInput.md | 2 +- schemas/PassportSealResponse.md | 2 +- schemas/PassportStatusUpdateRequest.md | 2 +- schemas/PassportStatusUpdateResponse.md | 2 +- schemas/PassportUpdateRequest.md | 2 +- schemas/PassportUpdateResponse.md | 2 +- schemas/PassportUpdateValidationError.md | 4 ++-- schemas/PassportValidateOnlyError.md | 2 +- schemas/PassportValidateOnlyRequest.md | 2 +- schemas/PassportValidateOnlyResult.md | 4 ++-- schemas/PublicBatteryUnitJsonLd.md | 2 +- schemas/PublicFacilityNode.md | 2 +- schemas/PublicPassportJsonLd.md | 2 +- schemas/RecordBatteryUnitEventRequest.md | 2 +- schemas/RecordBatteryUnitEventResponse.md | 2 +- schemas/RegisterOperatorRequest.md | 2 +- schemas/RegisterOperatorResponse.md | 2 +- schemas/RestoreOperatorResponse.md | 2 +- schemas/RotateTenantKeysResponse.md | 2 +- schemas/SealCertificateReport.md | 2 +- schemas/SealTimestampReport.md | 2 +- schemas/SealVerifyRequest.md | 2 +- schemas/SealVerifyResponse.md | 2 +- schemas/SectorJsonSchemaDocument.md | 2 +- schemas/SectorVocabularyContext.md | 2 +- schemas/SerializeBatteryUnitsRequest.md | 2 +- schemas/SerializeBatteryUnitsResponse.md | 2 +- schemas/ServiceVersion.md | 2 +- schemas/TraceComplianceAuditResponse.md | 2 +- schemas/TraceComplianceCertificate.md | 16 +++++++--------- schemas/TraceEventRegistered.md | 2 +- schemas/TraceLineageNode.md | 2 +- schemas/TraceLineageResponse.md | 2 +- schemas/UntpEventCredential.md | 2 +- schemas/UntpEventCredentialSubject.md | 2 +- schemas/UntpEventProof.md | 2 +- schemas/UntpVerificationMethod.md | 2 +- schemas/UpdateOperatorRequest.md | 2 +- schemas/UpdateOperatorResponse.md | 2 +- schemas/ValidationErrorItem.md | 2 +- schemas/WebhookDeliveriesResponse.md | 2 +- schemas/WebhookDeliveryRow.md | 2 +- schemas/WebhookEnvelope.md | 2 +- schemas/WebhookEventFilter.md | 2 +- schemas/WebhookSecretRotateResponse.md | 2 +- schemas/WebhookSubscriptionCreateRequest.md | 2 +- schemas/WebhookSubscriptionCreateResponse.md | 2 +- schemas/WebhookSubscriptionDeleteResponse.md | 2 +- schemas/WebhookSubscriptionListResponse.md | 2 +- schemas/WebhookSubscriptionRow.md | 2 +- schemas/WebhookSubscriptionUpdateRequest.md | 2 +- schemas/WebhookSubscriptionUpdateResponse.md | 2 +- schemas/WebhookSubscriptionWithSecret.md | 2 +- schemas/WebhookTestResult.md | 2 +- schemas/WhoamiResponse.md | 2 +- tags/access-grants.md | 2 +- tags/account.md | 2 +- tags/battery-units.md | 2 +- tags/economic-operators.md | 2 +- tags/eidas-keys.md | 2 +- tags/facilities.md | 2 +- tags/passports.md | 2 +- tags/public-resolution.md | 2 +- tags/qr-codes.md | 2 +- tags/schemas-vocabulary.md | 2 +- tags/service.md | 2 +- tags/traceability-audit.md | 2 +- tags/verifiable-credentials.md | 2 +- tags/webhooks.md | 2 +- webhooks/passport.ingested.md | 2 +- webhooks/passport.recalled.md | 2 +- webhooks/passport.sealed.md | 2 +- webhooks/passport.status_updated.md | 2 +- webhooks/passport.updated.md | 2 +- 206 files changed, 227 insertions(+), 219 deletions(-) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..f5e50db --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +## [1.0.0] — initial release + +The OpenDPP knowledge bundle: an **Open Knowledge Format (OKF)** projection of the public OpenDPP API +(`/api/v1`) — cross-linked Markdown "concepts" (one per operation, tag, schema, and webhook, plus a +curated `overview` + `guides`) for AI-agent ingestion. Mirrored from the OpenDPP backend's `okf/**` +and served live at `/okf`, `/okf/manifest.json`, `/okf/bundle.zip`, and `/llms.txt`. + +Apache-2.0. diff --git a/guides/authentication.md b/guides/authentication.md index 0b15e5c..69bb8f1 100644 --- a/guides/authentication.md +++ b/guides/authentication.md @@ -8,7 +8,7 @@ tags: - api keys - tenancy - security -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Authenticate with a tenant **API key** sent as a Bearer token: diff --git a/guides/conformance.md b/guides/conformance.md index 27aecb0..ce840fe 100644 --- a/guides/conformance.md +++ b/guides/conformance.md @@ -7,7 +7,7 @@ tags: - conformance - standards - honesty -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- OpenDPP is deliberately precise about what it claims. In short: diff --git a/guides/errors.md b/guides/errors.md index f157065..14f38a3 100644 --- a/guides/errors.md +++ b/guides/errors.md @@ -7,7 +7,7 @@ tags: - errors - validation - troubleshooting -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Authenticated endpoints return `{ success: false, error, message }` (some endpoints, and all diff --git a/guides/interop-aas-untp.md b/guides/interop-aas-untp.md index a7c71a5..6d6008a 100644 --- a/guides/interop-aas-untp.md +++ b/guides/interop-aas-untp.md @@ -9,7 +9,7 @@ tags: - IDTA - UNTP - data integrity -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Public resolution is **content-negotiated**: one URL serves several representations, so a passport diff --git a/guides/public-access-tiers.md b/guides/public-access-tiers.md index ef9fe55..88879a9 100644 --- a/guides/public-access-tiers.md +++ b/guides/public-access-tiers.md @@ -8,7 +8,7 @@ tags: - tiers - capability tokens - legitimate interest -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Public resolution endpoints serve **tiered** views of the same URL: diff --git a/guides/rate-limits.md b/guides/rate-limits.md index cbc15ce..05761e7 100644 --- a/guides/rate-limits.md +++ b/guides/rate-limits.md @@ -7,7 +7,7 @@ tags: - rate limits - throttling - headers -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- | Surface | Limit | Headers | diff --git a/guides/sealing-and-verification.md b/guides/sealing-and-verification.md index 30b7ff4..817ddfb 100644 --- a/guides/sealing-and-verification.md +++ b/guides/sealing-and-verification.md @@ -9,7 +9,7 @@ tags: - eIDAS - merkle - RFC 3161 -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- OpenDPP passport seals are **eIDAS advanced electronic seals**: an ECDSA P-256 signature over a diff --git a/index.md b/index.md index db87e23..fa0211c 100644 --- a/index.md +++ b/index.md @@ -4,7 +4,7 @@ okf_version: "0.1" # OpenDPP Integration API — Knowledge Bundle -> An OKF (Open Knowledge Format) projection of the public [OpenDPP Integration API](https://opendpp-node.eu/api-reference), for ingestion by AI agents and humans alike. Generated from [`/openapi.json`](https://opendpp-node.eu/openapi.json) (API v1.6.0). +> An OKF (Open Knowledge Format) projection of the public [OpenDPP Integration API](https://opendpp-node.eu/api-reference), for ingestion by AI agents and humans alike. Generated from [`/openapi.json`](https://opendpp-node.eu/openapi.json) (API v1.0.0). # Concepts diff --git a/log.md b/log.md index 3775694..27c0168 100644 --- a/log.md +++ b/log.md @@ -1,5 +1,5 @@ # Log -## 2026-06-20 +## 2026-06-22 -**Update** — Knowledge bundle generated for OpenDPP Integration API v1.6.0. For the full per-version API contract history see [`/openapi.json`](https://opendpp-node.eu/openapi.json) and the project CHANGELOG. +**Update** — Knowledge bundle generated for OpenDPP Integration API v1.0.0. For the full per-version API contract history see [`/openapi.json`](https://opendpp-node.eu/openapi.json) and the project CHANGELOG. diff --git a/manifest.json b/manifest.json index bdea4be..19b8904 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "okfVersion": "0.1", - "apiVersion": "1.6.0", - "generated": "2026-06-20T00:00:00Z", + "apiVersion": "1.0.0", + "generated": "2026-06-22T00:00:00Z", "conceptCount": 202, "concepts": [ { diff --git a/operations/approveGrantRequest.md b/operations/approveGrantRequest.md index 28d5f28..0a6d096 100644 --- a/operations/approveGrantRequest.md +++ b/operations/approveGrantRequest.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/grants/{id}/approve tags: - POST - access-grants -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/grants/{id}/approve` diff --git a/operations/auditEventLineage.md b/operations/auditEventLineage.md index 9276ba0..ef5b061 100644 --- a/operations/auditEventLineage.md +++ b/operations/auditEventLineage.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/events/{id}/audit tags: - POST - traceability-audit -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/events/{id}/audit` @@ -25,7 +25,7 @@ These are geographic screening heuristics evaluated against the data registered **Rate limit:** global limiter, 100 requests/min per IP (standard `x-ratelimit-*` headers). -When zero violations are found, the response embeds a `TraceabilityComplianceCertificate` object (status `VERIFIED_COMPLIANT`, standards `EUDR-2026` / `UFLPA-2026`); otherwise `certificate` is `null` and `errors` lists each violation as a human-readable string. ANY failure — unknown event id, other-tenant id, or even a circular lineage graph — is reported as the same generic 404 body. +When zero violations are found, the response embeds a `TraceabilityComplianceCertificate` object (status `SCREENED_NO_MATCHES`, screens `OpenDPP-EUDR-heuristic` / `OpenDPP-UFLPA-screen`); otherwise `certificate` is `null` and `errors` lists each violation as a human-readable string. ANY failure — unknown event id, other-tenant id, or even a circular lineage graph — is reported as the same generic 404 body. ## Parameters diff --git a/operations/bulkIngestPassports.md b/operations/bulkIngestPassports.md index 2d86f21..a841f3a 100644 --- a/operations/bulkIngestPassports.md +++ b/operations/bulkIngestPassports.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports/bulk tags: - POST - passports -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/passports/bulk` diff --git a/operations/createFacility.md b/operations/createFacility.md index f0902e3..2807899 100644 --- a/operations/createFacility.md +++ b/operations/createFacility.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/facilities tags: - POST - facilities -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/facilities` diff --git a/operations/createGrant.md b/operations/createGrant.md index 719967a..27676a1 100644 --- a/operations/createGrant.md +++ b/operations/createGrant.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/grants tags: - POST - access-grants -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/grants` diff --git a/operations/createPassport.md b/operations/createPassport.md index 8efbf2c..2f383f7 100644 --- a/operations/createPassport.md +++ b/operations/createPassport.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports tags: - POST - passports -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/passports` diff --git a/operations/createWebhookSubscription.md b/operations/createWebhookSubscription.md index 0971a88..106a18b 100644 --- a/operations/createWebhookSubscription.md +++ b/operations/createWebhookSubscription.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/webhooks/subscriptions tags: - POST - webhooks -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/webhooks/subscriptions` diff --git a/operations/deleteBatteryUnit.md b/operations/deleteBatteryUnit.md index 42c2a7f..569e314 100644 --- a/operations/deleteBatteryUnit.md +++ b/operations/deleteBatteryUnit.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/units/{id} tags: - DELETE - battery-units -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `DELETE /api/v1/units/{id}` diff --git a/operations/deleteDraftPassport.md b/operations/deleteDraftPassport.md index f29bbc9..9886176 100644 --- a/operations/deleteDraftPassport.md +++ b/operations/deleteDraftPassport.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports/{id} tags: - DELETE - passports -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `DELETE /api/v1/passports/{id}` diff --git a/operations/deleteFacility.md b/operations/deleteFacility.md index 7a6cf72..2ea4e67 100644 --- a/operations/deleteFacility.md +++ b/operations/deleteFacility.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/facilities/{id} tags: - DELETE - facilities -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `DELETE /api/v1/facilities/{id}` diff --git a/operations/deleteOperator.md b/operations/deleteOperator.md index b438b15..87d580a 100644 --- a/operations/deleteOperator.md +++ b/operations/deleteOperator.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/operators/{id} tags: - DELETE - economic-operators -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `DELETE /api/v1/operators/{id}` diff --git a/operations/deleteWebhookSubscription.md b/operations/deleteWebhookSubscription.md index 82021d3..337c1a4 100644 --- a/operations/deleteWebhookSubscription.md +++ b/operations/deleteWebhookSubscription.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/webhooks/subscriptions/{id} tags: - DELETE - webhooks -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `DELETE /api/v1/webhooks/subscriptions/{id}` diff --git a/operations/denyGrantRequest.md b/operations/denyGrantRequest.md index 03762a5..a9008bb 100644 --- a/operations/denyGrantRequest.md +++ b/operations/denyGrantRequest.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/grants/{id}/deny tags: - POST - access-grants -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/grants/{id}/deny` diff --git a/operations/getApiVersion.md b/operations/getApiVersion.md index 7ad31a3..5e7ccad 100644 --- a/operations/getApiVersion.md +++ b/operations/getApiVersion.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/version tags: - GET - service -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/version` diff --git a/operations/getBatteryUnit.md b/operations/getBatteryUnit.md index 77b6c17..9c1ba01 100644 --- a/operations/getBatteryUnit.md +++ b/operations/getBatteryUnit.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/units/{id} tags: - GET - battery-units -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/units/{id}` diff --git a/operations/getBatteryUnitQrCode.md b/operations/getBatteryUnitQrCode.md index 6fcd7ce..68497d7 100644 --- a/operations/getBatteryUnitQrCode.md +++ b/operations/getBatteryUnitQrCode.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/units/{id}/qr tags: - GET - qr-codes -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/units/{id}/qr` diff --git a/operations/getDppJsonLdContext.md b/operations/getDppJsonLdContext.md index 9d0c404..dd83e82 100644 --- a/operations/getDppJsonLdContext.md +++ b/operations/getDppJsonLdContext.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/contexts/dpp/v1 tags: - GET - schemas-vocabulary -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /contexts/dpp/v1` diff --git a/operations/getEventLineage.md b/operations/getEventLineage.md index 7ea657a..06d7856 100644 --- a/operations/getEventLineage.md +++ b/operations/getEventLineage.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/events/{id}/lineage tags: - GET - traceability-audit -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/events/{id}/lineage` diff --git a/operations/getFacility.md b/operations/getFacility.md index b51e6af..6740f6c 100644 --- a/operations/getFacility.md +++ b/operations/getFacility.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/facilities/{id} tags: - GET - facilities -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/facilities/{id}` diff --git a/operations/getHealth.md b/operations/getHealth.md index fca2ef9..f544af5 100644 --- a/operations/getHealth.md +++ b/operations/getHealth.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/health tags: - GET - service -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /health` diff --git a/operations/getJsonLdContext.md b/operations/getJsonLdContext.md index cde7eb4..12212f2 100644 --- a/operations/getJsonLdContext.md +++ b/operations/getJsonLdContext.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/context/v1 tags: - GET - schemas-vocabulary -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /context/v1` diff --git a/operations/getOperator.md b/operations/getOperator.md index 55f7703..dd50e11 100644 --- a/operations/getOperator.md +++ b/operations/getOperator.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/operators/{id} tags: - GET - economic-operators -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/operators/{id}` diff --git a/operations/getPassport.md b/operations/getPassport.md index 39e7aca..0d35f6a 100644 --- a/operations/getPassport.md +++ b/operations/getPassport.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports/{id} tags: - GET - passports -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/passports/{id}` diff --git a/operations/getPassportQrCode.md b/operations/getPassportQrCode.md index fc8d028..f224e89 100644 --- a/operations/getPassportQrCode.md +++ b/operations/getPassportQrCode.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports/{id}/qr tags: - GET - qr-codes -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/passports/{id}/qr` diff --git a/operations/getSealCaCertificate.md b/operations/getSealCaCertificate.md index f2b59da..6c00aae 100644 --- a/operations/getSealCaCertificate.md +++ b/operations/getSealCaCertificate.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/.well-known/opendpp-seal-ca.pem tags: - GET - eidas-keys -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /.well-known/opendpp-seal-ca.pem` diff --git a/operations/getSectorSchema.md b/operations/getSectorSchema.md index f2c31b7..bac11ad 100644 --- a/operations/getSectorSchema.md +++ b/operations/getSectorSchema.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/schemas/{category} tags: - GET - schemas-vocabulary -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/schemas/{category}` diff --git a/operations/getTenantDidDocument.md b/operations/getTenantDidDocument.md index 1f67e04..02e19d9 100644 --- a/operations/getTenantDidDocument.md +++ b/operations/getTenantDidDocument.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/tenants/{tenantId}/did.json tags: - GET - verifiable-credentials -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /tenants/{tenantId}/did.json` diff --git a/operations/getTenantRevocationStatusList.md b/operations/getTenantRevocationStatusList.md index 7bf1e9f..627c26e 100644 --- a/operations/getTenantRevocationStatusList.md +++ b/operations/getTenantRevocationStatusList.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/tenants/{tenantId}/status/revocation tags: - GET - verifiable-credentials -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /tenants/{tenantId}/status/revocation` diff --git a/operations/ingestPassportFromAas.md b/operations/ingestPassportFromAas.md index 08fcbd1..e479db6 100644 --- a/operations/ingestPassportFromAas.md +++ b/operations/ingestPassportFromAas.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports/aas/ingest tags: - POST - passports -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/passports/aas/ingest` diff --git a/operations/listBatteryUnitEvents.md b/operations/listBatteryUnitEvents.md index 69c8245..e459b70 100644 --- a/operations/listBatteryUnitEvents.md +++ b/operations/listBatteryUnitEvents.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/units/{id}/events tags: - GET - battery-units -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/units/{id}/events` diff --git a/operations/listBatteryUnits.md b/operations/listBatteryUnits.md index d61ed76..ae9b006 100644 --- a/operations/listBatteryUnits.md +++ b/operations/listBatteryUnits.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports/{passportId}/units tags: - GET - battery-units -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/passports/{passportId}/units` diff --git a/operations/listFacilities.md b/operations/listFacilities.md index fd62765..542796a 100644 --- a/operations/listFacilities.md +++ b/operations/listFacilities.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/facilities tags: - GET - facilities -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/facilities` diff --git a/operations/listGrants.md b/operations/listGrants.md index 0df5d6a..977db87 100644 --- a/operations/listGrants.md +++ b/operations/listGrants.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/grants tags: - GET - access-grants -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/grants` diff --git a/operations/listMaterials.md b/operations/listMaterials.md index 0c500a5..5872875 100644 --- a/operations/listMaterials.md +++ b/operations/listMaterials.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/materials tags: - GET - schemas-vocabulary -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/materials` diff --git a/operations/listOperators.md b/operations/listOperators.md index 66084f5..d4d5e59 100644 --- a/operations/listOperators.md +++ b/operations/listOperators.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/operators tags: - GET - economic-operators -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/operators` diff --git a/operations/listPassports.md b/operations/listPassports.md index 3096dce..1c378f4 100644 --- a/operations/listPassports.md +++ b/operations/listPassports.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports tags: - GET - passports -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/passports` diff --git a/operations/listWebhookDeliveries.md b/operations/listWebhookDeliveries.md index 1949ca6..4b30539 100644 --- a/operations/listWebhookDeliveries.md +++ b/operations/listWebhookDeliveries.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/webhooks/deliveries tags: - GET - webhooks -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/webhooks/deliveries` diff --git a/operations/listWebhookSubscriptions.md b/operations/listWebhookSubscriptions.md index d88f53a..ee8538b 100644 --- a/operations/listWebhookSubscriptions.md +++ b/operations/listWebhookSubscriptions.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/webhooks/subscriptions tags: - GET - webhooks -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/webhooks/subscriptions` diff --git a/operations/recordBatteryUnitEvent.md b/operations/recordBatteryUnitEvent.md index 3c71550..f58ea73 100644 --- a/operations/recordBatteryUnitEvent.md +++ b/operations/recordBatteryUnitEvent.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/units/{id}/events tags: - POST - battery-units -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/units/{id}/events` diff --git a/operations/registerOperator.md b/operations/registerOperator.md index 1b434c7..e1ed106 100644 --- a/operations/registerOperator.md +++ b/operations/registerOperator.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/operators tags: - POST - economic-operators -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/operators` diff --git a/operations/registerTraceabilityEvent.md b/operations/registerTraceabilityEvent.md index b2eab98..2b01e27 100644 --- a/operations/registerTraceabilityEvent.md +++ b/operations/registerTraceabilityEvent.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/events tags: - POST - traceability-audit -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/events` diff --git a/operations/resolveGs1Grai.md b/operations/resolveGs1Grai.md index c321128..cd470aa 100644 --- a/operations/resolveGs1Grai.md +++ b/operations/resolveGs1Grai.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/8003/{grai} tags: - GET - public-resolution -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /8003/{grai}` diff --git a/operations/resolveGs1Gtin.md b/operations/resolveGs1Gtin.md index 093e81b..49924e5 100644 --- a/operations/resolveGs1Gtin.md +++ b/operations/resolveGs1Gtin.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/01/{gtin14} tags: - GET - public-resolution -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /01/{gtin14}` diff --git a/operations/resolveGs1GtinSerial.md b/operations/resolveGs1GtinSerial.md index 926cfcf..6a58a09 100644 --- a/operations/resolveGs1GtinSerial.md +++ b/operations/resolveGs1GtinSerial.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/01/{gtin14}/21/{serial} tags: - GET - public-resolution -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /01/{gtin14}/21/{serial}` diff --git a/operations/resolvePublicBatteryUnit.md b/operations/resolvePublicBatteryUnit.md index f1d1c07..017bbcb 100644 --- a/operations/resolvePublicBatteryUnit.md +++ b/operations/resolvePublicBatteryUnit.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/unit/{id} tags: - GET - public-resolution -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /unit/{id}` diff --git a/operations/resolvePublicPassport.md b/operations/resolvePublicPassport.md index 4a659c2..70ad8d7 100644 --- a/operations/resolvePublicPassport.md +++ b/operations/resolvePublicPassport.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/passport/{id} tags: - GET - public-resolution -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /passport/{id}` diff --git a/operations/restoreOperator.md b/operations/restoreOperator.md index 0453ae2..d0d6662 100644 --- a/operations/restoreOperator.md +++ b/operations/restoreOperator.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/operators/{id}/restore tags: - POST - economic-operators -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/operators/{id}/restore` diff --git a/operations/revokeGrant.md b/operations/revokeGrant.md index 8029129..18ef7c1 100644 --- a/operations/revokeGrant.md +++ b/operations/revokeGrant.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/grants/{id} tags: - DELETE - access-grants -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `DELETE /api/v1/grants/{id}` diff --git a/operations/rotateTenantKeys.md b/operations/rotateTenantKeys.md index ab3a03d..c96deee 100644 --- a/operations/rotateTenantKeys.md +++ b/operations/rotateTenantKeys.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/tenants/rotate-keys tags: - POST - eidas-keys -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/tenants/rotate-keys` diff --git a/operations/rotateWebhookSecret.md b/operations/rotateWebhookSecret.md index 35e2b2d..437e377 100644 --- a/operations/rotateWebhookSecret.md +++ b/operations/rotateWebhookSecret.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/webhooks/subscriptions/{id}/rotate-secr tags: - POST - webhooks -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/webhooks/subscriptions/{id}/rotate-secret` diff --git a/operations/sealPassport.md b/operations/sealPassport.md index 8335273..2573c6a 100644 --- a/operations/sealPassport.md +++ b/operations/sealPassport.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports/{id}/seal tags: - POST - passports -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/passports/{id}/seal` diff --git a/operations/serializeBatteryUnits.md b/operations/serializeBatteryUnits.md index d077e8f..c37972a 100644 --- a/operations/serializeBatteryUnits.md +++ b/operations/serializeBatteryUnits.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports/{passportId}/units tags: - POST - battery-units -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/passports/{passportId}/units` diff --git a/operations/testWebhookSubscription.md b/operations/testWebhookSubscription.md index c3a225b..e40b39d 100644 --- a/operations/testWebhookSubscription.md +++ b/operations/testWebhookSubscription.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/webhooks/subscriptions/{id}/test tags: - POST - webhooks -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/webhooks/subscriptions/{id}/test` diff --git a/operations/updateFacility.md b/operations/updateFacility.md index a1f3c48..fb4c5d7 100644 --- a/operations/updateFacility.md +++ b/operations/updateFacility.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/facilities/{id} tags: - PUT - facilities -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `PUT /api/v1/facilities/{id}` diff --git a/operations/updateOperator.md b/operations/updateOperator.md index 482c008..5cfe7dc 100644 --- a/operations/updateOperator.md +++ b/operations/updateOperator.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/operators/{id} tags: - PATCH - economic-operators -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `PATCH /api/v1/operators/{id}` diff --git a/operations/updatePassport.md b/operations/updatePassport.md index e82db93..e574f5a 100644 --- a/operations/updatePassport.md +++ b/operations/updatePassport.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports/{id} tags: - PUT - passports -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `PUT /api/v1/passports/{id}` diff --git a/operations/updatePassportStatus.md b/operations/updatePassportStatus.md index ed67183..08dc062 100644 --- a/operations/updatePassportStatus.md +++ b/operations/updatePassportStatus.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports/{id}/status tags: - PUT - passports -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `PUT /api/v1/passports/{id}/status` diff --git a/operations/updateWebhookSubscription.md b/operations/updateWebhookSubscription.md index 05a6137..59ec663 100644 --- a/operations/updateWebhookSubscription.md +++ b/operations/updateWebhookSubscription.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/webhooks/subscriptions/{id} tags: - PATCH - webhooks -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `PATCH /api/v1/webhooks/subscriptions/{id}` diff --git a/operations/validatePassport.md b/operations/validatePassport.md index 8894ab9..2c9c0d8 100644 --- a/operations/validatePassport.md +++ b/operations/validatePassport.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports/validate-only tags: - POST - passports -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/passports/validate-only` @@ -14,7 +14,7 @@ timestamp: 2026-06-20T00:00:00Z **Domain:** [Passports](/tags/passports.md) **Authentication:** **API key required** — `Authorization: Bearer op_dpp_token_…`. -Runs the full ESPR category compliance validation on a metadata payload **without persisting anything** — intended for pre-flight checks in integration pipelines. +Runs the full ESPR category schema validation on a metadata payload **without persisting anything** — intended for pre-flight checks in integration pipelines. **Permission:** `passport:create` (Bearer API key or session JWT + CSRF for cookie sessions). Despite being read-only in effect, it is gated as a write permission, so subscription gating (**402**) applies. diff --git a/operations/validatePassportPublic.md b/operations/validatePassportPublic.md index 614d443..8e414a8 100644 --- a/operations/validatePassportPublic.md +++ b/operations/validatePassportPublic.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/passports/validate-only-public tags: - POST - passports -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/passports/validate-only-public` diff --git a/operations/verifyPassportSeal.md b/operations/verifyPassportSeal.md index 525166a..e8f746a 100644 --- a/operations/verifyPassportSeal.md +++ b/operations/verifyPassportSeal.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/audit/verify tags: - POST - traceability-audit -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `POST /api/v1/audit/verify` diff --git a/operations/whoami.md b/operations/whoami.md index c129200..cf34c6c 100644 --- a/operations/whoami.md +++ b/operations/whoami.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api/v1/whoami tags: - GET - account -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- `GET /api/v1/whoami` diff --git a/overview.md b/overview.md index b2ce8d7..4fd9f5c 100644 --- a/overview.md +++ b/overview.md @@ -8,7 +8,7 @@ tags: - getting started - ESPR - EU Battery Regulation -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- OpenDPP is a B2B platform for **EU Digital Product Passports (DPPs)**, aligned with the data diff --git a/schemas/AasEnvironment.md b/schemas/AasEnvironment.md index b3c68d9..e9178a9 100644 --- a/schemas/AasEnvironment.md +++ b/schemas/AasEnvironment.md @@ -5,7 +5,7 @@ description: An Asset Administration Shell (AAS) v3.0 environment export of the resource: https://opendpp-node.eu/openapi.json#/components/schemas/AasEnvironment tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- An Asset Administration Shell (AAS) v3.0 environment export of the passport, served as `application/aas+json`. Three top-level keys: `assetAdministrationShells` (asset identity — `urn:opendpp:aas:{passportId}` / `urn:opendpp:asset:{operatorId}:{productId}`, GS1 GLN-qualified specific asset ids), `submodels`, and `conceptDescriptions` (semantic concept records from the admin-curated registry, `urn:opendpp:concept:…`; empty array when the registry is empty). Submodels: a `GeneralProductInformation` submodel (`urn:opendpp:submodel:general:{passportId}`), a `ComplianceMetadata` submodel (`urn:opendpp:submodel:compliance`) mapping the passport metadata through the concept registry, an IDTA Digital Nameplate submodel (idShort `Nameplate`) whenever manufacturer/product identity is available — carrying `ManufacturerName` / `ManufacturerProductDesignation` for EU-index (CIRPASS-2) discoverability — one or more additive per-category submodel views (ESPR-category views such as CarbonFootprint / TechnicalData, id prefix `urn:opendpp:submodel:category:`), and — whenever the issuing tenant's eIDAS signing key is provisioned (the normal case) — an `eidasVerificationSeal` submodel (`urn:opendpp:submodel:security-seal:{passportId}`) carrying `digitalSealHash`, `cryptographicSignature`, `pemPublicKey` and an optional `x509CertificateChain`. The seal submodel is present for EVERY access tier. Role filtering strips restricted and commercial owner-only elements from the `ComplianceMetadata` submodel before sending: owner credentials are filtered by their API-key role, grant holders by the `legitimate_interest` tier, anonymous callers by the `public` tier. Submodel internals are intentionally not enumerated in this specification. diff --git a/schemas/AasEnvironmentInput.md b/schemas/AasEnvironmentInput.md index 09ad79e..cfa8bc2 100644 --- a/schemas/AasEnvironmentInput.md +++ b/schemas/AasEnvironmentInput.md @@ -5,7 +5,7 @@ description: An Asset Administration Shell (AAS) JSON Environment — the format resource: https://opendpp-node.eu/openapi.json#/components/schemas/AasEnvironmentInput tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- An Asset Administration Shell (AAS) JSON Environment — the format produced by OpenDPP's AAS export of a passport. MUST contain a submodel with `idShort: "ComplianceMetadata"` whose `submodelElements` (AAS `Property` elements and `SubmodelElementCollection`s) are parsed back into the passport metadata object; absence fails 400 `Ingestion Failed`. MAY contain an `eidasVerificationSeal` submodel (elements `digitalSealHash`, `cryptographicSignature`, `pemPublicKey`) — when present, the seal is verified against the tenant's SERVER-HELD eIDAS public key (the embedded `pemPublicKey` is never trusted as the verification key). Body limit 256 KiB. diff --git a/schemas/AasIngestCreated.md b/schemas/AasIngestCreated.md index 65da76c..ba2b630 100644 --- a/schemas/AasIngestCreated.md +++ b/schemas/AasIngestCreated.md @@ -5,7 +5,7 @@ description: 201 envelope of POST /api/v1/passports/aas/ingest. resource: https://opendpp-node.eu/openapi.json#/components/schemas/AasIngestCreated tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 201 envelope of `POST /api/v1/passports/aas/ingest`. Returned for both newly created passports and in-place updates of existing UNSEALED passports. No webhook event is emitted by this endpoint. diff --git a/schemas/ApproveGrantRequest.md b/schemas/ApproveGrantRequest.md index 106ffb8..fcf0bb4 100644 --- a/schemas/ApproveGrantRequest.md +++ b/schemas/ApproveGrantRequest.md @@ -5,7 +5,7 @@ description: Approval body — only the final expiry is supplied; everything els resource: https://opendpp-node.eu/openapi.json#/components/schemas/ApproveGrantRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Approval body — only the final expiry is supplied; everything else comes from the original request. diff --git a/schemas/BatteryUnitCreateItem.md b/schemas/BatteryUnitCreateItem.md index daa0448..0202158 100644 --- a/schemas/BatteryUnitCreateItem.md +++ b/schemas/BatteryUnitCreateItem.md @@ -5,7 +5,7 @@ description: One unit to serialise. resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitCreateItem tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- One unit to serialise. Validation is per-item: an invalid item is skipped (its error string collected) without failing the rest of the batch. diff --git a/schemas/BatteryUnitCurrentState.md b/schemas/BatteryUnitCurrentState.md index b8767e6..21f0756 100644 --- a/schemas/BatteryUnitCurrentState.md +++ b/schemas/BatteryUnitCurrentState.md @@ -5,7 +5,7 @@ description: Latest recorded measurement of the unit (owner/grant tiers only). resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitCurrentState tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Latest recorded measurement of the unit (owner/grant tiers only). All measurement fields are `null` when the latest event did not carry them. diff --git a/schemas/BatteryUnitDeleteResponse.md b/schemas/BatteryUnitDeleteResponse.md index d1c7ce6..1b0aedc 100644 --- a/schemas/BatteryUnitDeleteResponse.md +++ b/schemas/BatteryUnitDeleteResponse.md @@ -5,7 +5,7 @@ description: BatteryUnitDeleteResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitDeleteResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/BatteryUnitDynamicDataEvent.md b/schemas/BatteryUnitDynamicDataEvent.md index 9663ff4..ce2abb8 100644 --- a/schemas/BatteryUnitDynamicDataEvent.md +++ b/schemas/BatteryUnitDynamicDataEvent.md @@ -5,7 +5,7 @@ description: One telemetry event in the JSON-LD dynamicData history (privileged resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitDynamicDataEvent tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- One telemetry event in the JSON-LD `dynamicData` history (privileged view only). diff --git a/schemas/BatteryUnitEventListResponse.md b/schemas/BatteryUnitEventListResponse.md index 9fdcd5e..8df2a87 100644 --- a/schemas/BatteryUnitEventListResponse.md +++ b/schemas/BatteryUnitEventListResponse.md @@ -5,7 +5,7 @@ description: BatteryUnitEventListResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitEventListResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/BatteryUnitEventNode.md b/schemas/BatteryUnitEventNode.md index afc8f17..cb8bc4b 100644 --- a/schemas/BatteryUnitEventNode.md +++ b/schemas/BatteryUnitEventNode.md @@ -5,7 +5,7 @@ description: One append-only telemetry event (owner/grant tiers only). resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitEventNode tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- One append-only telemetry event (owner/grant tiers only). diff --git a/schemas/BatteryUnitEventRow.md b/schemas/BatteryUnitEventRow.md index 6778176..f62ffbd 100644 --- a/schemas/BatteryUnitEventRow.md +++ b/schemas/BatteryUnitEventRow.md @@ -5,7 +5,7 @@ description: One immutable per-unit telemetry record (raw persisted row). resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitEventRow tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- One immutable per-unit telemetry record (raw persisted row). Append-only: no update or delete path exists. diff --git a/schemas/BatteryUnitEventType.md b/schemas/BatteryUnitEventType.md index 479aefc..520f821 100644 --- a/schemas/BatteryUnitEventType.md +++ b/schemas/BatteryUnitEventType.md @@ -5,7 +5,7 @@ description: Per-unit dynamic-data event category (Annex XIII / Art. resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitEventType tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Per-unit dynamic-data event category (Annex XIII / Art. 77 telemetry). diff --git a/schemas/BatteryUnitJsonLd.md b/schemas/BatteryUnitJsonLd.md index c27262d..2ae255c 100644 --- a/schemas/BatteryUnitJsonLd.md +++ b/schemas/BatteryUnitJsonLd.md @@ -5,7 +5,7 @@ description: "JSON-LD document for one serialised battery unit, privileged tenan resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitJsonLd tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 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` marker appears instead — never on this endpoint). diff --git a/schemas/BatteryUnitLineageRef.md b/schemas/BatteryUnitLineageRef.md index 8c9e281..b125380 100644 --- a/schemas/BatteryUnitLineageRef.md +++ b/schemas/BatteryUnitLineageRef.md @@ -5,7 +5,7 @@ description: Public lineage pointer between battery units (Art. resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitLineageRef tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Public lineage pointer between battery units (Art. 77(7)). diff --git a/schemas/BatteryUnitListResponse.md b/schemas/BatteryUnitListResponse.md index 0c92659..3086275 100644 --- a/schemas/BatteryUnitListResponse.md +++ b/schemas/BatteryUnitListResponse.md @@ -5,7 +5,7 @@ description: BatteryUnitListResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitListResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/BatteryUnitRestrictedDataNotice.md b/schemas/BatteryUnitRestrictedDataNotice.md index 172c5ce..190ba2a 100644 --- a/schemas/BatteryUnitRestrictedDataNotice.md +++ b/schemas/BatteryUnitRestrictedDataNotice.md @@ -5,7 +5,7 @@ description: Marker replacing per-unit telemetry in anonymous (public-tier) resp resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitRestrictedDataNotice tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Marker replacing per-unit telemetry in anonymous (public-tier) responses, with a pointer for requesting legitimate-interest access (Reg. (EU) 2023/1542, Annex XIII(2)-(4)). diff --git a/schemas/BatteryUnitRow.md b/schemas/BatteryUnitRow.md index 27059c0..790c3d1 100644 --- a/schemas/BatteryUnitRow.md +++ b/schemas/BatteryUnitRow.md @@ -5,7 +5,7 @@ description: One physical serialised battery (raw persisted row — these routes resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitRow tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- One physical serialised battery (raw persisted row — these routes declare no Fastify response schema, so all model fields are returned as-is). A `BatteryUnit` is an individual instance of a SKU/type-level passport, carrying its real serial in GS1 AI-21. diff --git a/schemas/BatteryUnitSerialisationFailedError.md b/schemas/BatteryUnitSerialisationFailedError.md index 96903ff..2cc62c5 100644 --- a/schemas/BatteryUnitSerialisationFailedError.md +++ b/schemas/BatteryUnitSerialisationFailedError.md @@ -5,7 +5,7 @@ description: 400 body when every item in the serialisation batch failed. resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitSerialisationFailedError tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 400 body when **every** item in the serialisation batch failed. Note: `errors` is an array of plain strings and there is **no `message` field** (unlike the standard error triple). diff --git a/schemas/BatteryUnitStatus.md b/schemas/BatteryUnitStatus.md index b01f36d..d1245e1 100644 --- a/schemas/BatteryUnitStatus.md +++ b/schemas/BatteryUnitStatus.md @@ -5,7 +5,7 @@ description: Annex XIII battery-status vocabulary (Battery Reg. resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitStatus tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Annex XIII battery-status vocabulary (Battery Reg. (EU) 2023/1542). `RECYCLED` means the passport has ceased to exist (Art. 77(8)): the public unit view answers 410 Gone whenever `status` is `RECYCLED` **or** `ceasedAt` is set. Terminality is enforced via `ceasedAt`, which only the events-route transition stamps (and never clears): the predecessor-refusal check keys on `ceasedAt` alone, so a unit *created* with initial status `RECYCLED` (no `ceasedAt`) is already a public 410 tombstone yet can still be referenced as a predecessor; conversely, once `ceasedAt` is set the events endpoint will still accept later `status` values, but the 410 tombstone and the predecessor refusal persist. diff --git a/schemas/BatteryUnitTombstoneJsonLd.md b/schemas/BatteryUnitTombstoneJsonLd.md index 372af89..d42b0ca 100644 --- a/schemas/BatteryUnitTombstoneJsonLd.md +++ b/schemas/BatteryUnitTombstoneJsonLd.md @@ -5,7 +5,7 @@ description: Art. resource: https://opendpp-node.eu/openapi.json#/components/schemas/BatteryUnitTombstoneJsonLd tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Art. 77(8) tombstone (HTTP 410): once a battery is recycled its passport has ceased to exist. This minimal record confirms the unit existed, that it was recycled and when, plus the (still living) model-passport link. Grants and owner credentials do not override the tombstone on the public URL; the underlying data is retained internally for the statutory retention window. diff --git a/schemas/CreateGrantRequest.md b/schemas/CreateGrantRequest.md index 9fb93a3..a9dad9d 100644 --- a/schemas/CreateGrantRequest.md +++ b/schemas/CreateGrantRequest.md @@ -5,7 +5,7 @@ description: Direct-issuance body. resource: https://opendpp-node.eu/openapi.json#/components/schemas/CreateGrantRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Direct-issuance body. Over-length strings are silently truncated to the documented maximum, not rejected; unknown fields are ignored. The grant kind is always `LEGITIMATE_INTEREST` — there is no `kind`/`type` field. diff --git a/schemas/DeleteOperatorResponse.md b/schemas/DeleteOperatorResponse.md index 0296c87..688b4ff 100644 --- a/schemas/DeleteOperatorResponse.md +++ b/schemas/DeleteOperatorResponse.md @@ -5,7 +5,7 @@ description: DeleteOperatorResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/DeleteOperatorResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/DidWebDocument.md b/schemas/DidWebDocument.md index ad1feba..ea8fdf0 100644 --- a/schemas/DidWebDocument.md +++ b/schemas/DidWebDocument.md @@ -5,7 +5,7 @@ description: A tenant's did:web DID document (public-key material only). resource: https://opendpp-node.eu/openapi.json#/components/schemas/DidWebDocument tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- A tenant's `did:web` DID document (public-key material only). Verification methods are `JsonWebKey2020` entries with stable `#key-` ids; current and retired keys are both listed so pre-rotation credentials still verify. diff --git a/schemas/DppJsonLdContextDocument.md b/schemas/DppJsonLdContextDocument.md index 9a1564c..619a8d4 100644 --- a/schemas/DppJsonLdContextDocument.md +++ b/schemas/DppJsonLdContextDocument.md @@ -5,7 +5,7 @@ description: "The fixed W3C JSON-LD context document served by GET /context/v1: resource: https://opendpp-node.eu/openapi.json#/components/schemas/DppJsonLdContextDocument tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 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.org `dateCreated`/`dateModified`. diff --git a/schemas/DppVocabContextDocument.md b/schemas/DppVocabContextDocument.md index ef668ee..dccf1b4 100644 --- a/schemas/DppVocabContextDocument.md +++ b/schemas/DppVocabContextDocument.md @@ -5,7 +5,7 @@ description: The canonical resolvable JSON-LD context served by GET /contexts/dp resource: https://opendpp-node.eu/openapi.json#/components/schemas/DppVocabContextDocument tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 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`. Declares `@vocab` (so unknown terms expand under the OpenDPP namespace) plus core term mappings; `@version` is the numeric JSON-LD 1.1 marker, so `@context` values are a mix of strings and that number. diff --git a/schemas/EconomicOperatorNode.md b/schemas/EconomicOperatorNode.md index eb8dd43..def3850 100644 --- a/schemas/EconomicOperatorNode.md +++ b/schemas/EconomicOperatorNode.md @@ -5,7 +5,7 @@ description: Embedded economic-operator JSON-LD node (public in all tiers). resource: https://opendpp-node.eu/openapi.json#/components/schemas/EconomicOperatorNode tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Embedded economic-operator JSON-LD node (public in all tiers). diff --git a/schemas/Error.md b/schemas/Error.md index b298848..e4c63eb 100644 --- a/schemas/Error.md +++ b/schemas/Error.md @@ -5,7 +5,7 @@ description: Standard error body. resource: https://opendpp-node.eu/openapi.json#/components/schemas/Error tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Standard error body. Authenticated-API errors include `success: false`; some endpoints (and all public resolution errors) omit `success` and return only `error` + `message`. diff --git a/schemas/FacilityCreateRequest.md b/schemas/FacilityCreateRequest.md index 8436778..66c2e0c 100644 --- a/schemas/FacilityCreateRequest.md +++ b/schemas/FacilityCreateRequest.md @@ -5,7 +5,7 @@ description: FacilityCreateRequest resource: https://opendpp-node.eu/openapi.json#/components/schemas/FacilityCreateRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/FacilityCreatedEnvelope.md b/schemas/FacilityCreatedEnvelope.md index a64b311..337515f 100644 --- a/schemas/FacilityCreatedEnvelope.md +++ b/schemas/FacilityCreatedEnvelope.md @@ -5,7 +5,7 @@ description: FacilityCreatedEnvelope resource: https://opendpp-node.eu/openapi.json#/components/schemas/FacilityCreatedEnvelope tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/FacilityDeletedEnvelope.md b/schemas/FacilityDeletedEnvelope.md index 99deaaf..801f6d0 100644 --- a/schemas/FacilityDeletedEnvelope.md +++ b/schemas/FacilityDeletedEnvelope.md @@ -5,7 +5,7 @@ description: FacilityDeletedEnvelope resource: https://opendpp-node.eu/openapi.json#/components/schemas/FacilityDeletedEnvelope tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/FacilityEnvelope.md b/schemas/FacilityEnvelope.md index 5c62620..f860613 100644 --- a/schemas/FacilityEnvelope.md +++ b/schemas/FacilityEnvelope.md @@ -5,7 +5,7 @@ description: FacilityEnvelope resource: https://opendpp-node.eu/openapi.json#/components/schemas/FacilityEnvelope tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/FacilityListEnvelope.md b/schemas/FacilityListEnvelope.md index d733c0b..27b77d5 100644 --- a/schemas/FacilityListEnvelope.md +++ b/schemas/FacilityListEnvelope.md @@ -5,7 +5,7 @@ description: FacilityListEnvelope resource: https://opendpp-node.eu/openapi.json#/components/schemas/FacilityListEnvelope tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/FacilityRow.md b/schemas/FacilityRow.md index f20bd3f..821a1ac 100644 --- a/schemas/FacilityRow.md +++ b/schemas/FacilityRow.md @@ -5,7 +5,7 @@ description: A facility (GS1 GLN) master-data row, exactly as stored. resource: https://opendpp-node.eu/openapi.json#/components/schemas/FacilityRow tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- A facility (GS1 GLN) master-data row, exactly as stored. Returned in full to the owning tenant. Public exposure in passport documents differs by format: the *JSON-LD* document exposes `id`, `gln`, `name`, `activity` and `country` of a linked facility; the *AAS* export emits only the GLN, name and country (`manufacturingFacilityGln`/`Name`/`Country`). `streetAddress`, `city` and `postalCode` are emitted only to the owning/bound tenant in both formats. diff --git a/schemas/FacilityUpdateRequest.md b/schemas/FacilityUpdateRequest.md index 82ad594..1c3d6d7 100644 --- a/schemas/FacilityUpdateRequest.md +++ b/schemas/FacilityUpdateRequest.md @@ -5,7 +5,7 @@ description: Partial update. resource: https://opendpp-node.eu/openapi.json#/components/schemas/FacilityUpdateRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Partial update. `gln` and `operatorId` are immutable — if present they are silently ignored, as is any unknown key. For `activity`/`streetAddress`/`city`/`postalCode` the *presence* of the key matters: the value is stringified and trimmed, and anything that trims to empty (null, "", or a whitespace-only string) clears the field to null — the same normalization as POST. diff --git a/schemas/FastifyDefaultBadRequest.md b/schemas/FastifyDefaultBadRequest.md index 281edb7..deec884 100644 --- a/schemas/FastifyDefaultBadRequest.md +++ b/schemas/FastifyDefaultBadRequest.md @@ -5,7 +5,7 @@ description: Fastify's default 400 error body, returned when a syntactically mal resource: https://opendpp-node.eu/openapi.json#/components/schemas/FastifyDefaultBadRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Fastify's default 400 error body, returned when a syntactically malformed JSON request body is rejected by the framework **before the handler runs** (so none of the handler-built `{success:false, ...}` shapes apply). diff --git a/schemas/GrantDecisionResponse.md b/schemas/GrantDecisionResponse.md index 52a674d..7865b7a 100644 --- a/schemas/GrantDecisionResponse.md +++ b/schemas/GrantDecisionResponse.md @@ -5,7 +5,7 @@ description: "Returned by deny and revoke: the updated grant, no token." resource: https://opendpp-node.eu/openapi.json#/components/schemas/GrantDecisionResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Returned by deny and revoke: the updated grant, no token. diff --git a/schemas/GrantIssuedResponse.md b/schemas/GrantIssuedResponse.md index 3c9a802..0c4b344 100644 --- a/schemas/GrantIssuedResponse.md +++ b/schemas/GrantIssuedResponse.md @@ -5,7 +5,7 @@ description: Returned by direct issuance (201) and request approval (200). resource: https://opendpp-node.eu/openapi.json#/components/schemas/GrantIssuedResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Returned by direct issuance (201) and request approval (200). `token` is the raw capability token — shown ONCE here (and, on approval, in the grantee's inspection-link e-mail); only its SHA-256 hash is persisted. diff --git a/schemas/GrantListResponse.md b/schemas/GrantListResponse.md index 5b4f317..c9ec76b 100644 --- a/schemas/GrantListResponse.md +++ b/schemas/GrantListResponse.md @@ -5,7 +5,7 @@ description: List envelope for GET /api/v1/grants (paginated). resource: https://opendpp-node.eu/openapi.json#/components/schemas/GrantListResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- List envelope for `GET /api/v1/grants` (paginated). diff --git a/schemas/GrantRouteError.md b/schemas/GrantRouteError.md index 9a7a045..f478f3c 100644 --- a/schemas/GrantRouteError.md +++ b/schemas/GrantRouteError.md @@ -5,7 +5,7 @@ description: Error body used by the grants endpoints' route-level errors (400/40 resource: https://opendpp-node.eu/openapi.json#/components/schemas/GrantRouteError tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Error body used by the grants endpoints' route-level errors (400/403/404/409). Unlike the standard error envelope, it has NO `success` field. diff --git a/schemas/GrantRow.md b/schemas/GrantRow.md index 3e7a07a..4c83a8b 100644 --- a/schemas/GrantRow.md +++ b/schemas/GrantRow.md @@ -5,7 +5,7 @@ description: Tenant-facing projection of an access grant. resource: https://opendpp-node.eu/openapi.json#/components/schemas/GrantRow tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Tenant-facing projection of an access grant. The token hash, issuer user id, revoking actor and request IP are never exposed; raw capability tokens appear only in the one-time issuance/approval responses. All fields are always present (nullable ones serialize as `null`). diff --git a/schemas/HealthStatus.md b/schemas/HealthStatus.md index 4ecba8c..bdbf307 100644 --- a/schemas/HealthStatus.md +++ b/schemas/HealthStatus.md @@ -5,7 +5,7 @@ description: Health-check body of GET /health. resource: https://opendpp-node.eu/openapi.json#/components/schemas/HealthStatus tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Health-check body of `GET /health`. Carries the running build identity (`apiVersion`/`commit`/`builtAt`) in addition to the liveness fields. diff --git a/schemas/MaterialVocabularyListResponse.md b/schemas/MaterialVocabularyListResponse.md index b172f0e..d6b0db1 100644 --- a/schemas/MaterialVocabularyListResponse.md +++ b/schemas/MaterialVocabularyListResponse.md @@ -5,7 +5,7 @@ description: Envelope of GET /api/v1/materials. resource: https://opendpp-node.eu/openapi.json#/components/schemas/MaterialVocabularyListResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Envelope of `GET /api/v1/materials`. Caveat: unlike most authenticated endpoints there is NO `success` field. diff --git a/schemas/MaterialVocabularyRow.md b/schemas/MaterialVocabularyRow.md index e27668a..df02ba7 100644 --- a/schemas/MaterialVocabularyRow.md +++ b/schemas/MaterialVocabularyRow.md @@ -5,7 +5,7 @@ description: One entry of the platform-curated material vocabulary. resource: https://opendpp-node.eu/openapi.json#/components/schemas/MaterialVocabularyRow tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- One entry of the platform-curated material vocabulary. Entries are unique per (`kind`, `name`). diff --git a/schemas/MerkleTreeAttestationProof.md b/schemas/MerkleTreeAttestationProof.md index 8fbf874..2dc1fff 100644 --- a/schemas/MerkleTreeAttestationProof.md +++ b/schemas/MerkleTreeAttestationProof.md @@ -5,7 +5,7 @@ description: "OpenDPP's own proof type — an eIDAS ADVANCED electronic seal: an resource: https://opendpp-node.eu/openapi.json#/components/schemas/MerkleTreeAttestationProof tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- OpenDPP's own proof type — an eIDAS 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). Deliberately NOT a W3C DataIntegrityProof / `ecdsa-jcs-2019` Verifiable Credential (no RFC 8785 JCS canonicalization). Verifiable offline: rebuild the Merkle root from `metadata` — substituting each `redactedLeaves` hash for its placeholder-masked key, and EXCLUDING any placeholder-masked key that has no `redactedLeaves` entry (such a key was never present in the sealed metadata; the serializer injects the owner-only placeholder unconditionally) — then verify `signatureValue` with `publicKeyPem`; the `x5c` chain validates against the platform seal CA (`GET /.well-known/opendpp-seal-ca.pem`) and the `rfc3161` token via `openssl ts -verify`. diff --git a/schemas/OperatorGetResponse.md b/schemas/OperatorGetResponse.md index 4495b53..8490c67 100644 --- a/schemas/OperatorGetResponse.md +++ b/schemas/OperatorGetResponse.md @@ -5,7 +5,7 @@ description: OperatorGetResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/OperatorGetResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/OperatorListResponse.md b/schemas/OperatorListResponse.md index b1c42b9..7f925d1 100644 --- a/schemas/OperatorListResponse.md +++ b/schemas/OperatorListResponse.md @@ -5,7 +5,7 @@ description: OperatorListResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/OperatorListResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/OperatorMinimalError.md b/schemas/OperatorMinimalError.md index d5d001a..bed3f27 100644 --- a/schemas/OperatorMinimalError.md +++ b/schemas/OperatorMinimalError.md @@ -5,7 +5,7 @@ description: Minimal error envelope used by the operator/key self-service handle resource: https://opendpp-node.eu/openapi.json#/components/schemas/OperatorMinimalError tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Minimal error envelope used by the operator/key self-service handlers — note the standard `error` key is ABSENT (unlike the shared Error schema). diff --git a/schemas/OperatorRow.md b/schemas/OperatorRow.md index 63df9e1..b4fc880 100644 --- a/schemas/OperatorRow.md +++ b/schemas/OperatorRow.md @@ -5,7 +5,7 @@ description: An economic-operator record (EconomicOperator). resource: https://opendpp-node.eu/openapi.json#/components/schemas/OperatorRow tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- An economic-operator record (`EconomicOperator`). Operators are scoped to your workspace (each workspace keeps its own row for a given `regId`). Returned verbatim from the database (no field stripping); nullable fields are serialized as `null`. diff --git a/schemas/PassportAasEnvironment.md b/schemas/PassportAasEnvironment.md index 939d22c..019a944 100644 --- a/schemas/PassportAasEnvironment.md +++ b/schemas/PassportAasEnvironment.md @@ -5,7 +5,7 @@ description: IDTA Asset Administration Shell environment (returned when Accept c resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportAasEnvironment tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- IDTA Asset Administration Shell environment (returned when `Accept` contains `application/aas+json`), role-filtered for the caller's access tier. Identifiers use `urn:opendpp:*` forms: the shell id is `urn:opendpp:aas:` with idShort `AAS_` and `globalAssetId` `urn:opendpp:asset::` (plus `specificAssetIds` carrying the productId and, when a facility is assigned, its GLN). The environment contains, at minimum, a `GeneralProductInformation` submodel (`urn:opendpp:submodel:general:`) and a `ComplianceMetadata` submodel (`urn:opendpp:submodel:compliance`); for a manufacturer/product-identified passport it also carries an IDTA Digital Nameplate submodel (idShort `Nameplate`) and one or more additive per-category submodel views (ESPR-category views such as CarbonFootprint / TechnicalData, id prefix `urn:opendpp:submodel:category:`). An `eidasVerificationSeal` submodel is appended when the tenant has signing keys configured. Loose schema — the full AAS document structure is documented with the public resolution endpoints. diff --git a/schemas/PassportBulkFailure.md b/schemas/PassportBulkFailure.md index 2abd13e..97f506a 100644 --- a/schemas/PassportBulkFailure.md +++ b/schemas/PassportBulkFailure.md @@ -5,7 +5,7 @@ description: 400 body of POST /api/v1/passports/bulk when EVERY row failed. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportBulkFailure tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 400 body of `POST /api/v1/passports/bulk` when EVERY row failed. Note: `errors` is an array of STRINGS (not objects) and there is NO `message` field. diff --git a/schemas/PassportBulkRequest.md b/schemas/PassportBulkRequest.md index 98bf8f7..f365446 100644 --- a/schemas/PassportBulkRequest.md +++ b/schemas/PassportBulkRequest.md @@ -5,7 +5,7 @@ description: PassportBulkRequest resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportBulkRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/PassportBulkResult.md b/schemas/PassportBulkResult.md index 25088ae..45d928e 100644 --- a/schemas/PassportBulkResult.md +++ b/schemas/PassportBulkResult.md @@ -5,7 +5,7 @@ description: 201 partial-success envelope of POST /api/v1/passports/bulk. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportBulkResult tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 201 partial-success envelope of `POST /api/v1/passports/bulk`. Returned whenever at least one row was inserted, even if other rows failed. diff --git a/schemas/PassportBulkRow.md b/schemas/PassportBulkRow.md index 738dcf6..741ca6d 100644 --- a/schemas/PassportBulkRow.md +++ b/schemas/PassportBulkRow.md @@ -5,7 +5,7 @@ description: One bulk-ingestion row. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportBulkRow tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- One bulk-ingestion row. The HTTP layer only requires each row to be an object; rows missing `productId` or `metadata`, failing ESPR validation, referencing unbound operators/unknown facilities, or duplicating an existing `(productId, operatorId)` pair are SKIPPED and reported as strings in the response `errors[]` — they never fail the whole request (unless every row fails). Bulk rows do not support `draft` or `enrichment`, are always created with `status: "ACTIVE"`, skip the EPCIS traceability audit, and do NOT get `metadata.gtin`/`metadata.grai` auto-injected. diff --git a/schemas/PassportCreateRequest.md b/schemas/PassportCreateRequest.md index 31376a5..7a0ffa0 100644 --- a/schemas/PassportCreateRequest.md +++ b/schemas/PassportCreateRequest.md @@ -5,7 +5,7 @@ description: PassportCreateRequest resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportCreateRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/PassportEnrichmentInput.md b/schemas/PassportEnrichmentInput.md index 81d0ac4..4ce5af3 100644 --- a/schemas/PassportEnrichmentInput.md +++ b/schemas/PassportEnrichmentInput.md @@ -5,7 +5,7 @@ description: Optional presentational (non-regulatory) marketing enrichment, stor resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportEnrichmentInput tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 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. Server-side it is whitelist-sanitized rather than rejected: unknown keys are dropped; `tagline` is trimmed and capped at 200 chars, `description` at 4000, image `caption` at 200, link `label` at 120; at most 24 `images` and 24 `links` are kept; URLs must be http, https, or mailto (any other scheme, e.g. `javascript:` or `data:`, is silently dropped). An enrichment that sanitizes down to nothing is stored as null. diff --git a/schemas/PassportIngestCreated.md b/schemas/PassportIngestCreated.md index 054e76f..6f9f9f2 100644 --- a/schemas/PassportIngestCreated.md +++ b/schemas/PassportIngestCreated.md @@ -5,7 +5,7 @@ description: 201 envelope of POST /api/v1/passports. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportIngestCreated tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 201 envelope of `POST /api/v1/passports`. Only these four top-level keys are ever emitted. diff --git a/schemas/PassportListItem.md b/schemas/PassportListItem.md index 58491ff..0fbbfd0 100644 --- a/schemas/PassportListItem.md +++ b/schemas/PassportListItem.md @@ -5,7 +5,7 @@ description: One JSON-LD passport document as it appears in GET /api/v1/passport resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportListItem tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- One JSON-LD passport document as it appears in `GET /api/v1/passports` list responses. Same shape as `PublicPassportJsonLd` with list-specific divergences imposed by the route's declared response serialization: `economicOperator` never carries `role`; `manufacturingFacility` is always `null`; the `@context` term map (second array element) is emptied to `{}`; and `proof` is emptied to `{}` on sealed items (`null` on unsealed) — fetch the single passport for the verifiable proof block. diff --git a/schemas/PassportListResponse.md b/schemas/PassportListResponse.md index 3dbac8d..40428a5 100644 --- a/schemas/PassportListResponse.md +++ b/schemas/PassportListResponse.md @@ -5,7 +5,7 @@ description: Envelope of GET /api/v1/passports. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportListResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Envelope of GET /api/v1/passports. The response is serialized against a declared response schema: top-level keys other than these four are stripped. There is NO total count. diff --git a/schemas/PassportMetadataInput.md b/schemas/PassportMetadataInput.md index 93cef3c..08297d8 100644 --- a/schemas/PassportMetadataInput.md +++ b/schemas/PassportMetadataInput.md @@ -5,7 +5,7 @@ description: The ESPR product metadata payload. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportMetadataInput tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- The ESPR product metadata payload. For non-draft ingestion and for the validate-only endpoints, `category` is mandatory and must be one of the 9 ESPR categories; each category then mandates its own field set (e.g. textiles require `fiberComposition`, `careInstructions`, `size`; batteries require `batteryCategory`, `chemistry`, `electrochemicalCapacity`, `durability`, `recycledContentShare`, `carbonFootprint`). For five categories — textiles, batteries, electronics, chemicals, construction — the authoritative per-category JSON Schema (required fields, value constraints, field help) is served live at `GET /api/v1/schemas/{category}`; the other four (cosmetics, toys, iron-steel, aluminium) are validated by built-in server-side rules and `GET /api/v1/schemas/{category}` returns 404 for them. Cross-field rules are enforced on top: `materialComposition` (and textile `fiberComposition`) percentages must sum to 100 ±0.1, `originCountry` must be a real ISO 3166-1 alpha-2 code, textile hazardous-substance concentrations are checked against REACH ppm limits. A documented set of supplementary objects (e.g. `technicalProperties`, `environmentalFootprint`, `circularityAttributes`, `esgDueDiligence`, `detailedPerformance`) produce non-blocking `warnings` instead of `errors` when malformed. With `draft: true` (single ingestion only) validation is skipped entirely and any object is accepted. diff --git a/schemas/PassportSealResponse.md b/schemas/PassportSealResponse.md index 85ea42e..a68fbf3 100644 --- a/schemas/PassportSealResponse.md +++ b/schemas/PassportSealResponse.md @@ -5,7 +5,7 @@ description: 200 envelope of POST /api/v1/passports/{id}/seal. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportSealResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 200 envelope of POST /api/v1/passports/{id}/seal. `digitalSeal` is duplicated inside `passport.digitalSeal` and `passport.proof.signatureValue`. The passport document is serialized at the PUBLIC redaction tier; masked keys keep their true leaf hashes in `proof.redactedLeaves`. Note: despite the message wording, this endpoint does not change the passport's `status`. diff --git a/schemas/PassportStatusUpdateRequest.md b/schemas/PassportStatusUpdateRequest.md index e55ab85..61174ec 100644 --- a/schemas/PassportStatusUpdateRequest.md +++ b/schemas/PassportStatusUpdateRequest.md @@ -5,7 +5,7 @@ description: Body of PUT /api/v1/passports/{id}/status. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportStatusUpdateRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Body of PUT /api/v1/passports/{id}/status. Only `status` is read; any other keys are ignored (there is no `reason` field). diff --git a/schemas/PassportStatusUpdateResponse.md b/schemas/PassportStatusUpdateResponse.md index 16c92bb..f2424ca 100644 --- a/schemas/PassportStatusUpdateResponse.md +++ b/schemas/PassportStatusUpdateResponse.md @@ -5,7 +5,7 @@ description: 200 envelope of PUT /api/v1/passports/{id}/status. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportStatusUpdateResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 200 envelope of PUT /api/v1/passports/{id}/status. The passport document is serialized at the PUBLIC redaction tier. diff --git a/schemas/PassportUpdateRequest.md b/schemas/PassportUpdateRequest.md index 1872d32..7255c0e 100644 --- a/schemas/PassportUpdateRequest.md +++ b/schemas/PassportUpdateRequest.md @@ -5,7 +5,7 @@ description: Body of PUT /api/v1/passports/{id}. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportUpdateRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Body of PUT /api/v1/passports/{id}. Unknown keys are ignored. diff --git a/schemas/PassportUpdateResponse.md b/schemas/PassportUpdateResponse.md index f6913d2..578ce2f 100644 --- a/schemas/PassportUpdateResponse.md +++ b/schemas/PassportUpdateResponse.md @@ -5,7 +5,7 @@ description: 200 envelope of PUT /api/v1/passports/{id}. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportUpdateResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 200 envelope of PUT /api/v1/passports/{id}. The passport document is serialized at the PUBLIC redaction tier (owner-only/restricted metadata keys masked) even for the owner. diff --git a/schemas/PassportUpdateValidationError.md b/schemas/PassportUpdateValidationError.md index 580a907..8295e29 100644 --- a/schemas/PassportUpdateValidationError.md +++ b/schemas/PassportUpdateValidationError.md @@ -5,7 +5,7 @@ description: 400 ESPR validation failure body of PUT /api/v1/passports/{id}. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportUpdateValidationError tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 400 ESPR validation failure body of PUT /api/v1/passports/{id}. DIVERGENCE from POST /api/v1/passports: there is never a `warnings` array on this route. @@ -42,7 +42,7 @@ timestamp: 2026-06-20T00:00:00Z }, "message": { "type": "string", - "const": "Dynamic metadata payload failed ESPR category compliance validation" + "example": "Dynamic metadata payload failed ESPR category schema validation" }, "errors": { "type": "array", diff --git a/schemas/PassportValidateOnlyError.md b/schemas/PassportValidateOnlyError.md index 836df69..224de97 100644 --- a/schemas/PassportValidateOnlyError.md +++ b/schemas/PassportValidateOnlyError.md @@ -5,7 +5,7 @@ description: 400 envelope of the validate-only endpoints. resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportValidateOnlyError tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 400 envelope of the validate-only endpoints. Three variants: ESPR validation failure (`error: "Validation Failed"`, with `success`, `category`, `errors[]`, optional `warnings[]` — omitted when none; category-validity error items carry no `friendlyMessage`); whitespace-only `productId` (`error: "Bad Request"`, `category: "unknown"`, `errors: []`, no `warnings`); and structural request rejections (body-schema violations, malformed JSON), which return only `error` + `message`. diff --git a/schemas/PassportValidateOnlyRequest.md b/schemas/PassportValidateOnlyRequest.md index 08b24bc..7e3868c 100644 --- a/schemas/PassportValidateOnlyRequest.md +++ b/schemas/PassportValidateOnlyRequest.md @@ -5,7 +5,7 @@ description: PassportValidateOnlyRequest resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportValidateOnlyRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/PassportValidateOnlyResult.md b/schemas/PassportValidateOnlyResult.md index e349cb4..6b74736 100644 --- a/schemas/PassportValidateOnlyResult.md +++ b/schemas/PassportValidateOnlyResult.md @@ -5,7 +5,7 @@ description: 200 envelope of the validate-only endpoints (only the declared keys resource: https://opendpp-node.eu/openapi.json#/components/schemas/PassportValidateOnlyResult tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 200 envelope of the validate-only endpoints (only the declared keys are emitted). @@ -39,7 +39,7 @@ timestamp: 2026-06-20T00:00:00Z }, "message": { "type": "string", - "const": "Passport metadata payload is 100% valid and ESPR category compliant" + "example": "Passport metadata payload is valid against the ESPR category data schema" }, "category": { "type": "string", diff --git a/schemas/PublicBatteryUnitJsonLd.md b/schemas/PublicBatteryUnitJsonLd.md index 53a526c..613da3f 100644 --- a/schemas/PublicBatteryUnitJsonLd.md +++ b/schemas/PublicBatteryUnitJsonLd.md @@ -5,7 +5,7 @@ description: Public JSON-LD document for one individual serialised battery unit resource: https://opendpp-node.eu/openapi.json#/components/schemas/PublicBatteryUnitJsonLd tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Public JSON-LD document for one individual serialised battery unit (Reg. (EU) 2023/1542 Art. 77(2)). The listed required keys are always present. EXACTLY ONE of two tier-dependent groups is added: anonymous (public) responses carry `restrictedData` (Annex XIII(2)-(4) notice) and OMIT `currentState`/`dynamicData` entirely; owner/grant (privileged) responses carry `currentState` (latest measurement or `null`) and `dynamicData` (up to 500 events, newest first) and omit `restrictedData`. The embedded `ofModel` passport is masked by the caller's tier like `GET /passport/{id}`. diff --git a/schemas/PublicFacilityNode.md b/schemas/PublicFacilityNode.md index 1f58686..70dbf4f 100644 --- a/schemas/PublicFacilityNode.md +++ b/schemas/PublicFacilityNode.md @@ -5,7 +5,7 @@ description: Embedded manufacturing-facility JSON-LD node — the GS1 GLN-backed resource: https://opendpp-node.eu/openapi.json#/components/schemas/PublicFacilityNode tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Embedded manufacturing-facility JSON-LD node — the GS1 GLN-backed Unique Facility Identifier (UFI, EN 18219). The five listed fields are public; `streetAddress`/`city`/`postalCode` appear ONLY in owner-tier responses (never via legitimate-interest grants). diff --git a/schemas/PublicPassportJsonLd.md b/schemas/PublicPassportJsonLd.md index 1f04d48..cdea887 100644 --- a/schemas/PublicPassportJsonLd.md +++ b/schemas/PublicPassportJsonLd.md @@ -5,7 +5,7 @@ description: The public, redacted JSON-LD Digital Product Passport document (app resource: https://opendpp-node.eu/openapi.json#/components/schemas/PublicPassportJsonLd tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- The public, redacted JSON-LD Digital Product Passport document (`application/ld+json`). All listed top-level keys are ALWAYS present (`null` where not applicable). Additionally, every key of the (masked) `metadata` object — except the reserved document keys (`@context`, `@type`, `@id`, `id`, `productId`, `digitalLinkUri`, `digitalSeal`, `signingPublicKey`, `status`, `archivedAt`, `retentionUntil`, `proof`, `createdAt`, `updatedAt`, `economicOperator`, `manufacturingFacility`, `metadata`) — is ALSO flattened onto the document root for direct semantic-graph querying (hence `additionalProperties: true`); flattened values are identical to the corresponding `metadata` values, including redaction placeholders. Tier-masked metadata keys are replaced (in both places) with the literal string `[REDACTED - Privileged Access Required]`. Masking by tier: anonymous public callers lose the per-category restricted keys (category `batteries`: `detailedPerformance`, `lifecycleAndInUse`, `circularityAndDisassembly` — masked only when actually present) AND the owner-only key `facilityDetails`; legitimate-interest/authority grant holders lose only `facilityDetails`; owner-tier responses are unmasked and additionally include the facility street address fields. Note: `facilityDetails` is placeholder-masked in EVERY non-owner response, even when the underlying metadata never contained the key — in that case it has no entry in `proof.redactedLeaves`. Each masked key that exists in the sealed metadata keeps its true Merkle leaf hash in `proof.redactedLeaves`, so the eIDAS seal stays verifiable offline after redaction (see `MerkleTreeAttestationProof` for the reconstruction rule). diff --git a/schemas/RecordBatteryUnitEventRequest.md b/schemas/RecordBatteryUnitEventRequest.md index c178cea..1a33d02 100644 --- a/schemas/RecordBatteryUnitEventRequest.md +++ b/schemas/RecordBatteryUnitEventRequest.md @@ -5,7 +5,7 @@ description: One telemetry record. resource: https://opendpp-node.eu/openapi.json#/components/schemas/RecordBatteryUnitEventRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- One telemetry record. All measurements are optional and independently nullable; numeric ranges are enforced with 400 on violation. diff --git a/schemas/RecordBatteryUnitEventResponse.md b/schemas/RecordBatteryUnitEventResponse.md index 36cca9c..991846c 100644 --- a/schemas/RecordBatteryUnitEventResponse.md +++ b/schemas/RecordBatteryUnitEventResponse.md @@ -5,7 +5,7 @@ description: RecordBatteryUnitEventResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/RecordBatteryUnitEventResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/RegisterOperatorRequest.md b/schemas/RegisterOperatorRequest.md index 0d46342..39350d1 100644 --- a/schemas/RegisterOperatorRequest.md +++ b/schemas/RegisterOperatorRequest.md @@ -5,7 +5,7 @@ description: RegisterOperatorRequest resource: https://opendpp-node.eu/openapi.json#/components/schemas/RegisterOperatorRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/RegisterOperatorResponse.md b/schemas/RegisterOperatorResponse.md index 46a507d..c539ed4 100644 --- a/schemas/RegisterOperatorResponse.md +++ b/schemas/RegisterOperatorResponse.md @@ -5,7 +5,7 @@ description: RegisterOperatorResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/RegisterOperatorResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/RestoreOperatorResponse.md b/schemas/RestoreOperatorResponse.md index 09f8f6f..8a66b28 100644 --- a/schemas/RestoreOperatorResponse.md +++ b/schemas/RestoreOperatorResponse.md @@ -5,7 +5,7 @@ description: RestoreOperatorResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/RestoreOperatorResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/RotateTenantKeysResponse.md b/schemas/RotateTenantKeysResponse.md index 45c46fa..c4c8bbc 100644 --- a/schemas/RotateTenantKeysResponse.md +++ b/schemas/RotateTenantKeysResponse.md @@ -5,7 +5,7 @@ description: RotateTenantKeysResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/RotateTenantKeysResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/SealCertificateReport.md b/schemas/SealCertificateReport.md index c3ae39c..b19f361 100644 --- a/schemas/SealCertificateReport.md +++ b/schemas/SealCertificateReport.md @@ -5,7 +5,7 @@ description: "Present only for x5c-carrying proofs AND only when verification pr resource: https://opendpp-node.eu/openapi.json#/components/schemas/SealCertificateReport tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Present only for x5c-carrying proofs AND only when verification proceeds past the key-registration and operator-binding gates (the two policy `verified: false` responses omit it): the certified legal identity of the seal creator (eIDAS Art. 36(1)(b)). On an unparseable chain only `chainValid: false` and `error` are present. diff --git a/schemas/SealTimestampReport.md b/schemas/SealTimestampReport.md index 60ab869..d55b62a 100644 --- a/schemas/SealTimestampReport.md +++ b/schemas/SealTimestampReport.md @@ -5,7 +5,7 @@ description: "Present only when payload.proof.rfc3161.token was supplied AND ver resource: https://opendpp-node.eu/openapi.json#/components/schemas/SealTimestampReport tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 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). Reports presence and the TSA-asserted genTime from the token's TSTInfo — full cryptographic TSR validation is the verifier's own step. diff --git a/schemas/SealVerifyRequest.md b/schemas/SealVerifyRequest.md index 076d106..17a712b 100644 --- a/schemas/SealVerifyRequest.md +++ b/schemas/SealVerifyRequest.md @@ -5,7 +5,7 @@ description: Verification request. resource: https://opendpp-node.eu/openapi.json#/components/schemas/SealVerifyRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Verification request. Only `payload` is strictly required: `signature` and `publicKey` are extracted from `payload.proof` (proofValue/signatureValue, publicKeyPem, or the x5c leaf SPKI) when omitted, and the request fails 400 only if either is still missing after extraction. diff --git a/schemas/SealVerifyResponse.md b/schemas/SealVerifyResponse.md index 71020bb..526d616 100644 --- a/schemas/SealVerifyResponse.md +++ b/schemas/SealVerifyResponse.md @@ -5,7 +5,7 @@ description: Always HTTP 200 once the request is well-formed. resource: https://opendpp-node.eu/openapi.json#/components/schemas/SealVerifyResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Always HTTP 200 once the request is well-formed. `verified: false` covers both cryptographic failure and the two registration/binding policy failures — the policy failures add a `message` and OMIT `certificate`/`timestamp` even when an x5c chain or RFC 3161 token was supplied. diff --git a/schemas/SectorJsonSchemaDocument.md b/schemas/SectorJsonSchemaDocument.md index 77db5e9..e84f927 100644 --- a/schemas/SectorJsonSchemaDocument.md +++ b/schemas/SectorJsonSchemaDocument.md @@ -5,7 +5,7 @@ description: A JSON Schema draft-07 document describing the ESPR metadata payloa resource: https://opendpp-node.eu/openapi.json#/components/schemas/SectorJsonSchemaDocument tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- A JSON Schema **draft-07** document describing the ESPR `metadata` payload for one product category, served as `application/schema+json`. Each known field is annotated server-side with a plain-English `description` from the platform's field-help registry (annotations are AJV-ignored; validation behavior is identical to the raw schema). The same schema (without annotations) validates `metadata` on `POST /api/v1/passports` and the validate-only endpoints. diff --git a/schemas/SectorVocabularyContext.md b/schemas/SectorVocabularyContext.md index f3de0c9..52cc6cb 100644 --- a/schemas/SectorVocabularyContext.md +++ b/schemas/SectorVocabularyContext.md @@ -5,7 +5,7 @@ description: Per-category JSON-LD vocabulary context, returned by GET /api/v1/sc resource: https://opendpp-node.eu/openapi.json#/components/schemas/SectorVocabularyContext tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Per-category JSON-LD vocabulary context, returned by `GET /api/v1/schemas/{category}` when `Accept` contains `application/ld+json`. Fixed shape: `@vocab` is `https://w3id.org/opendpp/schemas/{category}#` plus mappings for `id`, `type`, `category`, `materialComposition`, `originCountry`, `facilityDetails` and `regulatoryCompliance`. diff --git a/schemas/SerializeBatteryUnitsRequest.md b/schemas/SerializeBatteryUnitsRequest.md index 507406e..25298b4 100644 --- a/schemas/SerializeBatteryUnitsRequest.md +++ b/schemas/SerializeBatteryUnitsRequest.md @@ -5,7 +5,7 @@ description: "Either a single unit object, or a batch wrapper {units: [...]}." resource: https://opendpp-node.eu/openapi.json#/components/schemas/SerializeBatteryUnitsRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Either a single unit object, or a batch wrapper `{units: [...]}`. Precedence: when `units` is present **and is an array** it is used; otherwise the whole body is treated as one unit. (`anyOf`, not `oneOf`: a body carrying both a top-level `serialNumber` and a `units` array matches both shapes and is accepted by the server — `units` wins.) diff --git a/schemas/SerializeBatteryUnitsResponse.md b/schemas/SerializeBatteryUnitsResponse.md index bb7936f..89a5e2c 100644 --- a/schemas/SerializeBatteryUnitsResponse.md +++ b/schemas/SerializeBatteryUnitsResponse.md @@ -5,7 +5,7 @@ description: Returned (201) when at least one unit was created. resource: https://opendpp-node.eu/openapi.json#/components/schemas/SerializeBatteryUnitsResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Returned (201) when at least one unit was created. Partial success is possible: skipped items are reported in `errors` while `units` holds the created rows. diff --git a/schemas/ServiceVersion.md b/schemas/ServiceVersion.md index 06eaf86..3703762 100644 --- a/schemas/ServiceVersion.md +++ b/schemas/ServiceVersion.md @@ -5,7 +5,7 @@ description: Running API contract version and source build identity, returned by resource: https://opendpp-node.eu/openapi.json#/components/schemas/ServiceVersion tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Running API contract version and source build identity, returned by `GET /api/v1/version`. The `apiVersion` MAJOR is the safe thing to pin an integration or generated SDK to. diff --git a/schemas/TraceComplianceAuditResponse.md b/schemas/TraceComplianceAuditResponse.md index 63569bc..da61f91 100644 --- a/schemas/TraceComplianceAuditResponse.md +++ b/schemas/TraceComplianceAuditResponse.md @@ -5,7 +5,7 @@ description: TraceComplianceAuditResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/TraceComplianceAuditResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/TraceComplianceCertificate.md b/schemas/TraceComplianceCertificate.md index ee5950d..f49eea3 100644 --- a/schemas/TraceComplianceCertificate.md +++ b/schemas/TraceComplianceCertificate.md @@ -5,7 +5,7 @@ description: TraceComplianceCertificate resource: https://opendpp-node.eu/openapi.json#/components/schemas/TraceComplianceCertificate tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema @@ -14,8 +14,8 @@ timestamp: 2026-06-20T00:00:00Z |----------|------|----------|-------------| | `type` | string | yes | — | | `rootEventId` | string | yes | — | -| `status` | string | yes | — | -| `regulatoryStandards` | array | yes | Always ["EUDR-2026", "UFLPA-2026"]. | +| `status` | string | yes | Screening outcome — informational (e.g. | +| `regulatoryStandards` | array | yes | Vendor screening-heuristic identifiers applied (e.g. | ## JSON Schema @@ -38,18 +38,16 @@ timestamp: 2026-06-20T00:00:00Z }, "status": { "type": "string", - "const": "VERIFIED_COMPLIANT" + "example": "SCREENED_NO_MATCHES", + "description": "Screening outcome — informational (e.g. `SCREENED_NO_MATCHES` when no geographic screen matched); NOT a legal compliance verdict." }, "regulatoryStandards": { "type": "array", "items": { "type": "string", - "enum": [ - "EUDR-2026", - "UFLPA-2026" - ] + "example": "OpenDPP-EUDR-heuristic" }, - "description": "Always `[\"EUDR-2026\", \"UFLPA-2026\"]`." + "description": "Vendor screening-heuristic identifiers applied (e.g. `OpenDPP-EUDR-heuristic`, `OpenDPP-UFLPA-screen`) — informational, NOT EU regulatory standards." } } } diff --git a/schemas/TraceEventRegistered.md b/schemas/TraceEventRegistered.md index cc6aa4a..e92cca7 100644 --- a/schemas/TraceEventRegistered.md +++ b/schemas/TraceEventRegistered.md @@ -5,7 +5,7 @@ description: 201 envelope of POST /api/v1/events. resource: https://opendpp-node.eu/openapi.json#/components/schemas/TraceEventRegistered tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 201 envelope of POST /api/v1/events. Note: `status: "success"` (string), not the usual `success: true` boolean. diff --git a/schemas/TraceLineageNode.md b/schemas/TraceLineageNode.md index 6219bd6..19193bf 100644 --- a/schemas/TraceLineageNode.md +++ b/schemas/TraceLineageNode.md @@ -5,7 +5,7 @@ description: One node of the recursive upstream lineage DAG. resource: https://opendpp-node.eu/openapi.json#/components/schemas/TraceLineageNode tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- One node of the recursive upstream lineage DAG. All keys are always present; `location`, `readPoint` and `issuerDid` are null when unset. `location` mirrors the stored `bizLocation`. A shared ancestor reached through multiple downstream paths appears once under each path (the DAG is expanded into a tree). diff --git a/schemas/TraceLineageResponse.md b/schemas/TraceLineageResponse.md index 990a464..bb69f03 100644 --- a/schemas/TraceLineageResponse.md +++ b/schemas/TraceLineageResponse.md @@ -5,7 +5,7 @@ description: TraceLineageResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/TraceLineageResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/UntpEventCredential.md b/schemas/UntpEventCredential.md index 00422d1..800656e 100644 --- a/schemas/UntpEventCredential.md +++ b/schemas/UntpEventCredential.md @@ -5,7 +5,7 @@ description: A UNTP/EPCIS 2.0 traceability event wrapped as a VC-shaped credenti resource: https://opendpp-node.eu/openapi.json#/components/schemas/UntpEventCredential tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- A UNTP/EPCIS 2.0 traceability event wrapped as a VC-shaped credential (a vendor proof, not a conformant W3C VC). The only hard structural requirement is `credentialSubject`; a missing or unverifiable `proof` is rejected with the 400 `Cryptographic Verification Failed` body. Extra properties are permitted — the entire credential (with `proof.proofValue` blanked) is what the signature covers. diff --git a/schemas/UntpEventCredentialSubject.md b/schemas/UntpEventCredentialSubject.md index 55e07b3..859a67f 100644 --- a/schemas/UntpEventCredentialSubject.md +++ b/schemas/UntpEventCredentialSubject.md @@ -5,7 +5,7 @@ description: The EPCIS event payload. resource: https://opendpp-node.eu/openapi.json#/components/schemas/UntpEventCredentialSubject tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- The EPCIS event payload. `eventType` is effectively required: it is persisted into a server-side enum, and a missing or unknown value is rejected at the persistence layer (surfacing as the 500 `Database Persistence Failed` body, not a 400). diff --git a/schemas/UntpEventProof.md b/schemas/UntpEventProof.md index 2c11531..25e6375 100644 --- a/schemas/UntpEventProof.md +++ b/schemas/UntpEventProof.md @@ -5,7 +5,7 @@ description: Credential proof. resource: https://opendpp-node.eu/openapi.json#/components/schemas/UntpEventProof tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Credential proof. Verified with ECDSA P-256 / SHA-256 over OpenDPP's deterministic key-sorted JSON canonicalization of the credential with `proofValue` blanked (NOT RFC 8785 JCS — not a conformant W3C Data Integrity suite). diff --git a/schemas/UntpVerificationMethod.md b/schemas/UntpVerificationMethod.md index 50f0bb2..df33443 100644 --- a/schemas/UntpVerificationMethod.md +++ b/schemas/UntpVerificationMethod.md @@ -5,7 +5,7 @@ description: Embedded verification-method object. resource: https://opendpp-node.eu/openapi.json#/components/schemas/UntpVerificationMethod tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Embedded verification-method object. The `x5c` chain (base64 DER, leaf first) is honoured ONLY when the node has eIDAS trust anchors configured, every certificate is currently valid, each link verifies against the next, the top is anchored, and the leaf attests the credential issuer — otherwise it is ignored and the registered tenant key is used instead. diff --git a/schemas/UpdateOperatorRequest.md b/schemas/UpdateOperatorRequest.md index b0dbd21..d1c421f 100644 --- a/schemas/UpdateOperatorRequest.md +++ b/schemas/UpdateOperatorRequest.md @@ -5,7 +5,7 @@ description: Both fields are optional. resource: https://opendpp-node.eu/openapi.json#/components/schemas/UpdateOperatorRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Both fields are optional. Values must be non-empty strings after trimming; anything else (missing, non-string, whitespace-only) is silently ignored. `regId` and `regIdScheme` cannot be changed. An omitted body or an empty object `{}` is accepted and returns the unchanged row. diff --git a/schemas/UpdateOperatorResponse.md b/schemas/UpdateOperatorResponse.md index c341e15..08f0e7f 100644 --- a/schemas/UpdateOperatorResponse.md +++ b/schemas/UpdateOperatorResponse.md @@ -5,7 +5,7 @@ description: UpdateOperatorResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/UpdateOperatorResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/ValidationErrorItem.md b/schemas/ValidationErrorItem.md index b5b7625..d72ec78 100644 --- a/schemas/ValidationErrorItem.md +++ b/schemas/ValidationErrorItem.md @@ -5,7 +5,7 @@ description: One field-level finding from ESPR category validation. resource: https://opendpp-node.eu/openapi.json#/components/schemas/ValidationErrorItem tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- One field-level finding from ESPR category validation. `path` uses dot/bracket notation into the metadata object (e.g. `materialComposition[0].percentage`). diff --git a/schemas/WebhookDeliveriesResponse.md b/schemas/WebhookDeliveriesResponse.md index 8f0da3a..d62df18 100644 --- a/schemas/WebhookDeliveriesResponse.md +++ b/schemas/WebhookDeliveriesResponse.md @@ -5,7 +5,7 @@ description: WebhookDeliveriesResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookDeliveriesResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/WebhookDeliveryRow.md b/schemas/WebhookDeliveryRow.md index 61c3a71..5fbeb59 100644 --- a/schemas/WebhookDeliveryRow.md +++ b/schemas/WebhookDeliveryRow.md @@ -5,7 +5,7 @@ description: One outbox delivery record (event-level). resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookDeliveryRow tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- One outbox delivery record (event-level). The payload is not included. diff --git a/schemas/WebhookEnvelope.md b/schemas/WebhookEnvelope.md index 98d37b8..12c5687 100644 --- a/schemas/WebhookEnvelope.md +++ b/schemas/WebhookEnvelope.md @@ -5,7 +5,7 @@ description: The signed body of every webhook delivery. resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookEnvelope tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- The signed body of every webhook delivery. `data` is the public (redacted) JSON-LD passport document; `type` is the concrete event name (also in the `X-OpenDPP-Event` header); `id` is the stable delivery id (also in the `X-OpenDPP-Delivery` header) and is CONSTANT across all retries of the same event, so deduplicate on it for exactly-once processing; `created` is the event time (stable across retries, distinct from the per-attempt `X-OpenDPP-Timestamp`). diff --git a/schemas/WebhookEventFilter.md b/schemas/WebhookEventFilter.md index 516f919..24074d4 100644 --- a/schemas/WebhookEventFilter.md +++ b/schemas/WebhookEventFilter.md @@ -5,7 +5,7 @@ description: Subscribable event filter values. resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookEventFilter tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Subscribable event filter values. `*` matches every emitted event. `passport.status_updated` (decommission/reactivate) and `passport.updated` (in-place edit of a published passport) are now first-class subscribable filters. diff --git a/schemas/WebhookSecretRotateResponse.md b/schemas/WebhookSecretRotateResponse.md index e0787c8..8410c3a 100644 --- a/schemas/WebhookSecretRotateResponse.md +++ b/schemas/WebhookSecretRotateResponse.md @@ -5,7 +5,7 @@ description: WebhookSecretRotateResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSecretRotateResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/WebhookSubscriptionCreateRequest.md b/schemas/WebhookSubscriptionCreateRequest.md index eeb962d..ebc5619 100644 --- a/schemas/WebhookSubscriptionCreateRequest.md +++ b/schemas/WebhookSubscriptionCreateRequest.md @@ -5,7 +5,7 @@ description: WebhookSubscriptionCreateRequest resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionCreateRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/WebhookSubscriptionCreateResponse.md b/schemas/WebhookSubscriptionCreateResponse.md index c46fa97..27fb0b7 100644 --- a/schemas/WebhookSubscriptionCreateResponse.md +++ b/schemas/WebhookSubscriptionCreateResponse.md @@ -5,7 +5,7 @@ description: WebhookSubscriptionCreateResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionCreateResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/WebhookSubscriptionDeleteResponse.md b/schemas/WebhookSubscriptionDeleteResponse.md index 1f02747..37660ab 100644 --- a/schemas/WebhookSubscriptionDeleteResponse.md +++ b/schemas/WebhookSubscriptionDeleteResponse.md @@ -5,7 +5,7 @@ description: WebhookSubscriptionDeleteResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionDeleteResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/WebhookSubscriptionListResponse.md b/schemas/WebhookSubscriptionListResponse.md index a2ce8ad..83fea4c 100644 --- a/schemas/WebhookSubscriptionListResponse.md +++ b/schemas/WebhookSubscriptionListResponse.md @@ -5,7 +5,7 @@ description: WebhookSubscriptionListResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionListResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/WebhookSubscriptionRow.md b/schemas/WebhookSubscriptionRow.md index 2a460a0..71401d0 100644 --- a/schemas/WebhookSubscriptionRow.md +++ b/schemas/WebhookSubscriptionRow.md @@ -5,7 +5,7 @@ description: A webhook subscription row with the HMAC signing secret stripped (i resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionRow tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- A webhook subscription row with the HMAC signing `secret` stripped (it is shown exactly once, in the 201 create response). diff --git a/schemas/WebhookSubscriptionUpdateRequest.md b/schemas/WebhookSubscriptionUpdateRequest.md index 543e704..73793ab 100644 --- a/schemas/WebhookSubscriptionUpdateRequest.md +++ b/schemas/WebhookSubscriptionUpdateRequest.md @@ -5,7 +5,7 @@ description: All fields optional; include only what you want to change. resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionUpdateRequest tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- All fields optional; include only what you want to change. The secret is not editable here. diff --git a/schemas/WebhookSubscriptionUpdateResponse.md b/schemas/WebhookSubscriptionUpdateResponse.md index 559200b..ffd7371 100644 --- a/schemas/WebhookSubscriptionUpdateResponse.md +++ b/schemas/WebhookSubscriptionUpdateResponse.md @@ -5,7 +5,7 @@ description: WebhookSubscriptionUpdateResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionUpdateResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/WebhookSubscriptionWithSecret.md b/schemas/WebhookSubscriptionWithSecret.md index d0c9755..2505e8f 100644 --- a/schemas/WebhookSubscriptionWithSecret.md +++ b/schemas/WebhookSubscriptionWithSecret.md @@ -5,7 +5,7 @@ description: The full subscription row as returned ONLY by the 201 create respon resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookSubscriptionWithSecret tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- The full subscription row as returned ONLY by the 201 create response — includes the HMAC-SHA256 signing secret. diff --git a/schemas/WebhookTestResult.md b/schemas/WebhookTestResult.md index 306fa55..64304b9 100644 --- a/schemas/WebhookTestResult.md +++ b/schemas/WebhookTestResult.md @@ -5,7 +5,7 @@ description: WebhookTestResult resource: https://opendpp-node.eu/openapi.json#/components/schemas/WebhookTestResult tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/schemas/WhoamiResponse.md b/schemas/WhoamiResponse.md index 20cef45..fd1fc00 100644 --- a/schemas/WhoamiResponse.md +++ b/schemas/WhoamiResponse.md @@ -5,7 +5,7 @@ description: WhoamiResponse resource: https://opendpp-node.eu/openapi.json#/components/schemas/WhoamiResponse tags: - schema -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- ## Schema diff --git a/tags/access-grants.md b/tags/access-grants.md index 0d66a09..6729985 100644 --- a/tags/access-grants.md +++ b/tags/access-grants.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - access-grants -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Capability tokens implementing tiered access (Battery Regulation Art. 77(9) legitimate-interest access): issue, approve, deny and revoke `dpp_li_…` / `dpp_auth_…` tokens. Third parties request access via the hosted request page; granted tokens unlock restricted fields on the public resolution endpoints (Bearer or `?grant=`). diff --git a/tags/account.md b/tags/account.md index ed7bcc0..9b37a1a 100644 --- a/tags/account.md +++ b/tags/account.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - account -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 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. diff --git a/tags/battery-units.md b/tags/battery-units.md index 4025d0a..8dca616 100644 --- a/tags/battery-units.md +++ b/tags/battery-units.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - battery-units -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 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. diff --git a/tags/economic-operators.md b/tags/economic-operators.md index 0ada63c..0ae7a1d 100644 --- a/tags/economic-operators.md +++ b/tags/economic-operators.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - economic-operators -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Register and manage the economic operators (manufacturers/brands, identified by EORI or national registry id) that passports are issued on behalf of. Operators with passports are archived — never hard-deleted — to preserve passport resolvability (ESPR Art. 9(2)). diff --git a/tags/eidas-keys.md b/tags/eidas-keys.md index b92b3ee..a7caf3d 100644 --- a/tags/eidas-keys.md +++ b/tags/eidas-keys.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - eidas-keys -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Tenant signing-key management. Keys are generated and held server-side in an encrypted vault; private key material is never returned by any endpoint. diff --git a/tags/facilities.md b/tags/facilities.md index 99a96f6..33ec326 100644 --- a/tags/facilities.md +++ b/tags/facilities.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - facilities -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Manufacturing facility master data, identified by GS1 GLN-13 (the Unique Facility Identifier). GLN, name, activity and country are public in passport documents; street addresses are never published. diff --git a/tags/passports.md b/tags/passports.md index 21e3681..5961e18 100644 --- a/tags/passports.md +++ b/tags/passports.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - passports -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Create, validate, read, update, seal and manage the lifecycle of Digital Product Passports. Passport metadata is category-specific: machine-readable JSON Schemas are served live at `GET /api/v1/schemas/{category}` for textiles, batteries, electronics, chemicals and construction; the remaining categories (cosmetics, toys, iron-steel, aluminium) are validated by built-in rules — use the dry-run validators to check payloads for any category. diff --git a/tags/public-resolution.md b/tags/public-resolution.md index 7c7cf67..156a3a7 100644 --- a/tags/public-resolution.md +++ b/tags/public-resolution.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - public-resolution -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Unauthenticated, content-negotiated passport resolution: GS1 Digital Link paths, passport and unit pages. One URL serves JSON-LD (default), an AAS environment (`Accept: application/aas+json`), a signed UNTP Verifiable Credential (`Accept: application/vc+jwt` enveloping, `application/vc+ld+json` embedded `ecdsa-jcs-2019` Data Integrity, or `application/dc+sd-jwt` SD-JWT-VC selective disclosure; the first two also item-level on `/unit/:id`), or HTML (`Accept: text/html`). Tiered by optional credentials or grant tokens. Rate limit: 30 requests/min per IP. diff --git a/tags/qr-codes.md b/tags/qr-codes.md index f64e5e5..550ccd2 100644 --- a/tags/qr-codes.md +++ b/tags/qr-codes.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - qr-codes -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Export GS1-Digital-Link QR codes (PNG/SVG, 128–2048 px, GS1 quiet zone) for passports and battery units. diff --git a/tags/schemas-vocabulary.md b/tags/schemas-vocabulary.md index e1bed9c..9e7d64a 100644 --- a/tags/schemas-vocabulary.md +++ b/tags/schemas-vocabulary.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - schemas-vocabulary -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Machine-readable contracts: per-category ESPR JSON Schemas, the W3C JSON-LD context, and the curated materials vocabulary. diff --git a/tags/service.md b/tags/service.md index 6c81af9..25393da 100644 --- a/tags/service.md +++ b/tags/service.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - service -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Service metadata and liveness. diff --git a/tags/traceability-audit.md b/tags/traceability-audit.md index e139131..2116cb5 100644 --- a/tags/traceability-audit.md +++ b/tags/traceability-audit.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - traceability-audit -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- UNTP/EPCIS supply-chain traceability events, lineage queries, and the public seal verifier. The verifier checks the cryptographic seal AND that the signing workspace is bound to the economic operator declared in the payload. diff --git a/tags/verifiable-credentials.md b/tags/verifiable-credentials.md index bd5dc5b..6b71848 100644 --- a/tags/verifiable-credentials.md +++ b/tags/verifiable-credentials.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - verifiable-credentials -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- 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. Unauthenticated; resolve these to verify and revocation-check any OpenDPP-issued credential. diff --git a/tags/webhooks.md b/tags/webhooks.md index aa38981..99f6fab 100644 --- a/tags/webhooks.md +++ b/tags/webhooks.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/api-reference tags: - api domain - webhooks -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Subscribe HTTPS endpoints to passport lifecycle events. Deliveries are HMAC-SHA256-signed POSTs with retry/backoff — see the webhooks section of this document for the signature scheme and payloads. diff --git a/webhooks/passport.ingested.md b/webhooks/passport.ingested.md index 9c8a8f8..20c4bee 100644 --- a/webhooks/passport.ingested.md +++ b/webhooks/passport.ingested.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/openapi.json#/webhooks/passport.ingested tags: - webhook - event -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Sent when a passport becomes active for the first time: a non-draft `POST /api/v1/passports` create, the **first publish** of a draft via `PUT /api/v1/passports/{id}`, or each successfully ingested row of `POST /api/v1/passports/bulk`. Draft creation does NOT emit it, non-publish updates and deletes emit nothing, and **AAS ingestion (`POST /api/v1/passports/aas/ingest`) emits no webhook events at all**. The payload is the freshly created passport: `status: "ACTIVE"` with `digitalSeal` and `proof` still `null` (unless a previously sealed draft is re-published). Emission is enqueued transactionally with the passport write (outbox pattern) and delivered asynchronously to every active subscription whose filter contains `passport.ingested` or `*`. diff --git a/webhooks/passport.recalled.md b/webhooks/passport.recalled.md index 5960bdd..ac7866d 100644 --- a/webhooks/passport.recalled.md +++ b/webhooks/passport.recalled.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/openapi.json#/webhooks/passport.recalled tags: - webhook - event -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Sent when `PUT /api/v1/passports/{id}/status` transitions a passport to `RECALLED`, transactionally with the status write. The payload is the public JSON-LD passport with `status: "RECALLED"` (seal/proof fields reflect whatever state the passport was in when recalled). Delivered to every active subscription whose filter contains `passport.recalled` or `*`. diff --git a/webhooks/passport.sealed.md b/webhooks/passport.sealed.md index 4edbd97..53f71a7 100644 --- a/webhooks/passport.sealed.md +++ b/webhooks/passport.sealed.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/openapi.json#/webhooks/passport.sealed tags: - webhook - event -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Sent when a passport is sealed via `POST /api/v1/passports/{id}/seal`, transactionally with the seal write. The payload carries the populated `digitalSeal`, `signingPublicKey`, and the `proof` block: `merkleRoot` always; an `x5c` certificate chain binding the signing key to the tenant's legal identity **when the tenant's signing key has an issued chain**; an **optional** `rfc3161` trusted timestamp; and `redactedLeaves` hashes **when the passport carries masked metadata keys**. Delivered to every active subscription whose filter contains `passport.sealed` or `*`. diff --git a/webhooks/passport.status_updated.md b/webhooks/passport.status_updated.md index 0209c25..e93c990 100644 --- a/webhooks/passport.status_updated.md +++ b/webhooks/passport.status_updated.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/openapi.json#/webhooks/passport.status_updated tags: - webhook - event -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Sent when `PUT /api/v1/passports/{id}/status` performs a non-recall transition: decommissioning (`DECOMMISSIONED`, which also sets `retentionUntil` and starts the retention clock) or reactivation back to `ACTIVE`. Subscribe to it directly with the `passport.status_updated` filter (or `*`). diff --git a/webhooks/passport.updated.md b/webhooks/passport.updated.md index f205f27..83afcfb 100644 --- a/webhooks/passport.updated.md +++ b/webhooks/passport.updated.md @@ -6,7 +6,7 @@ resource: https://opendpp-node.eu/openapi.json#/webhooks/passport.updated tags: - webhook - event -timestamp: 2026-06-20T00:00:00Z +timestamp: 2026-06-22T00:00:00Z --- Sent when an already-published (non-draft) passport's content is edited in place via `PUT /api/v1/passports/{id}`, transactionally with the update write. This is **distinct from first publish** (that emits `passport.ingested`, not this event) and is **never** emitted for sealed passports — in-place edits of a sealed passport are rejected with `403`. The payload is the updated public JSON-LD passport with `status: "ACTIVE"`. Delivered to every active subscription whose filter contains `passport.updated` or `*`.