Skip to main content
    Skip to content
    NorruvaDeveloper Docs
    Sandbox · verified 2026-07-29
    This page
    Whole docs
    Machine formats

    PlaygroundGet API keys
    IntroductionQuickstartAuthenticationErrors & conventionsSandbox & environments
    Entity modelProducts & categoriesPassports & versionsDigital Link & resolutionCompliance & regulationsWebhooks & eventsAutoID print loopImport jobsObservability & audit
    OverviewAuth & API keysProductsCompliance & regulationsPassportsResolver & publicWebhooksPrint jobs & devicesImport / bulkObservabilityBeyond happy path
    Integration playbookWebhook receiver guideRun a print deviceDeviations & gotchas
    EN 18222 API methodsAnnex ZA — ESPR correspondence

    Designed to align with EN 18222:2026 — Digital Product Passport, Application Programming Interfaces (APIs). EN 18222:2026 is OJEU-cited by Commission Implementing Decision (EU) 2026/1736; no conformity assessment against it has been performed here, and this catalogue makes no presumption-of-conformity claim for this platform or for Norruva.

    EN 18222:2026 Clause 4.1 defines a five-tier responsibility model: for each lifecycle method, which parties — the DPP creator, its main service provider, and/or a back-up DPP service provider — are obligated to make it available. The table below labels every method by what this deployment actually offers today.

    Tier 1 — SHALL — creator or main service provider, and back-up service provider

    SHALL

    MethodEndpointResponsible partyBack-up service providerThis deploymentTry it
    ReadDPPByIdGET /api/v1/dpps/{dppId}Creator or main service providerBack-up service provider
    Not offered by this deployment
    Route available
    Route available, but no data source: it reads the `passport_projections` bi-temporal projection, which nothing writes yet (ADR-169 §2 interim). Expect 404 for every real passport until the projector write path is ratified.
    Try it
    ReadDPPByProductIdGET /api/v1/dppsByProductId/{productId}Creator or main service providerBack-up service provider
    Not offered by this deployment
    Route availableTry it
    ReadDPPIdsByProductIdsPOST /api/v1/dppsByProductIdsCreator or main service providerBack-up service provider
    Not offered by this deployment
    Route available

    Tier 2 — SHOULD — creator or main service provider, and back-up service provider

    SHOULD

    MethodEndpointResponsible partyBack-up service providerThis deploymentTry it
    ReadDataElementGET /api/v1/dpps/{dppId}/elements/{elementIdPath}Creator or main service providerBack-up service provider
    Not offered by this deployment
    Route available
    Route available, but no data source: it reads the `passport_projections` bi-temporal projection, which nothing writes yet (ADR-169 §2 interim). Expect 404 for every real passport until the projector write path is ratified.
    Try it

    Tier 3 — SHOULD — main service provider only, and back-up service provider (creator not listed)

    SHOULD

    MethodEndpointResponsible partyBack-up service providerThis deploymentTry it
    CreateDPPPOST /api/v1/dppsMain service provider onlyBack-up service provider
    Not offered by this deployment
    Route available
    DeleteDPPByIdDELETE /api/v1/dpps/{dppId}Main service provider onlyBack-up service provider
    Not offered by this deployment
    Route available
    ReadDPPVersionByIdAndDateGET /api/v1/dppsByIdAndDate/{dppId}Main service provider onlyBack-up service provider
    Not offered by this deployment
    Route available
    Route available, but no data source: it reads the `passport_projections` bi-temporal projection, which nothing writes yet (ADR-169 §2 interim). Expect 404 for every real passport until the projector write path is ratified.
    Try it

    Tier 4 — conditional SHALL — creator or main service provider only

    SHALL — authorized third parties have access rights to update parts of the DPP

    MethodEndpointResponsible partyBack-up service providerThis deploymentTry it
    UpdateDPPById
    Condition: authorized third parties have access rights to update parts of the DPP
    PATCH /api/v1/dpps/{dppId}Creator or main service providerNot named by the standard for this tier
    Not offered by this deployment
    Route available

    Tier 5 — conditional SHOULD — creator or main service provider only

    SHOULD — authorized third parties have access rights to update parts of the DPP

    MethodEndpointResponsible partyBack-up service providerThis deploymentTry it
    UpdateDataElement
    Condition: authorized third parties have access rights to update parts of the DPP
    PATCH /api/v1/dpps/{dppId}/elements/{elementIdPath}Creator or main service providerNot named by the standard for this tier
    Not offered by this deployment
    Route available — declines write (501 ServerNotImplemented)
    Route exists and is reachable but returns 501 ServerNotImplemented — the write is not yet performed.

    No back-up DPP service provider deployment topology exists in this codebase today — that is an infrastructure/commercial decision outside this repository's scope, not a build gap. Every method above records that honestly rather than leaving the column blank.

    Searchability surface (Clause 4.1, informative note)

    EN 18222:2026 Clause 4.1 names exactly three methods as the surface a client may use to build search functionality. This group renders those three methods and nothing else — no other route on this platform, however search-shaped, belongs to this normative surface.

    • ReadDPPByProductId — GET /api/v1/dppsByProductId/{productId} (Clause 4.3)Try it
    • ReadDPPIdsByProductIds — POST /api/v1/dppsByProductIds (Clause 4.5)
    • ReadDPPVersionByIdAndDate — GET /api/v1/dppsByIdAndDate/{dppId} (Clause 4.4)Try it

    Registry API (Clause 5)

    The registration method is a Clause 5 DPP Registry API call — it sits outside the Clause 4.1 five-tier lifecycle responsibility model above.

    RegisterProductDPP

    POST /api/v1/registerDPP — Table 17

    Clause 5 registry method — outside the Clause 4.1 five-tier lifecycle responsibility model.

    Table 15 — response status codes

    Status codeHTTPMeaningHas Result object
    Success200SuccessNo
    SuccessCreated201New resource createdNo
    SuccessAccepted202Request received successfullyNo
    SuccessNoContent204Success, no content in payloadNo
    ClientErrorBadRequest400Bad / malformed requestYes
    ClientNotAuthorized401Wrong / missing credentialsYes
    ClientForbidden403Authorization refusedYes
    ClientErrorResourceNotFound404Resource not foundYes
    ClientMethodNotAllowed405Method request not allowedYes
    ClientResourceConflict409Resource already existsYes
    ServerInternalError500Unexpected errorYes
    ServerNotImplemented501Functionality not supportedNo
    ServerErrorBadGateway502Bad gatewayYes
    On this page
    No sections
    Norruva DPP API · sandbox developer docsGenerated 2026-07-29 · PRD-aligned (TSC roadmap rev 2) · statuses reflect E2E-verified sandbox behaviour — not marketing