AIPM 1.1 Specification
AI Provenance Mark · Version 1.1 · Published May 2026
Overview
The AI Provenance Mark (AIPM) is an open, vendor-neutral specification for disclosing AI involvement in content creation. It is intentionally minimal, web-native, and extensible.
AIPM 1.1 adds compression, Show mode, Unicode support, Content URL and Full Context Document URL fields, and switches to hash-fragment URLs for improved privacy and caching. It is fully backwards compatible with AIPM 1.0 — existing QR codes continue to work unchanged.
Core Concept
AIPM combines three elements:
- A stable visual mark centered within a QR code.
- A QR code encoding an HTTPS URL with provenance metadata in the hash fragment.
- A human-readable provenance page that renders the metadata client-side — no server lookup required.
URL Schema
AIPM 1.1 encodes all metadata in the URL hash fragment (#).
Hash fragments are processed entirely by the browser; they are never sent to any server.
This improves privacy and allows the display page to be cached aggressively regardless of
how many unique QR codes exist.
Plain (uncompressed) format
https://ai-pm.pages.dev/1.1/aipm/#v=1.1&model=Claude+Sonnet+4.6&role=prompted%2Breviewed&date=2026-05-02&ctx=Blog+post+draft
Compressed format
When context exceeds ~200 characters, the generator automatically switches to
the compressed z param. All metadata is packed into a single JSON object,
compressed with deflate-raw, and encoded as base64url.
https://ai-pm.pages.dev/1.1/aipm/#z=<base64url-encoded-compressed-payload>
Parameters
| Param | Description | Required | New in 1.1 |
|---|---|---|---|
v |
AIPM version — must be 1.1 |
Yes | |
model |
AI model or system name (e.g. Claude Sonnet 4.6, GPT-4o) |
Recommended | |
role |
Human role — see values below | Yes | |
date |
ISO 8601 date of generation (YYYY-MM-DD) |
Recommended | |
ctx |
Short context or purpose description (plain text, ≤200 chars before auto-compression) | Optional | |
z |
Compressed payload — deflate-raw compressed, base64url-encoded JSON containing all fields. Mutually exclusive with individual params. | Optional | ✅ |
show |
Show mode flag — 1 when the QR mark displays an abbreviated role on line 3 |
Optional | ✅ |
src |
Content URL — link to the artifact this AIPM mark applies to | Optional | ✅ |
doc |
Full Context Document URL — link to a hosted document with full provenance detail (prompt, methodology, session log). Choose durable hosting. | Optional | ✅ |
Role Values
| Value | Show abbrev. | Description |
|---|---|---|
prompted | P | Human wrote the prompt; AI generated content; no modification. |
reviewed | R | AI generated content; human reviewed before use. |
edited | E | AI generated content; human made substantive edits. |
prompted+reviewed | P+R | Human wrote the prompt and reviewed the AI output. |
prompted+edited | P+E | Human wrote the prompt and edited the AI output. |
supervised | S | AI worked autonomously under human oversight and direction. |
Show Mode
Show mode is an optional feature that embeds an abbreviated human role directly in the QR code's center mark, making the level of AI and human involvement visible at a glance without scanning.
When Show mode is active, the center mark displays three lines:
AIPM ← line 1: mark identifier (unchanged) 1.1 S ← line 2: version + "S" (Show mode indicator) P+R ← line 3: abbreviated human role
Show mode is indicated by show=1 in the URL. The display page shows a "S · P+R"
badge next to the AIPM version badge when Show mode is active.
See the Visual Mark Specification for SVG downloads of all Show mode variants.
Compression
The generator automatically switches from individual params to the compressed z
param when the context field exceeds ~200 characters. The z value is produced by:
- Serializing all metadata as a JSON object
- Encoding the JSON string to UTF-8 bytes using
TextEncoder - Compressing with
CompressionStream('deflate-raw')(browser-native, no library) - Encoding the compressed bytes as base64url (URL-safe base64:
+→-,/→_, no padding)
The display page reverses this process using DecompressionStream('deflate-raw')
and TextDecoder. The display page checks for z first, then falls back
to individual params — ensuring full backwards compatibility with AIPM 1.0 QR codes.
QR Code Capacity
The hard limit is 1,273 bytes for QR Version 40 at Level H error correction (required for logo overlay). All other URL limits — browser, CDN, server — are far above this.
| Mode | English prose | CJK (Chinese/Japanese/Korean) |
|---|---|---|
Uncompressed (ctx) |
~1,160 chars | ~128 chars |
Compressed (z) |
~2,100–2,600 chars | ~400–580 chars |
Compressed capacity depends on content compressibility. English prose typically compresses at 2.5–3×.
CJK text is 3 UTF-8 bytes per character and compresses at 1.5–2×.
For content that exceeds QR capacity, use the doc param to link to a hosted full-context document.
Unicode Support
AIPM 1.1 explicitly supports UTF-8 in all fields — model names, context, URLs, and document content.
All text is encoded via TextEncoder before compression, ensuring correct handling of
non-Latin scripts including CJK, Arabic, Devanagari, and emoji.
Note that non-ASCII characters in uncompressed URLs are percent-encoded, which reduces effective character capacity significantly (3 bytes per CJK character becomes 9 bytes in the URL). Compression largely mitigates this — non-Latin users should prefer the compressed path.
Hosting and Deployment
AIPM is designed for static global hosting with no backend. The reference implementation
at ai-pm.pages.dev runs on Cloudflare Pages. All provenance data lives in the URL —
there is no database, no server-side processing, and no user tracking.
For the doc and src URL params, choose hosting for longevity:
- Your own Cloudflare Pages or GitHub Pages — most durable
- GitHub Gist — free, extremely durable, secret gists are unlisted
- rentry.co — no account, custom slugs, markdown
Avoid anonymous URL shorteners — they cannot be edited and carry link rot risk.
Versioning
The AIPM mark's visual identity is stable across versions — the same rounded square, bold type, and AIPM identifier. The version number on line 2 of the mark reflects the spec version used to generate it. AIPM 1.1 introduces an optional Show mode third line; this is additive and does not affect how 1.0 marks appear or scan. Future versions may add further optional elements without changing the core mark identity.
The path structure (/1.0/, /1.1/) ensures existing QR codes never
break — each version's URLs are frozen permanently.
Using AI to Generate AIPM Marks
You can instruct an AI model to automatically generate an AIPM QR code URL whenever it produces final output. Copy the prompt snippet below into your AI tool's system prompt or project instructions.
When you produce a final deliverable (document, post, report, code, or other substantive output), append an AIPM 1.1 provenance URL at the end. Use this format: https://ai-pm.pages.dev/1.1/aipm/#v=1.1&model=[MODEL]&role=prompted&date=[DATE]&ctx=[BRIEF_DESCRIPTION] Replace [MODEL] with your model name, [DATE] with today's date in YYYY-MM-DD format, and [BRIEF_DESCRIPTION] with a short URL-encoded description of the content (e.g. Blog+post+about+climate+policy). The human role should be prompted by default. If the human has indicated another role, use that instead. Use %2B to encode the + character in the URL.
For longer context, consider having the AI use the generator page directly: ai-pm.pages.dev/1.1/generate/
Accessibility
AIPM provenance pages are standard HTML with semantic structure. The provenance card uses label/value pairs rendered as plain text elements, which screen readers handle naturally — every field is readable in document order without any special ARIA markup required.
All interactive elements on the display page — "Try it" links, the "Copy context" button, and the "Update this mark" link — are standard HTML anchors and buttons, fully keyboard accessible and compatible with assistive technology without JavaScript-only interaction patterns.
Compressed URLs (z param) are fully transparent to assistive technology.
The page renders identically whether data arrived compressed or as plain params — by the time
the page is presented to the user, all data has been decoded into the same plain text elements.
The QR mark itself is a visual medium and cannot convey information to users who cannot see or scan it. AIPM addresses this in two ways: the generator page always displays the full provenance URL as copyable text, and the provenance page is always reachable directly via that URL — no QR scan required. The updated notice text on the display page reflects this: "This page was reached by scanning an AIPM QR code or following an AIPM URL."
The QR mark image, when embedded in a document, should be given meaningful alt text by the
creator — for example: alt="AI Provenance Mark QR code — scan or visit [URL] for details".
The AIPM spec recommends including the provenance URL as visible text near the mark wherever
the medium allows, so that the disclosure is accessible regardless of QR scanning capability.
Comparison: AIPM vs C2PA
| C2PA / Content Credentials | AIPM 1.1 | |
|---|---|---|
| Verification | Cryptographic (tamper-evident) | Declaration (trust-based) |
| Setup | SDK, certificates, platform support | Zero — just fill in a form |
| Works on | Images, video, audio | Any content including print |
| Survives export/print | Often stripped | QR is visual — always survives |
| For whom | Platforms, publishers | Individuals, academics, small teams |
| Privacy | Metadata in file/platform | Metadata in URL hash — never logged |