{
  "openapi": "3.1.1",
  "info": {
    "title": "C2PA Credentials Inspector API",
    "version": "1.0.0",
    "summary": "Read C2PA Content Credentials in images and videos: actions, AI hints, signer and signature.",
    "description": "Every endpoint performs the same calculation as the human page and returns inputs, result, units, assumptions, sources, warnings and computedAt. MCP endpoint: /mcp."
  },
  "servers": [
    {
      "url": "https://c2pacredentialsinspector.usefulweb.site"
    }
  ],
  "paths": {
    "/api/v1/calculate": {
      "post": {
        "operationId": "calculate",
        "summary": "Read C2PA Content Credentials in images and videos: actions, AI hints, signer and signature.",
        "description": "Upload an image or video and see its C2PA manifest store: claim generator, actions (created, edited, AI-generated digitalSourceType), ingredients, assertions and the signer certificate chain. The COSE signature over the claim, the assertion hashes and the JPEG/PNG/WebP data hash are verified offline; trust lists, revocation and time-stamps are not evaluated. XMP DigitalSourceType hints are read with ExifTool when available.\n\nMethodology:\n- The container is detected from the file bytes: JPEG APP11 segments (JPEG XT “JP” header, multi-segment reassembly per ISO 19566-5 D.2), the PNG caBX chunk, the RIFF C2PA chunk (WebP), the ISO BMFF uuid box D8FEC3D6-1B0E-483C-9297-5828877EC481 (MP4, MOV, HEIF, AVIF), or a standalone .c2pa JUMBF file.\n- JUMBF superboxes are parsed by their description boxes (type UUID + label); claims, assertions and the claim signature are decoded with our own CBOR decoder. The last manifest in the store is the active one; brotli-compressed manifests are expanded.\n- Verified offline: (1) each hashed URI in the claim against the hash of the referenced assertion superbox (contents without the superbox header); (2) the c2pa.hash.data hard binding over the file bytes outside the exclusion ranges; (3) the COSE_Sign1 signature (detached payload = claim CBOR, empty external_aad) with the x5chain signer certificate (ES256/384/512, PS256/384/512, Ed25519); (4) that each x5chain certificate is signed by the next one.\n- NOT evaluated: whether the signer chains to a trusted C2PA trust list, certificate revocation (OCSP), RFC 3161 time-stamps, BMFF/box hashes (c2pa.hash.bmff*, c2pa.hash.boxes: presence only), ingredient manifests’ own bindings and cloud/remote manifests. A valid signature therefore proves integrity and the signer key, not that the signer is trustworthy.\n- AI hints: digitalSourceType values such as trainedAlgorithmicMedia or compositeWithTrainedAlgorithmicMedia in c2pa.actions, training-mining assertions, and (with ExifTool) XMP Iptc4xmpExt:DigitalSourceType. Missing credentials do not mean an image is authentic or human-made.\n\nSignature validity is not trust: the signer’s certificate is not checked against a C2PA trust list. Absence of Content Credentials says nothing about authenticity.",
        "tags": [
          "security"
        ],
        "x-mcp-tool": "c2pa_credentials_inspector",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/C2paCredentialsInspectorInput"
              },
              "examples": {
                "example1": {
                  "summary": "Synthetic AI-generated JPEG with a signed manifest",
                  "value": {
                    "file": {
                      "filename": "demo.jpg",
                      "contentType": "image/jpeg",
                      "contentBase64": "/9j/6wmLSlAAAQAAAAEAAAmBanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAACVtqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjNmYmU4ZjRlLTBiNWMtNGU1OS05ZThjLTFkNmEyYjdjOWQwMQAAAALbanVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAABVGp1bWIAAAApanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5hY3Rpb25zLnYyAAAAASNjYm9yoWdhY3Rpb25zgqVmYWN0aW9ubGMycGEuY3JlYXRlZGR3aGVudDIwMjYtMTAtMDFUMTI6MDA6MDBabXNvZnR3YXJlQWdlbnSiZG5hbWVuRGVtbyBHZW5lcmF0b3JndmVyc2lvbmMxLjBxZGlnaXRhbFNvdXJjZVR5cGV4Rmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWFrZGVzY3JpcHRpb254HEdlbmVyYXRlZCBmcm9tIGEgdGV4dCBwcm9tcHSiZmFjdGlvbmxjMnBhLnJlc2l6ZWRkd2hlbnQyMDI2LTEwLTAxVDEyOjAwOjA1WgAAALRqdW1iAAAALGp1bWRjYm9yABEAEIAAAKoAOJtxA2MycGEuaW5ncmVkaWVudC52MgAAAACAY2JvcqRoZGM6dGl0bGVqc2tldGNoLnBuZ2lkYzpmb3JtYXRpaW1hZ2UvcG5nbHJlbGF0aW9uc2hpcGhwYXJlbnRPZmppbnN0YW5jZUlEeCx4bXA6aWlkOjdiMGY2ZjNlLTJmNDMtNGIxYy05ZDYyLTJkOWMxYTBlNWExMQAAAKJqdW1iAAAAKGp1bWRjYm9yABEAEIAAAKoAOJtxA2MycGEuaGFzaC5kYXRhAAAAAHJjYm9ypWpleGNsdXNpb25zgaJlc3RhcnQCZmxlbmd0aBkJjWRuYW1lbmp1bWJmIG1hbmlmZXN0Y2FsZ2ZzaGEyNTZkaGFzaFggPTsKWLT3wFfDVLCCjUFXaV/BfNivAgmBTvylRmNMVH1jcGFkQAAAAipqdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAAB+2Nib3Knamluc3RhbmNlSUR4LHhtcDppaWQ6NGExZThjNTItNjNhNC00ZDdlLWIyYTgtNWYwZjRjM2QyYjEwdGNsYWltX2dlbmVyYXRvcl9pbmZvomRuYW1leBt1c2VmdWx3ZWIgQzJQQSBkZW1vIGJ1aWxkZXJndmVyc2lvbmMxLjBoZGM6dGl0bGVoZGVtby5qcGdpZGM6Zm9ybWF0amltYWdlL2pwZWdpc2lnbmF0dXJleBlzZWxmI2p1bWJmPWMycGEuc2lnbmF0dXJlcmNyZWF0ZWRfYXNzZXJ0aW9uc4OiY3VybHgqc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5hY3Rpb25zLnYyZGhhc2hYINgW3ODdlZHLJLHnwDxoe1722/EMeR02Wyp+VXb5puEyomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52MmRoYXNoWCAd4gbpVNONf8xll5S47b6ciOD4e92bT9JJ8Ph3ebRJAaJjdXJseClzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmhhc2guZGF0YWRoYXNoWCDy0g/DqzMzLUileLa7ODFfVrUcIUiplraVSPOX+9ufZGNhbGdmc2hhMjU2AAAEB2p1bWIAAAAoanVtZGMyY3MAEQAQgAAAqgA4m3EDYzJwYS5zaWduYXR1cmUAAAAD12Nib3LShFkDhqIBJxghglkByDCCAcQwggF2oAMCAQICAiACMAUGAytlcDBPMQswCQYDVQQGEwJERTEhMB8GA1UECgwYRGVtbyBDb250ZW50IENyZWRlbnRpYWxzMR0wGwYDVQQDDBREZW1vIEMyUEEgSXNzdWluZyBDQTAeFw0yNjAxMDEwMDAwMDBaFw0yODAxMDEwMDAwMDBaMEYxCzAJBgNVBAYTAkRFMRcwFQYDVQQKDA51c2VmdWx3ZWIgZGVtbzEeMBwGA1UEAwwVRGVtbyBHZW5lcmF0b3IgU2lnbmVyMCowBQYDK2VwAyEAFVLRse+/VxVIaUCLYd3rRMZ371GRKuwX1tnVAF+T8EqjfzB9MAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQGCCsGAQUFBwMEBggrBgEFBQcDJDAdBgNVHQ4EFgQUmE59SpJN+jLKISMvjqvNGbeow+swHwYDVR0jBBgwFoAULzRxlOke8xLN2uw4bQPJ7di1OTYwBQYDK2VwA0EA7LD4cJalMrAl91LxYxPt933/t6CseQTHVtBbcWMkPGYcIgksf6jzy/NL+sSIdUgeL0XTY6FxasgpGgf/PUGxAlkBsjCCAa4wggFgoAMCAQICAiABMAUGAytlcDBJMQswCQYDVQQGEwJERTEhMB8GA1UECgwYRGVtbyBDb250ZW50IENyZWRlbnRpYWxzMRcwFQYDVQQDDA5EZW1vIEMyUEEgUm9vdDAeFw0yNTAxMDEwMDAwMDBaFw0zMzAxMDEwMDAwMDBaME8xCzAJBgNVBAYTAkRFMSEwHwYDVQQKDBhEZW1vIENvbnRlbnQgQ3JlZGVudGlhbHMxHTAbBgNVBAMMFERlbW8gQzJQQSBJc3N1aW5nIENBMCowBQYDK2VwAyEAvAsPkc7XlIl36bDBkKMX5LTEiLdl5rmtBwUeKLXDvCmjZjBkMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQvNHGU6R7zEs3a7DhtA8nt2LU5NjAfBgNVHSMEGDAWgBSOdhkWRDSfJ1tgRi0ljwDjW8/u2TAFBgMrZXADQQCxcLvrak6Y1ZlwdGc/wvTno0qlfBmW51/03uY0/YW/xKI0wpV+4wrGbAQ/8ToGsAr6m0aysqfsVF3E5IF1icEDoPZYQK8DfQyj9anVfJI5psgATwTLyOuv6xalZuJMFFcRqFdc7o3+iVTBlYmJtESjhsCB8DKhd+xTXgwD5UY2jPsDgQ7/4AAQSkZJRgABAQAAAAAAAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAACAAIDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAb/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFQEBAQAAAAAAAAAAAAAAAAAABgf/xAAUEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCCAWYOf//Z"
                    },
                    "useExiftool": false
                  }
                },
                "example2": {
                  "summary": "Synthetic PNG with a caBX manifest",
                  "value": {
                    "file": {
                      "filename": "demo.png",
                      "contentType": "image/png",
                      "contentBase64": "iVBORw0KGgoAAAANSUhEUgAAAAIAAAACAQMAAABIeJ9nAAAIcmNhQlgAAAhyanVtYgAAAB5qdW1kYzJwYQARABCAAACqADibcQNjMnBhAAAACExqdW1iAAAAR2p1bWRjMm1hABEAEIAAAKoAOJtxA3VybjpjMnBhOjNmYmU4ZjRlLTBiNWMtNGU1OS05ZThjLTFkNmEyYjdjOWQwMQAAAAIoanVtYgAAAClqdW1kYzJhcwARABCAAACqADibcQNjMnBhLmFzc2VydGlvbnMAAAABVGp1bWIAAAApanVtZGNib3IAEQAQgAAAqgA4m3EDYzJwYS5hY3Rpb25zLnYyAAAAASNjYm9yoWdhY3Rpb25zgqVmYWN0aW9ubGMycGEuY3JlYXRlZGR3aGVudDIwMjYtMTAtMDFUMTI6MDA6MDBabXNvZnR3YXJlQWdlbnSiZG5hbWVuRGVtbyBHZW5lcmF0b3JndmVyc2lvbmMxLjBxZGlnaXRhbFNvdXJjZVR5cGV4Rmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWFrZGVzY3JpcHRpb254HEdlbmVyYXRlZCBmcm9tIGEgdGV4dCBwcm9tcHSiZmFjdGlvbmxjMnBhLnJlc2l6ZWRkd2hlbnQyMDI2LTEwLTAxVDEyOjAwOjA1WgAAAKNqdW1iAAAAKGp1bWRjYm9yABEAEIAAAKoAOJtxA2MycGEuaGFzaC5kYXRhAAAAAHNjYm9ypWpleGNsdXNpb25zgaJlc3RhcnQYIWZsZW5ndGgZCH5kbmFtZW5qdW1iZiBtYW5pZmVzdGNhbGdmc2hhMjU2ZGhhc2hYICviiLcA3UoKWL3PF/GR0ikcOgEFd/o7e7MombIhq/TNY3BhZEAAAAHOanVtYgAAACdqdW1kYzJjbAARABCAAACqADibcQNjMnBhLmNsYWltLnYyAAAAAZ9jYm9yp2ppbnN0YW5jZUlEeCx4bXA6aWlkOjRhMWU4YzUyLTYzYTQtNGQ3ZS1iMmE4LTVmMGY0YzNkMmIxMHRjbGFpbV9nZW5lcmF0b3JfaW5mb6JkbmFtZXgbdXNlZnVsd2ViIEMyUEEgZGVtbyBidWlsZGVyZ3ZlcnNpb25jMS4waGRjOnRpdGxlaGRlbW8ucG5naWRjOmZvcm1hdGlpbWFnZS9wbmdpc2lnbmF0dXJleBlzZWxmI2p1bWJmPWMycGEuc2lnbmF0dXJlcmNyZWF0ZWRfYXNzZXJ0aW9uc4KiY3VybHgqc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5hY3Rpb25zLnYyZGhhc2hYINgW3ODdlZHLJLHnwDxoe1722/EMeR02Wyp+VXb5puEyomN1cmx4KXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaGFzaC5kYXRhZGhhc2hYIOH7W2SoHuvqSI0h+C3Nu8C2GkKFnHX4uCEfjODci1AjY2FsZ2ZzaGEyNTYAAAQHanVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAAAPXY2JvctKEWQOGogEnGCGCWQHIMIIBxDCCAXagAwIBAgICIAIwBQYDK2VwME8xCzAJBgNVBAYTAkRFMSEwHwYDVQQKDBhEZW1vIENvbnRlbnQgQ3JlZGVudGlhbHMxHTAbBgNVBAMMFERlbW8gQzJQQSBJc3N1aW5nIENBMB4XDTI2MDEwMTAwMDAwMFoXDTI4MDEwMTAwMDAwMFowRjELMAkGA1UEBhMCREUxFzAVBgNVBAoMDnVzZWZ1bHdlYiBkZW1vMR4wHAYDVQQDDBVEZW1vIEdlbmVyYXRvciBTaWduZXIwKjAFBgMrZXADIQAVUtGx779XFUhpQIth3etExnfvUZEq7BfW2dUAX5PwSqN/MH0wDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwQGCCsGAQUFBwMkMB0GA1UdDgQWBBSYTn1Kkk36MsohIy+Oq80Zt6jD6zAfBgNVHSMEGDAWgBQvNHGU6R7zEs3a7DhtA8nt2LU5NjAFBgMrZXADQQDssPhwlqUysCX3UvFjE+33ff+3oKx5BMdW0FtxYyQ8ZhwiCSx/qPPL80v6xIh1SB4vRdNjoXFqyCkaB/89QbECWQGyMIIBrjCCAWCgAwIBAgICIAEwBQYDK2VwMEkxCzAJBgNVBAYTAkRFMSEwHwYDVQQKDBhEZW1vIENvbnRlbnQgQ3JlZGVudGlhbHMxFzAVBgNVBAMMDkRlbW8gQzJQQSBSb290MB4XDTI1MDEwMTAwMDAwMFoXDTMzMDEwMTAwMDAwMFowTzELMAkGA1UEBhMCREUxITAfBgNVBAoMGERlbW8gQ29udGVudCBDcmVkZW50aWFsczEdMBsGA1UEAwwURGVtbyBDMlBBIElzc3VpbmcgQ0EwKjAFBgMrZXADIQC8Cw+RzteUiXfpsMGQoxfktMSIt2Xmua0HBR4otcO8KaNmMGQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFC80cZTpHvMSzdrsOG0Dye3YtTk2MB8GA1UdIwQYMBaAFI52GRZENJ8nW2BGLSWPAONbz+7ZMAUGAytlcANBALFwu+tqTpjVmXB0Zz/C9OejSqV8GZbnX/Te5jT9hb/EojTClX7jCsZsBD/xOgawCvqbRrKyp+xUXcTkgXWJwQOg9lhA1KTIwAcxXA74aOG8jwYcFUjjxBBA6OzC6IG4AgxN4OS/P4jDi/nMNbvEMS3iNSanULhfMGmPMDFuYzGhPM5ADUnIylMAAAADUExURQ+KX5aeRkMAAAAMSURBVAjXY2BgYAAAAAQAASc0JwoAAAAASUVORK5CYII="
                    },
                    "useExiftool": false
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Calculation result envelope.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/C2paCredentialsInspectorResult"
                }
              }
            }
          },
          "400": {
            "description": "Malformed JSON body.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "422": {
            "description": "Invalid input (see errors[]).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit exceeded (see Retry-After).",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/tool": {
      "get": {
        "operationId": "getToolDefinition",
        "summary": "Inputs, output schema and examples for this tool",
        "responses": {
          "200": {
            "description": "Tool definition.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details. 422 responses include per-field `errors`.",
        "required": [
          "type",
          "title",
          "status",
          "detail"
        ],
        "properties": {
          "type": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          },
          "code": {
            "type": "string"
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "field",
                "message"
              ],
              "properties": {
                "field": {
                  "type": "string"
                },
                "message": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "C2paCredentialsInspectorInput": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "file": {
            "title": "Image or video",
            "description": "JPEG, PNG, WebP, MP4/MOV, HEIF/AVIF or a .c2pa sidecar, up to 50 MB. Processed for this request only. Upload as {filename, contentType?, contentBase64}. Max 51200 KiB. Accepts .jpg,.jpeg,.png,.webp,.mp4,.m4v,.mov,.heic,.heif,.avif,.c2pa,image/jpeg,image/png,image/webp,video/mp4,video/quicktime,image/heic,image/avif.",
            "type": "object",
            "additionalProperties": false,
            "required": [
              "filename",
              "contentBase64"
            ],
            "properties": {
              "filename": {
                "type": "string"
              },
              "contentType": {
                "type": "string"
              },
              "contentBase64": {
                "type": "string"
              }
            }
          },
          "useExiftool": {
            "title": "Also read XMP/IPTC metadata hints with ExifTool (if installed)",
            "type": "boolean",
            "default": true
          }
        },
        "required": [
          "file"
        ]
      },
      "C2paCredentialsInspectorResult": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "schemaVersion",
          "tool",
          "computedAt",
          "inputs",
          "summary",
          "result",
          "units",
          "assumptions",
          "sources",
          "warnings",
          "presentation",
          "links"
        ],
        "properties": {
          "schemaVersion": {
            "type": "string",
            "const": "1.0"
          },
          "tool": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "id",
              "name",
              "version"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "version": {
                "type": "string"
              }
            }
          },
          "computedAt": {
            "type": "string",
            "format": "date-time"
          },
          "inputs": {
            "type": "object",
            "description": "Normalised inputs actually used, including applied defaults."
          },
          "summary": {
            "type": "string"
          },
          "result": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "format",
              "bytes",
              "remoteManifest",
              "manifestStoreFound",
              "manifestCount",
              "activeManifest",
              "manifests",
              "validation",
              "aiGenerated",
              "xmpHints",
              "exiftool",
              "boxTree"
            ],
            "properties": {
              "format": {
                "type": "string"
              },
              "bytes": {
                "type": "integer"
              },
              "manifestStoreFound": {
                "type": "boolean"
              },
              "manifestCount": {
                "type": "integer"
              },
              "activeManifest": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "manifests": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "label",
                    "active",
                    "manifestType",
                    "claimVersion",
                    "claimGenerator",
                    "claimGeneratorInfo",
                    "title",
                    "format",
                    "instanceId",
                    "alg",
                    "assertions",
                    "actions",
                    "ingredients",
                    "dataHash",
                    "hardBindings",
                    "signature",
                    "aiHints",
                    "claimJson"
                  ],
                  "properties": {
                    "label": {
                      "type": "string"
                    },
                    "active": {
                      "type": "boolean"
                    },
                    "manifestType": {
                      "type": "string"
                    },
                    "claimVersion": {
                      "type": "integer"
                    },
                    "claimGenerator": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "claimGeneratorInfo": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "title": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "format": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "instanceId": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "alg": {
                      "type": "string"
                    },
                    "assertions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "label",
                          "url",
                          "hashAlg",
                          "hashMatches",
                          "present",
                          "kind"
                        ],
                        "properties": {
                          "label": {
                            "type": "string"
                          },
                          "url": {
                            "type": "string"
                          },
                          "hashAlg": {
                            "type": "string"
                          },
                          "hashMatches": {
                            "type": [
                              "boolean",
                              "null"
                            ]
                          },
                          "present": {
                            "type": "boolean"
                          },
                          "kind": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "actions": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "action",
                          "when",
                          "softwareAgent",
                          "digitalSourceType",
                          "description"
                        ],
                        "properties": {
                          "action": {
                            "type": "string"
                          },
                          "when": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "softwareAgent": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "digitalSourceType": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "description": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        }
                      }
                    },
                    "ingredients": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "additionalProperties": false,
                        "required": [
                          "title",
                          "format",
                          "relationship",
                          "instanceId",
                          "manifest"
                        ],
                        "properties": {
                          "title": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "format": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "relationship": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "instanceId": {
                            "type": [
                              "string",
                              "null"
                            ]
                          },
                          "manifest": {
                            "type": [
                              "string",
                              "null"
                            ]
                          }
                        }
                      }
                    },
                    "dataHash": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "additionalProperties": false,
                      "required": [
                        "label",
                        "alg",
                        "exclusions",
                        "hash",
                        "matches",
                        "note"
                      ],
                      "properties": {
                        "label": {
                          "type": "string"
                        },
                        "alg": {
                          "type": "string"
                        },
                        "exclusions": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "start",
                              "length"
                            ],
                            "properties": {
                              "start": {
                                "type": "integer"
                              },
                              "length": {
                                "type": "integer"
                              }
                            }
                          }
                        },
                        "hash": {
                          "type": "string"
                        },
                        "matches": {
                          "type": [
                            "boolean",
                            "null"
                          ]
                        },
                        "note": {
                          "type": "string"
                        }
                      }
                    },
                    "hardBindings": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "signature": {
                      "type": "object",
                      "additionalProperties": false,
                      "required": [
                        "alg",
                        "certificates",
                        "signatureValid",
                        "signatureNote",
                        "timestamp",
                        "x5chainLocation"
                      ],
                      "properties": {
                        "alg": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "certificates": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": false,
                            "required": [
                              "subject",
                              "issuer",
                              "notBefore",
                              "notAfter",
                              "serialNumber",
                              "sha256",
                              "keyType",
                              "extKeyUsage",
                              "isCA",
                              "issuedByNext"
                            ],
                            "properties": {
                              "subject": {
                                "type": "string"
                              },
                              "issuer": {
                                "type": "string"
                              },
                              "notBefore": {
                                "type": "string"
                              },
                              "notAfter": {
                                "type": "string"
                              },
                              "serialNumber": {
                                "type": "string"
                              },
                              "sha256": {
                                "type": "string"
                              },
                              "keyType": {
                                "type": "string"
                              },
                              "extKeyUsage": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "isCA": {
                                "type": "boolean"
                              },
                              "issuedByNext": {
                                "type": [
                                  "boolean",
                                  "null"
                                ]
                              }
                            }
                          }
                        },
                        "signatureValid": {
                          "type": [
                            "boolean",
                            "null"
                          ]
                        },
                        "signatureNote": {
                          "type": "string"
                        },
                        "timestamp": {
                          "type": "boolean"
                        },
                        "x5chainLocation": {
                          "type": "string"
                        }
                      }
                    },
                    "aiHints": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "claimJson": {
                      "description": "The decoded claim (bytes shown as hex previews)"
                    }
                  }
                }
              },
              "validation": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "signature",
                  "assertionHashes",
                  "dataHash",
                  "certificateChain",
                  "trust"
                ],
                "properties": {
                  "signature": {
                    "type": "string",
                    "enum": [
                      "valid",
                      "invalid",
                      "not-checked",
                      "absent"
                    ]
                  },
                  "assertionHashes": {
                    "type": "string",
                    "enum": [
                      "all-match",
                      "mismatch",
                      "not-checked",
                      "absent"
                    ]
                  },
                  "dataHash": {
                    "type": "string",
                    "enum": [
                      "match",
                      "mismatch",
                      "not-checked",
                      "absent"
                    ]
                  },
                  "certificateChain": {
                    "type": "string",
                    "enum": [
                      "links-verified",
                      "broken",
                      "single-certificate",
                      "absent"
                    ]
                  },
                  "trust": {
                    "type": "string",
                    "enum": [
                      "not-evaluated"
                    ]
                  }
                }
              },
              "aiGenerated": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "true if the active manifest or XMP declares a trainedAlgorithmicMedia (generative AI) digital source type; false if another source type is declared; null if there is no information"
              },
              "remoteManifest": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "URL of a remote (cloud) manifest referenced via XMP dcterms:provenance"
              },
              "xmpHints": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "tag",
                    "value"
                  ],
                  "properties": {
                    "tag": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              },
              "exiftool": {
                "type": "string",
                "enum": [
                  "used",
                  "not-installed",
                  "disabled",
                  "failed"
                ]
              },
              "boxTree": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "assumptions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "title"
              ],
              "properties": {
                "title": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "publisher": {
                  "type": "string"
                },
                "retrievedAt": {
                  "type": "string"
                },
                "note": {
                  "type": "string"
                }
              }
            }
          },
          "warnings": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "presentation": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Display blocks used by the human page (same data)."
          },
          "links": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "human",
              "api",
              "openapi",
              "methodology"
            ],
            "properties": {
              "human": {
                "type": "string",
                "format": "uri"
              },
              "api": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "type": "string",
                "format": "uri"
              },
              "methodology": {
                "type": "string",
                "format": "uri"
              }
            }
          }
        }
      }
    }
  }
}