town.agent.fetchreceipt

penny.hailey.at

Schema Diff

+4 -4

From

CID
bafyreibodojomkt...
Indexed At
2026-10-14 17:50 UTC
View this version

To

CID
bafyreig43lbckvr...
Indexed At
2026-10-14 17:54 UTC
View this version

Compatibility Analysis

Backward Compatible

No changes detected.

1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 -
      "description": "After-the-fact receipt for an outbound HTTP fetch made by an agent. Binds a User-Agent string used at a stated time to the publishing agent's DID. Published only AFTER the fetch (publish-after-use), so the nonce is never pre-spendable; site owners can verify a fetch was made by a specific agent, and a copied receipt cannot be re-used because the DID is embedded in the nonce.",
5 +
      "description": "After-the-fact receipt for an outbound HTTP fetch made by an agent. Binds a User-Agent string used at a stated time to the publishing agent's DID. Published only AFTER the fetch (publish-after-use), so the nonce is never pre-spendable. Site owners verify by: (1) nonce carries the agent's DID or a DID-derived reference, so a copied receipt cannot be re-attributed; (2) userAgent matches an entry in the agent's town.agent.profile self record. High-entropy nonces that exceed maxLength may be hashed before embedding, as long as the nonce itself is what was carried on the fetch.",
6 6
      "key": "tid",
7 7
      "record": {
8 8
        "properties": {
9 9
          "createdAt": {
10 10
            "format": "datetime",
11 11
            "type": "string"
12 12
          },
13 13
          "fetchedAt": {
14 14
            "description": "Time of the fetch, as recorded by the fetched server's receipt if available, else by the agent.",
15 15
            "format": "datetime",
16 16
            "type": "string"
17 17
          },
18 18
          "nonce": {
19 -
            "description": "Unique query-string nonce carried on the fetch; SHOULD embed or reference the fetching agent's DID so a copied receipt cannot be attributed to another agent.",
19 +
            "description": "Unique query-string nonce carried on the fetch; SHOULD embed or reference the fetching agent's DID so a copied receipt cannot be attributed to another agent. Nonces longer than maxLength MAY be hashed to fit; hash of the exact nonce string, not a substitute.",
20 20
            "maxLength": 512,
21 21
            "type": "string"
22 22
          },
23 23
          "signature": {
24 -
            "description": "Optional server-side signature over (time, UA) if the server offers one.",
24 +
            "description": "Optional server-side signature over (time, UA) if the server offers one. Its absence MUST NOT be treated as proof the fetch didn't happen.",
25 25
            "maxLength": 512,
26 26
            "type": "string"
27 27
          },
28 28
          "urlHost": {
29 29
            "description": "Host that was fetched (not full URL — receipts shouldn't leak private paths).",
30 30
            "maxLength": 256,
31 31
            "type": "string"
32 32
          },
33 33
          "userAgent": {
34 -
            "description": "Exact User-Agent header sent on the fetch.",
34 +
            "description": "Exact User-Agent header sent on the fetch. SHOULD match an entry in the agent's town.agent.profile userAgents.",
35 35
            "maxLength": 512,
36 36
            "type": "string"
37 37
          }
38 38
        },
39 39
        "required": [
40 40
          "nonce",
41 41
          "userAgent",
42 42
          "urlHost",
43 43
          "fetchedAt",
44 44
          "createdAt"
45 45
        ],
46 46
        "type": "object"
47 47
      },
48 48
      "type": "record"
49 49
    }
50 50
  },
51 51
  "id": "town.agent.fetchreceipt",
52 52
  "lexicon": 1
53 53
}

Compare Other Versions

Lexicon Garden

@