### Proxy configuration example Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/trust-chains/credential-status-and-revocation/revocation-strategies Example configuration for the VC Status proxy, including prefix, headers, and testSuffix. The attribute-id is provided for registration. ```json {"prefix": "https://localhost/my-provider/revocation/","headers":{"Authorization": "Bearer ABC"}, "testSuffix": "/credentials/status/1"} ``` -------------------------------- ### Root DID document example Source: https://hub.ebsi.eu/docs/onboarding/legal-entity/did-ebsi-method Example of a Root DID document that controls itself and a Child DID. It includes an operational key for authentication and assertion, a key for capability invocation, and a cold storage key for recovery. ```json { "@context": "https://w3id.org/did/v1", "id": "did:ebsi:zvHWX359A3CvfJnCYaAiAde", "controller": [ "did:ebsi:zvHWX359A3CvfJnCYaAiAde" ], "verificationMethod": [ { "id": "did:ebsi:zvHWX359A3CvfJnCYaAiAde#F0r5Oyt_lahvvz6MWlYs3mcYNKZiiQdUfqv8tshHN9w", "type": "JsonWebKey2020", "controller": "did:ebsi:zvHWX359A3CvfJnCYaAiAde", "publicKeyJwk": { "kty": "EC", "crv": "P-256", "x": "ZYE6uX3XvQ9rLc6s0eeo2YiOM2VfwrEZOZXzTOthcHE", "y": "k-t1bfe-MmmXWQ0QaxK3uJMYlMNkJHYGUSLpxP9RQak", "alg": "ES256" } }, { "id": "did:ebsi:zvHWX359A3CvfJnCYaAiAde#HnlK0wApxuRLLuCl1d1N3eL0_1ZvnNa3oBsTpBL1FNU", "type": "JsonWebKey2020", "controller": "did:ebsi:zvHWX359A3CvfJnCYaAiAde", "publicKeyJwk": { "kty": "EC", "crv": "secp256k1", "x": "EKpnPiX6IIs6vw2M03pWNuI2OORfLgotH0-gcZC0jv8", "y": "_1swhdgVvwnCHzuIVhG4cXXM4bV1c9I6OOTU_6xxDfo", "alg": "ES256K" } }, { "id": "did:ebsi:zvHWX359A3CvfJnCYaAiAde#bYyEVItcJYPLXnQPYQVK8NrT9IoJlKaVfqpXG2lii2o", "type": "JsonWebKey2020", "controller": "did:ebsi:zvHWX359A3CvfJnCYaAiAde", "publicKeyJwk": { "kty": "EC", "crv": "secp256k1", "kid": "bYyEVItcJYPLXnQPYQVK8NrT9IoJlKaVfqpXG2lii2o", "x": "pH8icNZgUCwcX5P-YaLO212N9-BqyyUlDnrLijmZh7g", "y": "z83kLTM784_3QLELR4FBnSr58HG_bL75ufcZ0y3yy5U", "alg": "ES256" } } ], "authentication": [ "did:ebsi:zvHWX359A3CvfJnCYaAiAde#F0r5Oyt_lahvvz6MWlYs3mcYNKZiiQdUfqv8tshHN9w" // DID 1 key to authenticate ], "assertionMethod": [ "did:ebsi:zvHWX359A3CvfJnCYaAiAde#F0r5Oyt_lahvvz6MWlYs3mcYNKZiiQdUfqv8tshHN9w" // DID 1 key to sign claims ], "capabilityInvocation": [ "did:ebsi:zvHWX359A3CvfJnCYaAiAde#HnlK0wApxuRLLuCl1d1N3eL0_1ZvnNa3oBsTpBL1FNU", // DID 1 key to control did documents / EBSI Platform "did:ebsi:zvHWX359A3CvfJnCYaAiAde#bYyEVItcJYPLXnQPYQVK8NrT9IoJlKaVfqpXG2lii2o" // DID 1 cold storage key ] } ``` -------------------------------- ### Bounded DID document example Source: https://hub.ebsi.eu/docs/onboarding/legal-entity/did-ebsi-method Example of a bounded Child DID document that is controlled by the Root DID. It only has an assertionMethod for issuing verifiable credentials and cannot manage the EBSI platform or authenticate. ```json { "@context": "https://w3id.org/did/v1", "id": "did:ebsi:zxA9t4Z2uorEVnx9njWUYvR", "controller": [ "did:ebsi:zvHWX359A3CvfJnCYaAiAde", ], "verificationMethod": [ { "id": "did:ebsi:zxA9t4Z2uorEVnx9njWUYvR#Ajo-JS9ai-hfuaYX6HwgQGBqZogTEPBCm0rMEF5CQx0", "type": "JsonWebKey2020", "controller": "did:ebsi:zxA9t4Z2uorEVnx9njWUYvR", "publicKeyJwk": { "kty": "EC", "crv": "P-256", "x": "g-foMvQQEANWgL3RXy3pu-gYdcG3Em9W245UNXiYwhs", "y": "fowb8W13LEjvyfeiJDep6ivw9oimh2mjt28_SSckBOI", "alg": "ES256" } ], "assertionMethod": [ "did:ebsi:zxA9t4Z2uorEVnx9njWUYvR#Ajo-JS9ai-hfuaYX6HwgQGBqZogTEPBCm0rMEF5CQx0" ] } ``` -------------------------------- ### Example of BitstringStatusListEntry in a Verifiable Credential Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/trust-chains/credential-status-and-revocation/vc-extensions Example VC with two credentialStatus entries using BitstringStatusListEntry. The first is for revocation, the second for message with statusSize 2 and statusMessage array. ```json { "@context": ["https://www.w3.org/2018/credentials/v1"], "id": "urn:uuid:003a1dd8-a5d2-42ef-8182-e921c0a9e5av", "type": ["VerifiableCredential", "VerifiableAttestation"], "issuer": "did:ebsi:zyrMG8T9xYbNoSwyQa4SGMJ", "credentialSubject": { "id": "did:ebsi:00001235" }, "credentialStatus": [ { "id": "ebsi:issuers-registry:/issuers/did:ebsi:zyrMG8T9xYbNoSwyQa4SGMJ/proxies/0x1e15b7e8d430ae8c298a151c9d00fd7b2311d74648c22a336f637551b2545638/credentials/status/123#94567", "type": "BitstringStatusListEntry", "statusPurpose": "revocation", "statusListIndex": "94567", "statusListCredential": "ebsi:issuers-registry:/issuers/did:ebsi:zyrMG8T9xYbNoSwyQa4SGMJ/proxies/0x1e15b7e8d430ae8c298a151c9d00fd7b2311d74648c22a336f637551b2545638/credentials/status/123" }, { "id": "ebsi:issuers-registry:/issuers/did:ebsi:zyrMG8T9xYbNoSwyQa4SGMJ/proxies/0x1e15b7e8d430ae8c298a151c9d00fd7b2311d74648c22a336f637551b2545638/credentials/status/456#492847", "type": "BitstringStatusListEntry", "statusPurpose": "message", "statusListIndex": "492847", "statusSize": 2, "statusListCredential": "ebsi:issuers-registry:/issuers/did:ebsi:zyrMG8T9xYbNoSwyQa4SGMJ/proxies/0x1e15b7e8d430ae8c298a151c9d00fd7b2311d74648c22a336f637551b2545638/credentials/status/456", "statusMessage": [ { "status": "0x0", "message": "pending_review" }, { "status": "0x1", "message": "accepted" }, { "status": "0x2", "message": "rejected" }, { "status": "0x3", "message": "other" } ], "statusReference": "https://example.org/status-dictionary/" } ] } ``` -------------------------------- ### Get a DID document Source: https://hub.ebsi.eu/docs/onboarding/legal-entity/register-did Gets the DID document corresponding to the DID. For a detailed endpoint description, please check the documentation here: Get a DID document. ```APIDOC ## Get a DID document ### Description Gets the DID document corresponding to the DID. ### Endpoint Refer to the detailed documentation: Get a DID document ``` -------------------------------- ### Example did:key DID document Source: https://hub.ebsi.eu/docs/onboarding/natural-person/did-key-method Shows a complete did:key DID document with a JsonWebKey2020 verification method and related properties. The document is derived from a single public key in JWK format. ```json ---- ALICE ---- { '@context': [ 'https://www.w3.org/ns/did/v1', 'https://w3id.org/security/suites/jws-2020/v1' ], id: 'did:key:z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbsEYvdrjxMjQ4tpnje9BDBTzuNDP3knn6qLZErzd4bJ5go2CChoPjd5GAH3zpFJP5fuwSk66U5Pq6EhF4nKnHzDnznEP8fX99nZGgwbAh1o7Gj1X52Tdhf7U4KTk66xsA5r', verificationMethod: [ { id: 'did:key:z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbsEYvdrjxMjQ4tpnje9BDBTzuNDP3knn6qLZErzd4bJ5go2CChoPjd5GAH3zpFJP5fuwSk66U5Pq6EhF4nKnHzDnznEP8fX99nZGgwbAh1o7Gj1X52Tdhf7U4KTk66xsA5r#z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbsEYvdrjxMjQ4tpnje9BDBTzuNDP3knn6qLZErzd4bJ5go2CChoPjd5GAH3zpFJP5fuwSk66U5Pq6EhF4nKnHzDnznEP8fX99nZGgwbAh1o7Gj1X52Tdhf7U4KTk66xsA5r', type: 'JsonWebKey2020', controller: 'did:key:z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbsEYvdrjxMjQ4tpnje9BDBTzuNDP3knn6qLZErzd4bJ5go2CChoPjd5GAH3zpFJP5fuwSk66U5Pq6EhF4nKnHzDnznEP8fX99nZGgwbAh1o7Gj1X52Tdhf7U4KTk66xsA5r', publicKeyJwk: { crv: 'P-256', kty: 'EC', x: 'ngy44T1vxAT6Di4nr-UaM9K3Tlnz9pkoksDokKFkmNc', y: 'QCRfOKlSM31GTkb4JHx3nXB4G_jSPMsbdjzlkT_UpPc' } } ], authentication: [ 'did:key:z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbsEYvdrjxMjQ4tpnje9BDBTzuNDP3knn6qLZErzd4bJ5go2CChoPjd5GAH3zpFJP5fuwSk66U5Pq6EhF4nKnHzDnznEP8fX99nZGgwbAh1o7Gj1X52Tdhf7U4KTk66xsA5r#z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbsEYvdrjxMjQ4tpnje9BDBTzuNDP3knn6qLZErzd4bJ5go2CChoPjd5GAH3zpFJP5fuwSk66U5Pq6EhF4nKnHzDnznEP8fX99nZGgwbAh1o7Gj1X52Tdhf7U4KTk66xsA5r' ], assertionMethod: [ 'did:key:z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbsEYvdrjxMjQ4tpnje9BDBTzuNDP3knn6qLZErzd4bJ5go2CChoPjd5GAH3zpFJP5fuwSk66U5Pq6EhF4nKnHzDnznEP8fX99nZGgwbAh1o7Gj1X52Tdhf7U4KTk66xsA5r#z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbsEYvdrjxMjQ4tpnje9BDBTzuNDP3knn6qLZErzd4bJ5go2CChoPjd5GAH3zpFJP5fuwSk66U5Pq6EhF4nKnHzDnznEP8fX99nZGgwbAh1o7Gj1X52Tdhf7U4KTk66xsA5r' ], capabilityInvocation: [ 'did:key:z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbsEYvdrjxMjQ4tpnje9BDBTzuNDP3knn6qLZErzd4bJ5go2CChoPjd5GAH3zpFJP5fuwSk66U5Pq6EhF4nKnHzDnznEP8fX99nZGgwbAh1o7Gj1X52Tdhf7U4KTk66xsA5r#z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbsEYvdrjxMjQ4tpnje9BDBTzuNDP3knn6qLZErzd4bJ5go2CChoPjd5GAH3zpFJP5fuwSk66U5Pq6EhF4nKnHzDnznEP8fX99nZGgwbAh1o7Gj1X52Tdhf7U4KTk66xsA5r' ], capabilityDelegation: [ 'did:key:z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbsEYvdrjxMjQ4tpnje9BDBTzuNDP3knn6qLZErzd4bJ5go2CChoPjd5GAH3zpFJP5fuwSk66U5Pq6EhF4nKnHzDnznEP8fX99nZGgwbAh1o7Gj1X52Tdhf7U4KTk66xsA5r#z2dmzD81cgPx8Vki7JbuuMmFYrWPgYoytykUZ3eyqht1j9KbsEYvdrjxMjQ4tpnje9BDBTzuNDP3knn6qLZErzd4bJ5go2CChoPjd5GAH3zpFJP5fuwSk66U5Pq6EhF4nKnHzDnznEP8fX99nZGgwbAh1o7Gj1X52Tdhf7U4KTk66xsA5r' ] } ``` -------------------------------- ### Evidence (evidence) JSON Schema Example Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/data-models/define-data-model Shows the evidence property containing information about the process that resulted in the issuance of the Verifiable Attestation. ```json "evidence": { "id": "https://university.example/evidence/f2aeec97-fc0d-42bf-8ca7-0548192d4231", "type": ["DocumentVerification"], "verifier": "https://university.example/issuers/14", "evidenceDocument": "DriversLicense", "subjectPresence": "Physical", "documentPresence": "Physical", "licenseNumber": "123AB4567" } ``` -------------------------------- ### Credential Schema (credentialSchema) JSON Schema Example Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/data-models/define-data-model Shows the credentialSchema property that references a schema registered in the Schemas Registry. ```json "credentialSchema": { "id": "https://example.org/examples/degree.json", "type": "FullJsonSchemaValidator2021" } ``` -------------------------------- ### Registration validation request Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/trust-chains/credential-status-and-revocation/revocation-strategies GET request used during registration validation to verify the proxy configuration with the testSuffix. ```http GET https://localhost/my-provider/revocation/credentials/status/1 ``` -------------------------------- ### Verifier request to proxy Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/trust-chains/credential-status-and-revocation/revocation-strategies GET request executed by the verifier to the Issuers Registry proxy endpoint. ```http GET https://api-test.testnode02.ebsi.eu/v1/issuers-registry/issuers/did:ebsi:zyrMG8T9xYbNoSwyQa4SGMJ/proxies/0xf320c23d1b772dafdc45eec0f0e1a1bc456a283a786eb014078a5120b90451cf/credentials/status/5 ``` -------------------------------- ### Terms of Use (termsOfUse) JSON Schema Example Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/data-models/define-data-model Shows the termsOfUse property for conveying conditions under which a verifiable credential or presentation was issued. The issuer embeds terms of use within the credential, while the holder incorporates them within a presentation. ```json "termsOfUse": { "id": "https://{ebsi-host}/v1/issuers-registry/issuers/did:ebsi:zz...", "type": "IssuanceCertificate" } ``` -------------------------------- ### Credential Status (credentialStatus) JSON Schema Example Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/data-models/define-data-model Shows the credentialStatus property for discovering the current status of a verifiable credential (e.g., suspended or revoked). Only include this if revocation/suspension is piloted. ```json "credentialStatus": { "id": "https://example.edu/status/24", "type": "StatusList2021Entry", "statusPurpose": "revocation", "statusListIndex": "42" } ``` -------------------------------- ### Proxy executing request Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/trust-chains/credential-status-and-revocation/revocation-strategies GET request executed by the proxy to the issuer's endpoint. ```http GET https://localhost/my-provider/revocation/credentials/status/5 ``` -------------------------------- ### Identifier (id) JSON Schema Example Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/data-models/define-data-model Shows the optional 'id' property in the credentialSubject to uniquely identify an entity. The id is a globally unique identifier, typically a DID. ```json "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21" } ``` -------------------------------- ### Basic structure for credentialStatus and credentialSchema Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/trust-chains/credential-status-and-revocation/vc-extensions Shows the required structure for a revocable VC, including the credentialStatus property with status_entry_specific_content and an additional schema entry for validating the status properties. ```json { "credentialStatus": { // status_entry_specific_content }, "credentialSchema": [ { "id": "https://{ebsi-host}/v1/schemas-registry/schemas/[ORIGINAL_VC_SCHEMA]", "type": "FullJsonSchemaValidator2021" }, { "id": "https://{ebsi-host}/v1/schemas-registry/schemas/[STATUS_ENTRY_SCHEMA]", "type": "FullJsonSchemaValidator2021" } ] } ``` -------------------------------- ### writeEvent Source: https://hub.ebsi.eu/docs/services/verifiable-records-and-proofs/track-and-trace/create-tnt-doc Build the event transaction with the writeEvent method of the Track and Trace smart contract, then sign and submit it with eth_sendRawTransaction. ```APIDOC ## writeEvent ### Description Build the event transaction with the `writeEvent` method of the Track and Trace smart contract, then sign and submit it with the `eth_sendRawTransaction` method. ### Method writeEvent ### Parameters #### Arguments - **documentHash** (string) - Required - The hash of the document. - **externalHash** (string) - Required - The external hash. - **sender** (string) - Required - The sender address. - **origin** (string) - Required - The origin of the event. - **metadata** (string) - Required - The metadata of the event. - **timestamp** (string) - Optional - The external timestamp. - **timestampProof** (string) - Optional - The proof of the timestamp. ### Request Example { "documentHash": "0x...", "externalHash": "0x...", "sender": "0x...", "origin": "origin", "metadata": "my-metadata", "timestamp": "0x65920080", "timestampProof": "0xae3e3d2c20698c1ebf7888b3c965cf1f30834307b7396b966c9abc11996e13ef" } ### Response #### Success Response (200) - **transactionHash** (string) - The hash of the submitted transaction. #### Response Example { "transactionHash": "0x..." } ``` -------------------------------- ### Request access token Source: https://hub.ebsi.eu/docs/services/verifiable-records-and-proofs/track-and-trace/create-tnt-doc Request an access token to the authorisation API with the scope track-and-trace:write. Follow the Access Control flow: fetch the DCQL query and submit a presentation to obtain the token. ```APIDOC ## Request access token ### Description Request an access token to the authorisation API with the scope `track-and-trace:write`. ### Method GET ### Endpoint DCQL query endpoint ### Parameters #### Query Parameters - **scope** (string) - Required - The scope for the token, e.g., `openid track-and-trace:write`. ### Request Example GET /dcql-query?scope=openid%20track-and-trace%3Awrite ### Response #### Success Response (200) - **dcql_query** (object) - The DCQL query for the scope. #### Response Example { "dcql_query": {} } --- ## POST Token endpoint ### Description Submit a presentation answering the DCQL query to obtain the access token. ### Method POST ### Endpoint Token endpoint ### Parameters #### Request Body - **presentation** (object) - Required - The presentation answering the DCQL query. ### Request Example { "presentation": {} } ### Response #### Success Response (200) - **access_token** (string) - The access token. #### Response Example { "access_token": "eyJhbGciOi..." } ``` -------------------------------- ### List identifiers Source: https://hub.ebsi.eu/docs/onboarding/legal-entity/register-did Returns a list of identifiers. For a detailed endpoint description, please check the documentation here: List identifiers. ```APIDOC ## List identifiers ### Description Returns a list of identifiers. ### Endpoint Refer to the detailed documentation: List identifiers ``` -------------------------------- ### Validate VC registration Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/trust-chains/credential-status-and-revocation/revocation-strategies HEAD request to validate that the VC is registered. ```http HEAD https://api-test.testnode02.ebsi.eu/v1/issuers-registry/issuers/did:ebsi:zyrMG8T9xYbNoSwyQa4SGMJ/proxies/0xf320c23d1b772dafdc45eec0f0e1a1bc456a283a786eb014078a5120b90451cf ``` -------------------------------- ### List events Source: https://hub.ebsi.eu/docs/services/verifiable-records-and-proofs/track-and-trace/create-tnt-doc List the document's events with the List events endpoint. ```APIDOC ## GET /v1/track-and-trace/documents/{documentId}/events ### Description List the events of a specific document. ### Method GET ### Endpoint /v1/track-and-trace/documents/{documentId}/events ### Parameters #### Path Parameters - **documentId** (string) - Required - The identifier of the document. ### Response #### Success Response (200) - **events** (array) - List of events. #### Response Example { "events": [ { "metadata": "my-metadata", "timestamp": { "datetime": "0x65920080", "source": "external", "proof": "0xae3e3d2c20698c1ebf7888b3c965cf1f30834307b7396b966c9abc11996e13ef" }, "creator": "did:ebsi:zkrLJ5WyqiHbiXjur3TqzfA" } ] } ``` -------------------------------- ### Verifiable ID (Natural Person) JSON Schema Source: https://hub.ebsi.eu/docs/services/trust-chains-and-trusted-issuers/data-models/define-schema JSON Schema for an EBSI Verifiable ID for a natural person. It references the EBSI attestation schema and defines required properties for the credential subject, including id, familyName, firstName, dateOfBirth, and personalIdentifier. Use this as a template for publishing schemas on EBSI. ```json { "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "EBSI Natural Person Verifiable ID", "description": "Schema of an EBSI Verifiable ID for a natural person", "type": "object", "allOf": [ { "$ref": "../../../ebsi-attestation/2022-11/schema.json" }, { "properties": { "credentialSubject": { "description": "Defines additional information about the subject that is described by the Verifiable ID", "type": "object", "properties": { "id": { "description": "Defines the DID of the subject that is described by the Verifiable Attestation", "type": "string", "format": "uri" }, "familyName": { "description": "Defines current family name(s) of the credential subject", "type": "string" }, "firstName": { "description": "Defines current first name(s) of the credential subject", "type": "string" }, "dateOfBirth": { "description": "Defines date of birth of the credential subject", "type": "string", "format": "date" }, "personalIdentifier": { "description": "Defines the unique national identifier of the credential subject (constructed by the sending Member State in accordance with the technical specifications for the purposes of cross-border identification and which is as persistent as possible in time)", "type": "string" }, "nameAndFamilyNameAtBirth": { "description": "Defines the first and the family name(s) of the credential subject at the time of their birth", "type": "string" }, "placeOfBirth": { "description": "Defines the place where the credential subject is born", "type": "string" }, "currentAddress": { "description": "Defines the current address of the credential subject", "type": "string" }, "gender": { "description": "Defines the gender of the credential subject", "type": "string" } }, "required": [ "id", "familyName", "firstName", "dateOfBirth", "personalIdentifier" ] } } } ] } ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.