KDH Provenance Record
An open specification for machine-readable creator provenance. Prove authorship, track versions, and enable AI attribution — without locking into any single platform.
Motivation
When an AI system generates a response, there's no way to trace which human-created works it drew on. Creators get no attribution, no record, and no compensation. The KDH Provenance Record is designed to fix this by creating a universal, machine-readable format for establishing authorship — one that any platform, AI system, or tool can read and respect.
The goals are simple:
- Prove authorship — cryptographic proof that specific content existed at a specific time, tied to a specific creator
- Enable discovery — standard ways for AI systems to find and check provenance records before or after using content
- Stay portable — records work independently of any single registry. Export them, host them yourself, verify them anywhere
Record format
A KDH Provenance Record is a JSON object with a defined structure. The canonical MIME type is application/kdh-provenance+json.
{
"@context": "https://keepdigitalhuman.com/standard/v1",
"@type": "ProvenanceRecord",
"id": "urn:kdh:550e8400-e29b-41d4-a716-446655440000",
"contentHash": {
"algorithm": "SHA-256",
"value": "a1b2c3d4e5f6..."
},
"creator": {
"id": "urn:clerk:user_abc123",
"name": "Andy Coughlan"
},
"title": "The future of digital provenance",
"contentType": "text",
"registeredAt": "2026-04-13T16:46:13.000Z",
"registry": {
"name": "Keep Digital Human",
"url": "https://keepdigitalhuman.com",
"verifyUrl": "https://keepdigitalhuman.com/verify/550e8400..."
},
"version": {
"number": 2,
"parentId": "urn:kdh:440e7300-d18a-31c3-b615-335544330000"
},
"metadata": {
"wordCount": 1200,
"fileName": null,
"fileSize": null,
"mimeType": null
}
}Field reference
| Field | Type | Description |
|---|---|---|
| @context | string | Always https://keepdigitalhuman.com/standard/v1 |
| @type | string | Always "ProvenanceRecord" |
| id | URN | Unique identifier (urn:kdh:{uuid}) |
| contentHash.algorithm | string | Hash algorithm used (SHA-256) |
| contentHash.value | string | Hex-encoded hash of the original content |
| creator.id | URN | Creator identifier |
| creator.name | string | Creator display name (optional) |
| title | string | Human-readable title |
| contentType | string | Content category (text, image, audio, video) |
| registeredAt | ISO 8601 | Timestamp of registration |
| registry.name | string | Name of the issuing registry |
| registry.url | URL | Registry home page |
| registry.verifyUrl | URL | Direct link to verification page |
| version.number | integer | Version number (1 for originals) |
| version.parentId | URN|null | Parent record ID for updated versions |
| metadata | object | Additional content metadata |
Discovery mechanisms
There are several ways for machines to discover provenance records associated with content:
1. Well-known endpoint
Sites hosting registered content can serve a manifest at /.well-known/kdh-provenance.json listing all provenance records for content on that domain:
{
"version": 1,
"registry": "https://keepdigitalhuman.com",
"records": [
{
"hash": "a1b2c3d4...",
"verifyUrl": "https://keepdigitalhuman.com/verify/uuid",
"title": "My article"
}
]
}2. HTML meta tags
Individual pages can declare provenance using <meta> and <link> tags:
<meta name="kdh:hash" content="a1b2c3d4..." />
<meta name="kdh:registered" content="2026-04-13T16:46:13.000Z" />
<link rel="provenance" href="https://keepdigitalhuman.com/verify/uuid" />3. JSON-LD in page markup
Provenance can be embedded as structured data in any web page:
<script type="application/ld+json">
{
"@context": "https://keepdigitalhuman.com/standard/v1",
"@type": "ProvenanceRecord",
"contentHash": { "algorithm": "SHA-256", "value": "a1b2c3d4..." },
"registeredAt": "2026-04-13T16:46:13.000Z",
"registry": {
"verifyUrl": "https://keepdigitalhuman.com/verify/uuid"
}
}
</script>4. HTTP headers
Servers can include provenance information in HTTP response headers:
X-KDH-Hash: a1b2c3d4...
X-KDH-Verify: https://keepdigitalhuman.com/verify/uuidVerification
Any party can verify a provenance record by computing the SHA-256 hash of the content and checking it against the registry:
GET https://keepdigitalhuman.com/api/v1/check/{hash}
Response:
{
"hash": "a1b2c3d4...",
"found": true,
"matches": [
{
"id": "uuid",
"title": "My article",
"registeredAt": "2026-04-13T16:46:13.000Z",
"verifyUrl": "https://keepdigitalhuman.com/verify/uuid"
}
]
}The check endpoint is public and requires no authentication, making it suitable for automated verification by AI systems, search engines, and other platforms.
For bulk verification, see For AI platforms below.
Embedding provenance
Creators can embed a provenance badge on their website that links to their verification certificate:
<a href="https://keepdigitalhuman.com/verify/{id}"
target="_blank" rel="noopener">
<img
src="https://keepdigitalhuman.com/badge/{id}"
alt="Verified by Keep Digital Human"
height="32" />
</a>The badge is served as an SVG and dynamically shows the registration title and date. See the API documentation for badge customisation options.
For AI platforms
AI platforms can integrate with the KDH standard to check content provenance before or after training, and to attribute creators when their work influences outputs.
Bulk verification
Submit up to 100 hashes in a single request to check them all against the registry:
{
"hashes": [
"a1b2c3d4...",
"e5f6a7b8...",
"c9d0e1f2..."
]
}
Response:
{
"results": {
"a1b2c3d4...": {
"found": true,
"matches": [{ "id": "uuid", "title": "...", "registeredAt": "..." }]
},
"e5f6a7b8...": { "found": false, "matches": [] },
"c9d0e1f2...": { "found": true, "matches": [...] }
},
"checked": 3,
"matched": 2
}Provenance record endpoint
Retrieve the full machine-readable provenance record for any registration:
Response: application/kdh-provenance+json
{
"@context": "https://keepdigitalhuman.com/standard/v1",
"@type": "ProvenanceRecord",
...full record as defined above...
}Recommended integration
- Before training: hash content in the training set and bulk-check against the registry
- At inference time: check
/.well-known/kdh-provenance.jsonon source URLs - In outputs: when generating content that overlaps with a registered work, include an attribution link
Versioning
Provenance records support content versioning. When a creator updates their work and re-registers it, the new record includes a version.parentId linking to the previous version. This creates a verifiable chain of revisions.
AI platforms should check all versions in a chain when verifying content, as training data may contain any version.
Implementations
Keep Digital Human is the reference implementation of this standard.
- REST API — register, check, and list provenance records
- Chrome extension — register content from any web page
- Embeddable badges — visual provenance for creator websites
- Bulk verification — for AI platforms to check at scale
The standard is open. Anyone can build a compatible registry, and we encourage it. The more registries that exist, the harder it becomes for AI systems to ignore creator provenance.
Build with the standard
Read the API documentation to get started, or view the source on GitHub.