# Entity Metadata

The metadata of an entity is represented as a JSON file that conforms to a specific schema. This data is typically retrieved using a P2P storage system like IPFS.

The metadata of an entity provides human readable content, featuring names, descriptions, images, the list of available processes and more.

# JSON schema

To fetch the metadata of an entity, client applications are expected to fetch the value of the ENS Text Record vnd.vocdoni.meta, which contains a Content URI.

The Content URI is expected to point to a JSON file, conforming to the following schema:

  "version": "1.0",
  // The first language in the list is the default one
  // Use "default" or https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
  "languages": ["en", "fr"],
  "name": {
    "en": "Free Republic of Liberland",
    "fr": "République Libre de Liberland"
  "description": {
    "en": "In a sovereign state...",
    "fr": "Dans un état souverain..."
  "votingProcesses": {
    "active":["0x987...","0x876..."], // Process ID of the active votes
    "ended":["0x887...","0x886..."]   // Process ID of the ended votes
  "newsFeed": {  // Unused, subject to revision
    "en": "ipfs://34567,https://hipsterpixel.co/feed.json",
    "fr": "ipfs://23456,https://feed2json.org/convert?url=http://www.intertwingly.net/blog/index.atom"
  "media": {
    "avatar": "https://liberland.org/logo.png,ipfs://12345,ipfs://12345",
    "header": "https://liberland.org/header.png,ipfs://12345,ipfs://12345",
  "actions": [ <ActionSchema>, ... ], // Unused, subject to revision

  "bootEntities": [ <EntityReference>, ... ],  // Unused, subject to revision

  "fallbackBootNodeEntities": [ <EntityReference>, ... ],  // Unused, subject to revision
  "trustedEntities": [ <EntityReference>, ... ],  // Unused, subject to revision
  "censusServiceManagedEntities": [ <EntityReference>, ... ]  // Unused, subject to revision

Sequence diagrams:

# Register

Open a registration form within the client app.

    "type": "register",
    "actionKey": "sign-up",   // The name you give to identify the action

    "name": {
        "default": "Register",
        "fr": "S'inscrire"

    // The URL to POST the provided data to.
    // See the format below.
    "url": "https://census-registry.cloud/lambda/actions/",

    // Endpoint to query for the visibility (if dynamic).
    // Returning true will show the action and hide it otherwise.
    // See Action Visibility below.
    "visible": "https://census-registry.cloud/lambda/actions/"

    // "visible": "always"    (or make it always visible)

The body of the POST request submitted to url will contain a JSON body like:

  "request": {
    "method": "register",
    "actionKey": "sign-up",
    "entityId": "0xaabbccdd...",
    "firstName": "John",
    "lastName:": "Snow",
    "dateOfBirth": "2020-02-19T10:09:19.738Z",
    "email": "john@snow.me",
    "phone": "+1235678838",
    "timestamp": 1556110671
  "signature": "0x1234..." // The public key will be extracted from the signature

As this all happens through Gateway requests, signature is computed from the stringified JSON of request, where its keys are sorted alphabetically.

The response from the backend should look like like:

  "response": {
    "ok": true,
    // "error": "Something went wrong",  // Only if `ok` == false
    "timestamp": 1556110671
  "signature": "" // Empty until registry public keys are available
Last Updated: 8/5/2021, 8:36:13 AM