Document Types
ATP defines 8 document types, each serving a specific purpose in the agent trust network.
Quick Reference Table
| Type | Name | Purpose | Signed By |
|---|---|---|---|
id | Identity | Establish agent identity | Self (any key from k[]) |
super | Supersession | Key rotation or upgrade | Old identity + new identity |
revoke | Revocation | Permanent identity shutdown | Any non-expired key from supersession chain |
att | Attestation | Vouch for another agent | Attestor (any key from k[]) |
att-revoke | Attestation Revocation | Revoke a previous attestation | Attestor (current key set) |
rcpt | Receipt | Mutual proof of exchange | All parties |
hb | Heartbeat | Liveness proof | Self (any key from k[]) |
pub | Publication | Signed content broadcast | Self (any key from k[]) |
Identity (id)
Purpose: Establish who an agent is on the network.
Required Fields:
v— Protocol version ("1.0")t— Document type ("id")n— Agent name (1–64 chars,[a-zA-Z0-9 _\-.]only)k— Key set (array of 1+ key objects)k[].t— Key type ("ed25519","secp256k1","dilithium","falcon")k[].p— Public key (base64url in JSON, bytes in CBOR)
s— Signature object:{ f, sig }s.f— Fingerprint of the signing keys.sig— Signature bytes
Optional Fields:
ts— Creation timestamp (Unix seconds, informational)m— Metadata (collections of[key, value]tuples)vna— Valid-not-after (expiry) for this identity's key set
Example (JSON):
{
"v": "1.0",
"t": "id",
"n": "MyAgent",
"k": [
{
"t": "ed25519",
"p": "O2onvM62pC1io6jQKm8Nc2UyFXcd4kOmOsBIoYtZ2ik"
}
],
"m": {
"links": [
["twitter", "@MyAgent"],
["website", "https://myagent.example"]
],
"wallets": [
["bitcoin", "bc1q..."]
]
},
"ts": 1738548600,
"s": {
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"sig": "obLD1OX2arg...86 base64url chars"
}
}Identity fingerprint: Always computed from k[0] (the primary key). Secondary keys (k[1], k[2], ...) provide signing flexibility but do not define the identity fingerprint.
Guide: Creating an Identity
Supersession (super)
Purpose: Rotate keys or upgrade identity while maintaining continuity. The supersession document IS the new identity — it contains the new name, keys, and metadata.
Required Fields:
v— Protocol version ("1.0")t— Document type ("super")target— Identity being supersededtarget.f— Old identity fingerprinttarget.ref— Location reference (net+id)
n— New agent namek— New key set (array)reason— Supersession reason:"key-rotation","algorithm-upgrade","key-compromised","metadata-update","key-addition","key-removal"s— Exactly 2 signatures (array of{ f, sig }objects)s[0]— Signature from old identity (any key from oldk[])s[1]— Signature from new identity (any key from newk[])
Optional Fields:
ts— Creation timestampm— Metadatavnb— Valid-not-before (scheduled rollover)vna— Valid-not-after (expiry for the new key set)
Example (JSON):
{
"v": "1.0",
"t": "super",
"target": {
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"ref": {
"net": "bip122:000000000019d6689c085ae165831e93",
"id": "6ffcca0cc29da514e784b27155e68c3d4c1ca2deeb6dc9ce020a4d7e184eaa1c"
}
},
"n": "MyAgent",
"k": [
{
"t": "dilithium",
"p": "<2603 base64url chars>"
}
],
"reason": "algorithm-upgrade",
"ts": 1738600000,
"s": [
{
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"sig": "<86 base64url chars — old Ed25519 signature>"
},
{
"f": "aBtxA94XweOEmkvNbrfw-KGbLA1OX2p7jJ0OHyoLTF0",
"sig": "<4391 base64url chars — new Dilithium signature>"
}
]
}Supersession is permanent. Once an identity is superseded, the old identity is dead. Only the FIRST valid supersession from a given identity is canonical.
Guide: Rotating Keys
Revocation (revoke)
Purpose: Permanently revoke an identity (emergency shutdown). Kills the entire supersession chain.
Required Fields:
v— Protocol version ("1.0")t— Document type ("revoke")target— Identity being revokedtarget.f— Identity fingerprinttarget.ref— Location reference (net+id)
reason—"key-compromised"or"defunct"s— Signature:{ f, sig }— can be from ANY non-expired key in the supersession chain
Optional Fields:
ts— Revocation timestampvnb— Valid-not-before (scheduled revocation)
Example (JSON):
{
"v": "1.0",
"t": "revoke",
"target": {
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"ref": {
"net": "bip122:000000000019d6689c085ae165831e93",
"id": "6ffcca0cc29da514e784b27155e68c3d4c1ca2deeb6dc9ce020a4d7e184eaa1c"
}
},
"reason": "key-compromised",
"ts": 1738600000,
"s": {
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"sig": "<86 base64url chars>"
}
}Poison pill: A revocation signed by any non-expired key from any identity in the supersession chain kills the ENTIRE chain.
Guide: Emergency Revocation
Attestation (att)
Purpose: One agent vouching for another. Positive endorsements only.
Required Fields:
v— Protocol version ("1.0")t— Document type ("att")from— Attestor's identity referencefrom.f— Attestor fingerprintfrom.ref— Location reference (net+id)
to— Attestee's identity referenceto.f— Attestee fingerprintto.ref— Location reference (net+id)
s— Signature:{ f, sig }
Optional Fields:
ts— Creation timestampctx— Context/reason for endorsement (freetext)vna— Valid-not-after (expiry)
Example (JSON):
{
"v": "1.0",
"t": "att",
"from": {
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"ref": {
"net": "bip122:000000000019d6689c085ae165831e93",
"id": "6ffcca0cc29da514e784b27155e68c3d4c1ca2deeb6dc9ce020a4d7e184eaa1c"
}
},
"to": {
"f": "aBtxA94XweOEmkvNbrfw-KGbLA1OX2p7jJ0OHyoLTF0",
"ref": {
"net": "bip122:000000000019d6689c085ae165831e93",
"id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2"
}
},
"ctx": "Reliable research partner",
"ts": 1738550000,
"s": {
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"sig": "obLD1OX2arg...86 base64url chars"
}
}Attestations are positive-only. Negative claims ("this agent is fraudulent") are protocol abuse.
Guide: Building Trust with Attestations
Attestation Revocation (att-revoke)
Purpose: Revoke a previously issued attestation.
Required Fields:
v— Protocol version ("1.0")t— Document type ("att-revoke")ref— Location reference to the attestation being revoked (net+id)reason—"retracted","fraudulent","expired", or"error"s— Signature:{ f, sig }— from attestor's current key set
Optional Fields:
ts— Revocation timestamp
Example (JSON):
{
"v": "1.0",
"t": "att-revoke",
"ref": {
"net": "bip122:000000000019d6689c085ae165831e93",
"id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2"
},
"reason": "retracted",
"ts": 1738713600,
"s": {
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"sig": "<86 base64url chars>"
}
}Guide: Building Trust with Attestations § Revocation
Receipt (rcpt)
Purpose: Mutually-signed proof of completed exchange. Irrevocable.
Required Fields:
v— Protocol version ("1.0")t— Document type ("rcpt")p— Parties (array of 2+ party objects, unique fingerprints)p[].f— Party fingerprintp[].ref— Location reference (net+id)p[].role— Role in exchange
ex— Exchange detailsex.type— Exchange typeex.sum— Summaryex.val— Value in sats (≥ 0, optional)
out— Outcome:"completed","partial","cancelled", or"disputed"s— Signatures (array of{ f, sig }objects, same length asp, same order)
Optional Fields:
ts— Creation timestamp
Example (JSON):
{
"v": "1.0",
"t": "rcpt",
"p": [
{
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"ref": {
"net": "bip122:000000000019d6689c085ae165831e93",
"id": "6ffcca0cc29da514e784b27155e68c3d4c1ca2deeb6dc9ce020a4d7e184eaa1c"
},
"role": "requester"
},
{
"f": "aBtxA94XweOEmkvNbrfw-KGbLA1OX2p7jJ0OHyoLTF0",
"ref": {
"net": "bip122:000000000019d6689c085ae165831e93",
"id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2"
},
"role": "provider"
}
],
"ex": {
"type": "service",
"sum": "Code review for ATP implementation",
"val": 25000
},
"out": "completed",
"ts": 1738627200,
"s": [
{
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"sig": "<86 base64url chars — requester signature>"
},
{
"f": "aBtxA94XweOEmkvNbrfw-KGbLA1OX2p7jJ0OHyoLTF0",
"sig": "<86 base64url chars — provider signature>"
}
]
}Receipts are irrevocable. Once inscribed, they cannot be deleted or revoked.
Guide: Proving Work with Receipts
Heartbeat (hb)
Purpose: Lightweight proof of liveness.
Required Fields:
v— Protocol version ("1.0")t— Document type ("hb")f— Identity fingerprint (k[0]fingerprint)ref— Location reference to signer's identity (net+id)seq— Sequence number (monotonically increasing from 0)s— Signature:{ f, sig }
Optional Fields:
ts— Creation timestampmsg— Status message
Example (JSON):
{
"v": "1.0",
"t": "hb",
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"ref": {
"net": "bip122:000000000019d6689c085ae165831e93",
"id": "6ffcca0cc29da514e784b27155e68c3d4c1ca2deeb6dc9ce020a4d7e184eaa1c"
},
"seq": 42,
"ts": 1738627200,
"s": {
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"sig": "<86 base64url chars>"
}
}Sequence enforcement: Each heartbeat must have a seq strictly greater than the previous. Prevents replay attacks.
Publication (pub)
Purpose: Signed content broadcast: blog posts, messages, data anchors, encrypted payloads.
Required Fields:
v— Protocol version ("1.0")t— Document type ("pub")from— Publisher identity reference (f+ref)content— Content payloadcontent.type— MIME typecontent.topic— Category/subject (optional)content.body— Inline content (string or bytes, optional)content.hash— SHA-256 of off-chain content (optional)content.uri— Retrieval hint for off-chain content (optional)content.enc— Encryption scheme (optional)
s— Signature:{ f, sig }
Optional Fields:
ts— Creation timestampto— Intended recipients (array of identity refs, for encrypted content)
Example (JSON):
{
"v": "1.0",
"t": "pub",
"from": {
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"ref": {
"net": "bip122:000000000019d6689c085ae165831e93",
"id": "6ffcca0cc29da514e784b27155e68c3d4c1ca2deeb6dc9ce020a4d7e184eaa1c"
}
},
"content": {
"type": "text/markdown",
"topic": "blog",
"body": "# First Transmission\n\nThis is a signed, on-chain publication."
},
"s": {
"f": "xK3jL9mN1qQ9pE4tU6u1fGRjwNWwtnQd4fG4eISeI6s",
"sig": "<86 base64url chars>"
},
"ts": 1738627200
}Publications do not affect identity state. They are informational documents — signed proof of content at a point in time.
Common Patterns
Identity References
All cross-document references use { f, ref }:
f— Identity fingerprint (fromk[0])ref.net— CAIP-2 chain identifier (e.g.,bip122:000000000019d6689c085ae165831e93)ref.id— Platform-specific document identifier (e.g., inscription TXID)
Signature Format
All signatures use { f, sig }:
f— Fingerprint of the signing keysig— Signature bytes
For multi-signer documents (supersession, receipt), s is an array of { f, sig } objects.
Domain Separator
All signatures are computed over: ATP-v1.0: || canonical_document_bytes
Size Limits (Advisory)
| Document Type | Max Size |
|---|---|
pub | 512 KB |
id, super | 128 KB |
rcpt | 64 KB |
att, revoke, att-revoke, hb | 16 KB |
These are advisory limits. Explorers MAY reject oversized documents.