This document specifies the VSC Interoperability Toolkit: the normative API surface, data transformation rules, conformance classes, and test-suite architecture that enable any compliant implementation to translate between existing supply chain event data (principally [[EPCIS20]] / [[ISO19987]]) and verifiable, DID-anchored attestations built on [[VC-DATA-MODEL]] and [[DID-CORE]].

The toolkit is the second major deliverable of the Verifiable Supply Chain Community Group. It builds directly on the requirements established in [[VSC-REQUIREMENTS]] and on the prior art of the W3C CCG [[TRACE-INTEROP]] Final Report (December 2024). Implementers who satisfy the conformance criteria of this specification can demonstrate interoperability through the VSC Conformance Test Suite defined herein.

This document is a Community Group Draft produced by the Verifiable Supply Chain Community Group. It is not a W3C Standard and is not on the W3C Standards Track. It may be updated, replaced, or obsoleted at any time.

The specification is versioned at 0.1 (pre-interoperability-event). Version history is tracked in the CHANGELOG. Feedback is welcome via the GitHub issue tracker or the public-vsc mailing list. See for contribution guidelines.

This draft references [[TRACE-INTEROP]], which achieved W3C CCG Final Report status in December 2024 and represents the closest published prior art. VSC extends that work with EPCIS-specific transformation rules, sector-specific conformance profiles, and a multi-format proof strategy.

Introduction

This section is non-normative.

Motivation

The [[VSC-REQUIREMENTS]] document established that global supply chains face three structural gaps: fragmentation of event data formats, absence of cryptographic verifiability, and growing regulatory pressure from [[DSCSA]], [[EUDR]], [[EU-DPP]], and [[CBAM]]. The present specification addresses the fragmentation gap by providing a standardized, implementable bridge between the dominant supply chain event standard ([[EPCIS20]]) and the W3C Verifiable Credentials ecosystem.

The VSC Interoperability Toolkit ("the Toolkit") comprises three interlocking components:

  1. The VSC Translation API — a set of HTTP endpoints, based on [[VC-API]], that accept [[EPCIS20]] event documents and return signed [=Verifiable Credential=]s (and vice versa).
  2. The EPCIS-VC Mapping Rules — normative, field-level transformation rules for all five [[EPCIS20]] event types, including round-trip fidelity requirements.
  3. The VSC Conformance Test Suite (VSC-CTS) — a machine-executable test harness, structured around the model established by [[TRACE-INTEROP]] and the W3C VC Data Model test suites, that allows any implementation to demonstrate compliance and report interoperability results.

Relationship to Prior Art

The VSC Toolkit is intentionally downstream of and compatible with:

Document Structure

The key words MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT, RECOMMENDED, NOT RECOMMENDED, MAY, and OPTIONAL are to be interpreted as described in [[RFC2119]] and [[RFC8174]] when, and only when, they appear in all capitals.

Conformance Classes

This specification defines four conformance classes. An implementation declares which class(es) it conforms to; each class has its own mandatory test subset in the VSC Conformance Test Suite.

VSC-MAPPER VSC Mapper
A software component that transforms [[EPCIS20]] event documents into VSC-conformant [=Verifiable Credential=] documents (forward mapping) and/or transforms VSC credentials back into valid [[EPCIS20]] documents (reverse mapping). A VSC Mapper MUST implement at least the forward mapping for all five [[EPCIS20]] event types as defined in .
VSC-ISSUER VSC Issuer
A system that accepts a VSC Translation API issue request, generates a signed [=Verifiable Credential=], and returns it. A VSC Issuer MUST implement the POST /credentials/issue endpoint as specified in and MUST support at least one proof format listed in .
VSC-VERIFIER VSC Verifier
A system that accepts a VSC Translation API verify request and returns a structured verification result. A VSC Verifier MUST implement the POST /credentials/verify and POST /presentations/verify endpoints as specified in .
VSC-HARNESS VSC Test Harness
A system that executes the VSC Conformance Test Suite against one or more implementations and produces a conformance or interoperability report in the format defined in . A VSC Test Harness MUST implement all mandatory test categories defined in .

A single software system MAY simultaneously conform to multiple conformance classes. For example, a "VSC Broker" that translates, issues, and verifies credentials would conform to VSC-MAPPER, VSC-ISSUER, and VSC-VERIFIER.

Terminology

Terms defined in [[VSC-REQUIREMENTS]] are used here with their established meanings. Additional toolkit-specific terms follow.

VSC Credential
A [=Verifiable Credential=] conformant with [[VC-DATA-MODEL]] whose credentialSubject encapsulates the data of one [[EPCIS20]] event and whose structure satisfies the VSC event schema for that event type. A VSC Credential is produced by applying the [=EPCIS-to-VC Mapping=] to a valid [[EPCIS20]] event document.
EPCIS-to-VC Mapping
The normative, forward transformation defined in that converts a valid [[EPCIS20]] event document into a [=VSC Credential=] without loss of any mandatory EPCIS field.
VC-to-EPCIS Mapping
The normative, reverse transformation defined in that extracts a valid [[EPCIS20]] event document from the credentialSubject of a [=VSC Credential=].
VSC Translation API
The HTTP API defined in that exposes the [=EPCIS-to-VC Mapping=] and [=VC-to-EPCIS Mapping=] as machine-callable endpoints, alongside standard VC-API issuance and verification endpoints.
Conformance Profile
A named, sector-specific set of constraints applied on top of the base conformance requirements, specifying which [[EPCIS20]] event types, [[CBV20]] bizStep values, proof formats, and regulatory metadata fields are mandatory for a given industry vertical (e.g., Pharmaceuticals-DSCSA, Food-EUDR, Critical-Minerals-DPP). Conformance profiles are defined in .
Test Vector
A precisely specified, machine-readable input/output pair used by the [=VSC Test Harness=] to verify a specific normative assertion. Each test vector carries a unique identifier, a reference to the normative clause it exercises, and the expected outcome (PASS, FAIL, or SKIP).
Interoperability Report
A machine-readable and human-readable document produced by a [=VSC Test Harness=] that records which test vectors each tested implementation passed, failed, or skipped, and whether two independently developed implementations achieved end-to-end interoperability on a defined scenario.
Round-Trip Fidelity
The property that applying the [=EPCIS-to-VC Mapping=] followed immediately by the [=VC-to-EPCIS Mapping=] to a valid [[EPCIS20]] event document produces an output that is semantically equivalent to the original input, with no mandatory field values altered or lost.

Component Architecture

This section is non-normative.

Overview

The Toolkit is positioned as an interoperability layer between existing supply chain systems and the W3C Verifiable Credentials ecosystem. The three principal components and their interactions are illustrated below.

  ┌─────────────────────────────────────────────────────────┐
  │              EXISTING SUPPLY CHAIN SYSTEMS              │
  │   ERP · WMS · EPCIS Repository · Logistics Platform    │
  └──────────────────────┬──────────────────────────────────┘
                         │  EPCIS 2.0 JSON-LD / XML
                         ▼
  ┌────────────────────────────────────────────────────────┐
  │             VSC TRANSLATION API (§5)                   │
  │  POST /epcis/translate   →  VSC Credential (JSON-LD)   │
  │  POST /credentials/issue →  Signed VSC Credential      │
  │  POST /credentials/verify→  Verification Result        │
  │  POST /presentations/verify→Presentation Result        │
  │  GET  /epcis/extract     ←  EPCIS 2.0 re-extraction    │
  └──────────┬─────────────────────────────────────────────┘
             │
     ┌───────┴───────────────────────┐
     │  EPCIS-VC MAPPING RULES (§6)  │
     │  Field map · type coercion    │
     │  CBV→VC vocab · round-trip    │
     └───────┬───────────────────────┘
             │
     ┌───────┴───────────────────────┐
     │  PROOF LAYER (§7)             │
     │  EdDSA (eddsa-rdfc-2022)      │
     │  ECDSA (ecdsa-rdfc-2019)      │
     │  VC-JWT (ES256/ES384)         │
     │  SD-JWT (selective disclose)  │
     └───────────────────────────────┘
             │
     ┌───────┴───────────────────────┐
     │  VSC CONFORMANCE TEST SUITE   │
     │  (§8)                         │
     │  Conformance · Interop        │
     │  Positive · Negative          │
     │  Round-trip fidelity          │
     └───────────────────────────────┘
      
Figure 1 — VSC Toolkit component architecture. Each layer is independently implementable; a minimal conforming implementation need only implement VSC-MAPPER.

Deployment Models

The Toolkit supports three deployment models. All are normatively equivalent; the API surface is the same in each.

Sidecar
The VSC Translation API runs as a microservice alongside an existing EPCIS repository. Events are translated on write or on demand via a query endpoint.
Embedded SDK
The mapping rules are embedded in a supply chain platform's own code, which calls the Translation API internally or exposes the same API surface externally.
Hosted Service
A third-party VSC provider offers the Translation API as a managed service. Authorization uses OAuth 2.0 Client Credentials as specified in .

VSC Translation API

The VSC Translation API is a profile of the [[VC-API]] (W3C CCG) with additional EPCIS-specific endpoints. It is defined as an [[OPENAPI]] 3.1.0 document (normative YAML artefact, maintained separately as vsc-api.yaml in the repository). This section specifies the normative behaviour of each endpoint.

Authentication and Authorization

All VSC Translation API endpoints MUST be protected. Implementations MUST support OAuth 2.0 Client Credentials Grant (RFC 6749 §4.4) as the baseline authorization mechanism, consistent with [[TRACE-INTEROP]]. Implementations SHOULD additionally support HTTP Message Signatures (RFC 9421) for machine-to-machine scenarios where OAuth infrastructure is unavailable.

Implementations MUST NOT expose endpoints over plain HTTP (non-TLS). TLS 1.2 or later is REQUIRED on all VSC Translation API connections.

Base URL and Versioning

The API MUST be versioned. The base path MUST include the major version number conforming to [[SEMVER]]:

// Example base URL pattern
https://example.com/vsc/v1/

Breaking changes MUST increment the major version. Non-breaking additions MUST increment the minor version. The current version of this specification defines the v1 API surface.

EPCIS Translation Endpoints

The following endpoints are specific to the VSC Toolkit and extend [[VC-API]].

Forward Translation: EPCIS → VSC Credential

POST /vsc/v1/epcis/translate
// Accepts: application/json (EPCIS 2.0 JSON-LD event)
// Returns: application/vc+ld+json (unsigned VSC Credential)

A [=VSC Mapper=] implementing this endpoint MUST accept a single [[EPCIS20]] event document in JSON-LD format and return an unsigned [=VSC Credential=] whose credentialSubject is constructed according to the [=EPCIS-to-VC Mapping=] rules in .

Request body — A single [[EPCIS20]] event object. The request MUST include a Content-Type: application/json header. EPCIS XML submissions MUST first be converted to JSON-LD per [[EPCIS20]] §9.8 before submission; XML-to-JSON-LD conversion is out of scope for this endpoint.

Success response — HTTP 200 OK with Content-Type: application/vc+ld+json. The body is an unsigned VSC Credential conformant with [[VC-DATA-MODEL]].

Error responses — see . Specific errors for this endpoint include: VSC_ERR_UNKNOWN_EVENT_TYPE (unsupported event type), VSC_ERR_MISSING_REQUIRED_FIELD (mandatory EPCIS field absent), and VSC_ERR_INVALID_EPC_SYNTAX (malformed EPC URI).

Example request and response (non-normative)
// REQUEST — ObjectEvent (commissioning)
POST /vsc/v1/epcis/translate
Content-Type: application/json
Authorization: Bearer <token>

{
  "@context": ["https://ref.gs1.org/standards/epcis/epcis-context.jsonld"],
  "type": "ObjectEvent",
  "eventTime": "2026-04-15T09:00:00.000Z",
  "eventTimeZoneOffset": "+00:00",
  "epcList": ["https://id.gs1.org/01/09506000134376/21/12345"],
  "action": "ADD",
  "bizStep": "https://ref.gs1.org/cbv/BizStep-commissioning",
  "disposition": "https://ref.gs1.org/cbv/Disp-active",
  "readPoint": {"id": "https://id.gs1.org/414/9506000000000"},
  "bizLocation": {"id": "https://id.gs1.org/414/9506000000000"}
}

// RESPONSE — Unsigned VSC Credential
HTTP/1.1 200 OK
Content-Type: application/vc+ld+json

{
  "@context": [
    "https://www.w3.org/ns/credentials/v2",
    "https://w3c-cg.github.io/vsc/contexts/v1"
  ],
  "type": ["VerifiableCredential", "VSCObjectEvent"],
  "issuer": "did:web:ISSUER_DID_PLACEHOLDER",
  "validFrom": "2026-04-15T09:00:00Z",
  "credentialSubject": {
    "epcisEventType": "ObjectEvent",
    "eventTime": "2026-04-15T09:00:00.000Z",
    "epcList": ["https://id.gs1.org/01/09506000134376/21/12345"],
    "action": "ADD",
    "bizStep": "https://ref.gs1.org/cbv/BizStep-commissioning",
    "disposition": "https://ref.gs1.org/cbv/Disp-active",
    "readPoint": "https://id.gs1.org/414/9506000000000",
    "bizLocation": "https://id.gs1.org/414/9506000000000"
  }
}
        

Reverse Translation: VSC Credential → EPCIS

POST /vsc/v1/epcis/extract
// Accepts: application/vc+ld+json (signed or unsigned VSC Credential)
// Returns: application/json (EPCIS 2.0 JSON-LD event)

A [=VSC Mapper=] implementing this endpoint MUST apply the [=VC-to-EPCIS Mapping=] rules and return a valid [[EPCIS20]] event document. The extracted document MUST satisfy [[Round-Trip Fidelity]] for any credential produced by /epcis/translate.

If the submitted credential is signed, the implementation SHOULD validate the proof before extraction. If proof validation fails, the implementation SHOULD return VSC_ERR_INVALID_PROOF unless the caller has included "skipProofValidation": true in an optional options request object.

Credential Issuance

POST /vsc/v1/credentials/issue
// Accepts: application/json (IssueCredentialRequest)
// Returns: application/vc+ld+json (signed Verifiable Credential)

A [=VSC Issuer=] implementing this endpoint MUST conform to the [[VC-API]] POST /credentials/issue behaviour, with the following VSC-specific constraints:

Credential and Presentation Verification

POST /vsc/v1/credentials/verify
// Returns: VerificationResult
POST /vsc/v1/presentations/verify
// Returns: VerificationResult

A [=VSC Verifier=] MUST conform to the [[VC-API]] verification behaviour and additionally:

VerificationResult Schema

{
  "verified": true | false,
  "checks": ["proof", "status", "expiry", "schema"],
  "warnings": [],
  "errors": [
    {
      "code": "VSC_ERR_*",
      "message": "Human-readable description",
      "field": "credentialSubject.bizStep"   // optional field pointer
    }
  ],
  "vscProfile": "pharmaceuticals-dscsa"   // if a conformance profile was applied
}
      

Discovery

GET /vsc/v1/.well-known/vsc-configuration
// Returns: VSCConfiguration (JSON)

Implementations MUST expose a discovery endpoint that returns a [[JSON-SCHEMA]]-validated VSCConfiguration object. Minimum required fields:

{
  "vscVersion": "0.1",
  "conformanceClasses": ["VSC-MAPPER", "VSC-ISSUER", "VSC-VERIFIER"],
  "supportedEpcisEventTypes": [
    "ObjectEvent", "AggregationEvent", "TransformationEvent",
    "TransactionEvent", "AssociationEvent"
  ],
  "supportedProofFormats": ["eddsa-rdfc-2022", "jwt"],
  "supportedProfiles": ["base", "pharmaceuticals-dscsa"],
  "didMethods": ["did:web", "did:key"],
  "statusListSupport": true,
  "translationEndpoints": {
    "forward": "/vsc/v1/epcis/translate",
    "reverse": "/vsc/v1/epcis/extract"
  }
}
    

EPCIS-VC Mapping Rules

This section specifies the normative field-level mapping between [[EPCIS20]] event documents and [=VSC Credential=] documents. All rules apply to both the [=EPCIS-to-VC Mapping=] (forward) and the [=VC-to-EPCIS Mapping=] (reverse) unless stated otherwise.

General Mapping Rules

MAP-G1 — Context Injection

The [=EPCIS-to-VC Mapping=] MUST add the following @context entries to every produced credential, in this order:

"@context": [
  "https://www.w3.org/ns/credentials/v2",
  "https://w3c-cg.github.io/vsc/contexts/v1",
  "https://ref.gs1.org/standards/epcis/epcis-context.jsonld"
]
      

The EPCIS JSON-LD context MUST be the last entry to allow VSC terms to shadow any conflicting EPCIS terms.

MAP-G2 — Type Array

The produced credential's type array MUST contain "VerifiableCredential" as its first element and a VSC event type string as its second element. The VSC event type strings are:

EPCIS 2.0 event typeVSC type string
ObjectEventVSCObjectEvent
AggregationEventVSCAggregationEvent
TransformationEventVSCTransformationEvent
TransactionEventVSCTransactionEvent
AssociationEventVSCAssociationEvent
MAP-G3 — validFrom from eventTime

The EPCIS eventTime field MUST be mapped to the credential's validFrom property using xsd:dateTimeStamp format (YYYY-MM-DDTHH:MM:SS.sssZ). The EPCIS recordTime field, if present, MUST be preserved in credentialSubject.recordTime.

MAP-G4 — EPC Identifiers as GS1 Digital Link URIs

EPC values in epcList, inputEPCList, outputEPCList, childEPCs, and parentID MUST be expressed as [[GS1-DIGITALLINK]] URIs where a GS1 identifier scheme applies. URN-format EPCs (e.g., urn:epc:id:sgtin:...) SHOULD be converted to their equivalent Digital Link URI form during the forward mapping. The original URN SHOULD be preserved as a credentialSubject.sourceEpcUrn extension property.

MAP-G5 — CBV Vocabulary URIs

The bizStep and disposition fields MUST use [[CBV20]] URI values (e.g., https://ref.gs1.org/cbv/BizStep-shipping) in both forward and reverse mappings. Short-form CBV code strings (e.g., "shipping") MUST be expanded to full URIs during forward mapping.

MAP-G6 — Round-Trip Fidelity

For any valid [[EPCIS20]] event document E, the composition vcToEpcis(epcisToVc(E)) MUST produce a document E' such that for every mandatory [[EPCIS20]] field f: E[f] == E'[f] (value equality after URI normalization). The [=VSC Test Harness=] MUST verify this property for all five event types using the round-trip test vectors in .

Per-Event-Type Mapping Supplement

The following rules supplement the general rules for event-type-specific fields. Fields not listed are passed through unchanged into credentialSubject using their EPCIS JSON-LD property names.

Event type Key EPCIS fields Mapping notes
ObjectEvent epcList, action, bizStep, disposition, readPoint, bizLocation, sensorElementList action MUST be preserved verbatim ("ADD", "OBSERVE", or "DELETE"). sensorElementList, if present, MUST be preserved as a structured array in credentialSubject.
AggregationEvent parentID, childEPCs, childQuantityList, action parentID MUST be mapped per MAP-G4 (Digital Link URI). The parent–child relationship MUST be preserved in credentialSubject.aggregation.
TransformationEvent inputEPCList, outputEPCList, inputQuantityList, outputQuantityList, transformationID transformationID MUST be used as credentialSubject.id if present, enabling cross-enterprise matching of the same transformation event.
TransactionEvent bizTransactionList, epcList, sourceList, destinationList bizTransactionList entries MUST be preserved as an array in credentialSubject.businessTransactions. sourceList / destinationList parties SHOULD be expressed as [[DID-CORE]] URIs where a DID is known; GLN-based [[GS1-DIGITALLINK]] URIs are the fallback.
AssociationEvent parentID, childEPCs, childQuantityList For IoT device associations, the parentID SHOULD be the DID of the device or contain a reference to the device's DID document.

Supported Proof Formats

VSC implementations MUST support at least one of the mandatory proof formats below. Implementations MAY additionally support optional formats. All cryptosuites referenced are defined by W3C Recommendations (May 2025) or Candidate Recommendations.

Proof format Specification Class requirement Notes
eddsa-rdfc-2022 [[VC-DI-EDDSA]] REQUIRED for VSC-ISSUER baseline Ed25519 / Ed448 over canonicalized JSON-LD (RDFC-1.0). This is the mandatory baseline for the VSC Conformance Test Suite, consistent with [[TRACE-INTEROP]].
ecdsa-rdfc-2019 [[VC-DI-ECDSA]] RECOMMENDED for P-256 / P-384 key holders ECDSA over JSON-LD. Common in enterprise PKI environments.
VC-JWT (ES256 / ES384) [[VC-JOSE-COSE]], [[RFC7515]] RECOMMENDED for REST/OpenID Connect integrations JWT-secured VCs. Preferred by implementers with existing OAuth/OIDC infrastructure. [[RFC9052]] COSE MAY also be used.
SD-JWT [[SD-JWT]], [[VC-JOSE-COSE]] REQUIRED for profiles with selective disclosure obligations Selective Disclosure JWT. Mandatory when a [=Conformance Profile=] requires per-field selective disclosure (e.g., EU-DPP profile). See [[SD-JWT]] for disclosure frame construction.
BBS+ (bbs-2023) [[VC-DI]] BBS Cryptosuites (W3C CR) OPTIONAL (currently W3C Candidate Recommendation) Enables unlinkable selective disclosure proofs. Implementations SHOULD plan for adoption once the underlying IETF BBS signature scheme is finalized.

The [=VSC Test Harness=] MUST test at minimum eddsa-rdfc-2022 proof generation and verification. Test vectors for other proof formats are provided as optional test categories.

Conformance Profiles

Profiles constrain the base specification for specific industry contexts. An implementation may claim conformance to one or more profiles in addition to a base conformance class. Profile-specific test vectors are defined in separate annexes of the VSC Conformance Test Suite.

Base Profile (vsc-base)

The base profile requires all five EPCIS event types, eddsa-rdfc-2022 proof format, Bitstring Status List revocation, and [[DID-WEB]] or did:key for issuers. All other profiles extend the base profile.

Pharmaceuticals — DSCSA Profile (pharmaceuticals-dscsa)

AttributeConstraint
Required event typesTransactionEvent (mandatory), ObjectEvent
Required bizStep valuescbv:BizStep-shipping, cbv:BizStep-receiving, cbv:BizStep-returning
Required identifiersSGTIN (item-level serialization per [[DSCSA]] §582)
Predecessor linkREQUIRED for all custody transfer credentials
Credential statusREQUIRED (Bitstring Status List)
Proof formateddsa-rdfc-2022 or VC-JWT (ES256)
Regulatory metadataMUST include credentialSubject.regulatoryContext: "dscsa"
Chain of custodyMUST support full chain reconstruction per [[GS1-DSCSA-GUIDE]]

Food & Agriculture — EUDR Profile (food-eudr)

AttributeConstraint
Required event typesObjectEvent (commissioning), TransactionEvent
Required fieldsgeoLocation (GeoJSON polygon), harvestDate, speciesIdentifier in credentialSubject
Selective disclosureREQUIRED: SD-JWT MUST enable independent disclosure of geoLocation and supplier identity
Certification linkageSHOULD reference a deforestation certification credential via vscPredecessor
Regulatory metadataMUST include credentialSubject.regulatoryContext: "eudr"

Critical Minerals & Manufacturing — CBAM/DPP Profile (critical-minerals-cbam)

AttributeConstraint
Required event typesTransformationEvent (bill-of-materials), ObjectEvent
Required fieldscarbonFootprint (kg CO₂e), countryOfOrigin, hsCode in credentialSubject
Identifier schemeCustom identifiers MAY be used where no GS1 identifier exists; MUST be expressed as URIs
Multi-tier linkageREQUIRED: Tier-2 and Tier-3 TransformationEvent credentials MUST be linkable via vscPredecessor
Regulatory metadataMUST include credentialSubject.regulatoryContext: "cbam" and/or "eu-dpp"

VSC Conformance Test Suite (VSC-CTS)

The VSC Conformance Test Suite is the machine-executable complement to the normative specification. It is maintained as a separate artefact in the repository at test-suite/ and versioned in lock-step with this specification using [[SEMVER]].

Architecture

The VSC-CTS is structured after the model of [[TRACE-INTEROP]] and the W3C VC Data Model 2.0 test suite. It uses:

Test Categories

Category ID Description Scope Class Status
MAP-FWD Forward mapping: EPCIS → unsigned VSC Credential for all 5 event types MAP-G1 – MAP-G6, MAP-LINK1 VSC-MAPPER Mandatory
MAP-REV Reverse mapping: VSC Credential → EPCIS (round-trip fidelity) MAP-G6, VC-to-EPCIS rules VSC-MAPPER Mandatory
MAP-NEG Negative mapping: invalid EPCIS inputs → correct error codes Error handling, §10 VSC-MAPPER Mandatory
ISS-SIGN Credential issuance with eddsa-rdfc-2022 proof §5.3, §7 VSC-ISSUER Mandatory
ISS-STATUS Issuance with Bitstring Status List credential status §5.3, REQ-F7 VSC-ISSUER Mandatory
ISS-JWT Credential issuance with VC-JWT (ES256) proof §7 VSC-ISSUER Optional
ISS-SDJWT Credential issuance with SD-JWT and selective disclosure frame §7 VSC-ISSUER Optional (mandatory for EUDR/DPP profiles)
VFY-CRED Credential verification: valid, expired, revoked, bad-signature cases §5.4 VSC-VERIFIER Mandatory
VFY-PRES Presentation verification: chain-of-custody presentations, gap detection §5.4, MAP-LINK1 VSC-VERIFIER Mandatory
DISC Discovery endpoint returns valid VSCConfiguration §5.5 All Mandatory
INTEROP End-to-end: Issuer A → Verifier B across two independent implementations REQ-NF3 All Mandatory for Interoperability Report
PROF-PHARMA DSCSA profile: SGTIN serialization, chain reconstruction §8.2 VSC-ISSUER VSC-VERIFIER Optional (profile-specific)
PROF-EUDR EUDR profile: geo-polygon, SD-JWT selective disclosure §8.3 VSC-ISSUER Optional (profile-specific)
PROF-CBAM CBAM/DPP profile: carbon footprint, multi-tier linkage §8.4 VSC-ISSUER Optional (profile-specific)

Round-Trip Test Vectors

Round-trip fidelity (MAP-G6) is verified using a canonical set of [[EPCIS20]] test vectors, one per event type, stored in the repository at test-suite/vectors/roundtrip/. Each vector is a JSON file containing:

The initial set of round-trip vectors covers all five event types and at minimum the following bizStep values from [[CBV20]]: commissioning, shipping, receiving, inspecting, transforming, and sensor_reporting.

Reporting Format

The [=VSC Test Harness=] MUST produce two distinct report types:

Conformance Report
Tests a single implementation against all mandatory test vectors for its declared conformance class(es). Produced as a machine-readable JSON file at reports/conformance/<impl-id>-<date>.json and a human-readable HTML summary.
Interoperability Report
Tests two or more independent implementations against each other on the INTEROP test category scenarios. Produced at reports/interoperability/<date>.json. An implementation is eligible for listing in the VSC Interoperability Registry only after passing the Interoperability Report with at least one other independent implementation.

The report JSON schema is defined in test-suite/schemas/report-schema.json and follows the structure established by [[TRACE-INTEROP]].

Implementation Registration

Any organization wishing to have their implementation tested against the VSC-CTS MUST:

  1. Submit a pull request to test-suite/implementations/<org-name>.json containing endpoint URLs, supported conformance classes, supported proof formats, and OAuth 2.0 client credential configuration (using GitHub Secrets for sensitive values).
  2. Confirm acceptance of the W3C Community CLA.
  3. Ensure the registered endpoint is accessible from GitHub Actions runners. Implementations MAY use an allowlisted outbound IP range to restrict access to GitHub's CI infrastructure.

Error Handling

All VSC Translation API error responses MUST use the RFC 9457 Problem Details JSON format with Content-Type: application/problem+json. In addition, VSC error responses MUST include a vscCode property containing a VSC-specific error code from the registry below.

HTTP/1.1 422 Unprocessable Entity
Content-Type: application/problem+json

{
  "type": "https://w3c-cg.github.io/vsc-interop-toolkit/errors#VSC_ERR_MISSING_REQUIRED_FIELD",
  "title": "Missing required EPCIS field",
  "status": 422,
  "detail": "The field 'eventTime' is required but was not present in the submitted ObjectEvent.",
  "instance": "/vsc/v1/epcis/translate",
  "vscCode": "VSC_ERR_MISSING_REQUIRED_FIELD",
  "vscField": "eventTime"
}
  
CodeHTTP statusDescription
VSC_ERR_UNKNOWN_EVENT_TYPE400The submitted document's type field does not match any of the five EPCIS 2.0 event types.
VSC_ERR_MISSING_REQUIRED_FIELD422A mandatory EPCIS field is absent. vscField identifies the missing property path.
VSC_ERR_INVALID_EPC_SYNTAX422An EPC value does not conform to [[GS1-DIGITALLINK]] URI syntax or the legacy URN format.
VSC_ERR_INVALID_CBV_VALUE422A bizStep or disposition value is not a recognized [[CBV20]] URI.
VSC_ERR_INVALID_PROOF400The submitted credential's cryptographic proof is invalid or cannot be verified.
VSC_ERR_DID_RESOLUTION_FAILURE502The issuer DID could not be resolved. Indicates a network or DID method infrastructure problem.
VSC_ERR_CREDENTIAL_REVOKED400The credential's Bitstring Status List entry indicates it has been revoked.
VSC_ERR_CREDENTIAL_EXPIRED400The credential's validUntil has passed.
VSC_ERR_CHAIN_GAP400A gap was detected in the event chain during presentation verification. vscField identifies the missing predecessor credential ID.
VSC_ERR_UNSUPPORTED_PROOF_FORMAT400The requested proofFormat is not supported by this implementation.
VSC_ERR_PROFILE_VIOLATION422The credential or presentation does not satisfy a required [=Conformance Profile=] constraint. vscField identifies the violated profile rule.
VSC_ERR_ROUND_TRIP_LOSS500The VC-to-EPCIS extraction produced a document that fails round-trip fidelity. Indicates an implementation defect.

Security Considerations

All security considerations in [[VC-DATA-MODEL]], [[VC-DI]], and [[VC-JOSE-COSE]] apply to VSC credentials. In addition:

Privacy Considerations

All privacy considerations in [[VC-DATA-MODEL]] apply. Toolkit-specific considerations:

Roadmap

This section is non-normative.

v0.1 — This draft

API specification, mapping rules, conformance classes, test suite architecture, error registry.

v0.2 — First Interop Event

Two independent implementations complete MAP-FWD, ISS-SIGN, VFY-CRED categories. First public Interoperability Report published.

v0.3 — Profile Expansion

EUDR SD-JWT profile (ISS-SDJWT) and CBAM multi-tier linkage vectors finalized. Second interop event with sector-specific test vectors.

v1.0 — CG Final Report

At least two independent implementations pass all Mandatory test categories. OPENAPI artefact frozen. Formal liaison notification to GS1 and UN/CEFACT.

Contributing to this Specification

This section is non-normative.

All contributions welcome — no W3C Membership required.

Join the group at w3.org/community/vsc (free GitHub account + W3C CLA acceptance). You are then eligible to file issues and submit pull requests.

Filing Issues

Use the GitHub issue tracker with one of these labels:

One issue per discrete concern. Reference the relevant section number (e.g., "§6.2 MAP-G4") in your issue title.

Pull Requests

Registering an Implementation

To register your implementation for conformance and interoperability testing, follow the process in . All registered implementations and their current test results are listed in the public IMPLEMENTATIONS.md.

Editorial Style

Acknowledgments

The editors thank participants of the Verifiable Supply Chain Community Group for their contributions. This specification builds on the substantial prior art of the W3C Credentials Community Group's [[TRACE-INTEROP]] Final Report (December 2024), the [[VC-API]], and the [[TRACE-VOCAB]], and on the GS1 [[EPCIS20]] and [[CBV20]] standards. The conformance profile requirements are informed by published regulatory guidance from the U.S. FDA ([[DSCSA]]), the European Union ([[EUDR]], [[EU-DPP]], [[CBAM]]), and GS1's [[GS1-DSCSA-GUIDE]].