{
  "$id": "EDH3Q0MW6oCcwyYw2MN39n1YfPs37o1QEv86kB-fBzmh",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Citation",
  "description": "Formally reference non-ACDC content.",
  "type": "object",
  "credentialType": "citation",
  "version": "1.0.0",
  "required": [
    "v",
    "d",
    "i",
    "ri",
    "s",
    "a",
    "r"
  ],
  "properties": {
    "v": {
      "description": "Version string using ACDC conventions",
      "type": "string"
    },
    "d": {
      "description": "SAID of the citation",
      "type": "string"
    },
    "i": {
      "description": "Identifier of the issuer",
      "type": "string"
    },
    "ri": {
      "description": "Issuer's ACDC status registry",
      "type": "string"
    },
    "s": {
      "description": "SAID of this schema",
      "type": "string"
    },
    "a": {
      "$id": "ENgIQ-1GjPSnc3xcL-UfYDXkCTARdjLW9D3s_8xYWpyw",
      "description": "Attributes block",
      "type": "object",
      "required": [
        "d",
        "dt"
      ],
      "properties": {
        "d": {
          "description": "SAID of attributes block",
          "type": "string"
        },
        "dt": {
          "description": "Issuance date (when the ACDC was signed).",
          "format": "date-time",
          "type": "string"
        },
        "sdt": {
          "description": "Snapshot date: the moment at which the content reference and its associated metadata was published (or, if publication date is indeterminate, the moment when it was captured). This may precede the date of issuance. If omitted, it is assumed that sdt == dt.",
          "format": "date-time",
          "type": "string"
        },
        "des": {
          "description": "A human-friendly description of the content.",
          "type": "string",
          "examples": [
            "Photo of the left front bumper of vehicle 1 from collision: a 2018 Ford F-150 XLT"
          ]
        },
        "typ": {
          "description": "The IANA content type of the cited content. This may help a verifier decide whether and how to download and process content.",
          "type": "string",
          "examples": [
            "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
            "image/jpeg"
          ]
        },
        "lbl": {
          "description": "A convenient label or recommended filename for the content. This may help a verifier match the cited content to its metadata in an original context, but has no defined meaning with respect to how the ACDC is verified.",
          "type": "string",
          "examples": [
            "invoice-03-25-2022.docx",
            "Post on X on 25 July 2025"
          ]
        },
        "content": {
          "oneOf": [
            {
              "description": "A SAID for the content section. This is not the same as a SAID for the pure content bytes, because it treats the content as a base64url JSOn string, and includes in the hash input a salty nonce.",
              "type": "string",
              "examples": [
                "EK2r6EnDXre2pecTBO8s99j4OtNaaDIhVyr7uGugDhmp"
              ]
            },
            {
              "$id": "EFSLhiSLGmL-jp0sWcoDh2_05o4tO8dKJXY10EpXPjcT",
              "description": "content block",
              "type": "object",
              "required": [
                "d",
                "u",
                "cargo"
              ],
              "properties": {
                "d": {
                  "description": "SAID of attributes block",
                  "type": "string"
                },
                "u": {
                  "description": "A salty nonce",
                  "type": "string"
                },
                "cargo": {
                  "description": "Either the content itself, in base64url-encoded form, or a cryptographic identifier that indexes the content in a content-addressable way (e.g., its SAID, CESR-encoded hash, CID, or similar). Directly embedding content as cargo makes an ACDC standalone, which is a nice benefit -- and compact ACDCs can avoid the size/bandwidth penalty of shipping massive cargo. However, some content may already have a cryptographic identifier and a native storage location that's best left alone. In such cases, using the identifier as cargo is recommended.",
                  "type": "string"
                }
              }
            }
          ]
        },
        "siz": {
          "description": "The byte count of the content. Redundant and unnecessary (but MUST be correct if present) if cargo contains actual data. When cargo is compacted or contains only a cryptographic identifier, this may help a verifier evaluate how practical it is to fetch the content.",
          "type": "integer"
        },
        "loc": {
          "description": "A hint about where and/or how to locate the cited content. The issuer affirms a belief that this hint was useful at the time of issuance, but makes no guarantee that it will continue to locate the referenced content thereafter. If cargo contains only a cryptographic identifier, and this field is used to fetch content, verifiers MUST compare fetched content to the identifier in cargo, and MUST accept the content as what was referenced IFF that identifier and the content match; a discrepancy in such circumstances does not invalidate the ACDC, only the usefulness of this hint. Sharing content via loc is discouraged, as it is unstable and insecure. However, it is not formally deprecated, either, since some content is impractical to share in any other way. Could be a URL; an ISBN; a UPC; a DOI number; a Bluebook legal citation; an bibliographic reference in APA, MLA, Chicago, Harvard, ACM, BibTeX, or similar format; etc.",
          "type": "string",
          "examples": [
            "https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612"
          ]
        }
      }
    },
    "r": {
      "description": "SAID of rules block",
      "type": "string",
      "const": "EM6kWxMNL9BFm0ReegqQfNJLw8OZAfn2ZxcjWs4Ceifh",
      "format": "cesr"
    }
  },
  "additionalProperties": true
}