{"lexicon":1,"id":"money.atmosphere.payment.receipt","defs":{"main":{"type":"record","key":"tid","description":"EXPERIMENTAL DRAFT — not published; record name decided in NAMING_RFC.md. An immutable SETTLEMENT-EVIDENCE record for one settled payment, referencing one or more immutable money.atmosphere.payment.proof attestations (evidence of the settlement fact — not necessarily a tax invoice or accounting document). Byte-identical whether stored in the author's public repository or (in the future) a permissioned space; privacy is a storage/access property, never a schema difference. Author provenance is authenticated as defined by COMMITMENT_PROFILE.md; an agent performing a delegated write does not thereby become the author. Later refunds, disputes, or transfers never modify this record. This receipt alone never establishes current standing: when verifier policy designates a referenced proof as lifecycle-authoritative, present status comes from that proof's money.atmosphere.payment.lifecycle sidecar; otherwise any proof-final treatment must be an explicit verifier-policy decision. Verification is defined by COMMITMENT_PROFILE.md (profile money-atmosphere-v1).","record":{"type":"object","required":["recipient","value","transactionId","transactionIdAuthority","settledAt","nonce","proofs"],"properties":{"recipient":{"type":"string","format":"did","description":"DID of the party receiving the payment."},"value":{"type":"union","refs":["money.atmosphere.payment.defs#fiatMinor","money.atmosphere.payment.defs#assetAtomic"],"description":"The single authoritative value satisfied by this settlement: either fiat minor units or fungible-asset atomic units. It is the final commercial obligation after discounts and inclusive of charged tax, not necessarily the payer's tender or the recipient's payout currency. The wire union stays open for AT Protocol compatibility, but money-atmosphere-v1 semantically admits exactly these two tags; legacy top-level amount/currency fields and mixed or unknown variants are record-invalid under COMMITMENT_PROFILE.md."},"transactionId":{"type":"string","minLength":1,"maxLength":64,"description":"Opaque public transaction identifier scoped to `transactionIdAuthority`, unique within that authority's namespace per payment, for deduplication; money-atmosphere-v1 requires the exact full-match grammar ^[\\x21-\\x7E]{1,64}$ (visible printable ASCII with no spaces). Lexicon supplies only the byte-length boundary. Never a processor identifier, never a bearer or session token, and not a hiding secret (see `nonce`)."},"transactionIdAuthority":{"type":"string","format":"did","description":"DID whose namespace owns `transactionId`. Producers MUST commit the canonical authority for the accepted settlement, never a caller hint, and include at least one proof reference whose intended authenticated author DID AND proof-URI repository authority both equal this DID. This producer/business-binding rule is separate from stateless proof selection: a money.atmosphere.payment.verifyReceipt#attested result means a trusted proof attested the committed bytes; it does not by itself authenticate this field or claim or authorize the transaction-id binding. Before claiming that binding, a stateful consumer MUST verify at least one applicable, policy-designated proof whose authenticated author DID AND proof-URI repository authority both equal this DID. This field does not by itself designate that proof as a lifecycle authority; lifecycle treatment is an independent verifier-policy decision. Other proof authors or hosting authorities are witnesses only and gain no ownership of this namespace."},"settledAt":{"type":"string","format":"datetime","description":"UTC instant at which the canonical accepted-settlement authority asserts the settlement transition occurred (millisecond precision, Z suffix). Not the checkout-creation time and not the record-publication time."},"nonce":{"type":"string","minLength":32,"maxLength":32,"description":"Exactly 32 lowercase hexadecimal characters (implementations MUST enforce ^[0-9a-f]{32}$) encoding 128 bits that MUST be generated by a cryptographically secure random generator, once per payment, never derived from other fields, never reused. Committed with the record. The hiding property (a public proof reveals nothing about an unpublished record's existence) holds only against parties who do not know the nonce and is conditional on its uniform randomness and SHA-256 preimage resistance."},"proofs":{"type":"array","minLength":1,"maxLength":10,"items":{"type":"ref","ref":"com.atproto.repo.strongRef"},"description":"References to immutable money.atmosphere.payment.proof records in each attester's own repository. Each reference's URI authority identifies its attester, and every cid is the proof's canonical AT repository-record CID string (lowercase unpadded base32 CIDv1, DAG-CBOR, SHA-256/32). Required and fixed at creation: proofs are written FIRST, then the receipt referencing them; the receipt is never updated afterward. Excluded from the attestation commitment (stripped before hashing). V1 candidates are exactly the frozen references in this array. Any future later-attester design must use external discovery rather than editing this record; v1 defines no such discovery mechanism."},"entitlements":{"type":"array","minLength":1,"maxLength":100,"items":{"type":"ref","ref":"com.atproto.repo.strongRef"},"description":"Optional purchase-context strongRefs whose exact committed URI and CID values, when a verifier accepts a trusted proof for the receipt, are bound to the historical settlement assertion so an application can use them as purchase evidence after separately authenticating and validating each referenced record; the payment proof does not prove the target exists or authenticate its author, repository, schema, or meaning, does not make a handle authority durable, and the references are not live entitlement grants or bearer credentials (any lexicon). Every cid is the referenced record's canonical AT repository-record CID string (lowercase unpadded base32 CIDv1, DAG-CBOR, SHA-256/32). By themselves, these references never establish current, unconsumed, unexpired, or unrevoked access; an independent current entitlement authority or source of truth must make access decisions. Line-item detail (quantities, unit prices, per-item tax) is deliberately not public."}}}}}}