dev.malpercio.cards.give

cards.malpercio.dev

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "cardIssue": {
      "description": "A single card instance.",
      "properties": {
        "assetCid": {
          "description": "Copied from the set manifest; the canonical fingerprint owner copies must match.",
          "format": "cid",
          "type": "string"
        },
        "cardId": {
          "maxLength": 64,
          "type": "string"
        },
        "fromPack": {
          "description": "The pack give this card was opened from, if any.",
          "ref": "com.atproto.repo.strongRef",
          "type": "ref"
        },
        "iconCid": {
          "format": "cid",
          "type": "string"
        },
        "serial": {
          "description": "1-based print number, unique per (set, cardId, variantId).",
          "minimum": 1,
          "type": "integer"
        },
        "variantId": {
          "maxLength": 64,
          "type": "string"
        }
      },
      "required": [
        "cardId",
        "serial",
        "assetCid"
      ],
      "type": "object"
    },
    "main": {
      "description": "Issuance of a single card instance or a sealed pack, written by the provider into its own repo. This record is the root of a card's provenance chain and its at-URI is the card's permanent identity. The rkey is a TID, so issuance order is implicit.",
      "key": "tid",
      "record": {
        "properties": {
          "context": {
            "description": "Why it was issued, e.g. 'Opened from pack at://...'.",
            "maxLength": 512,
            "type": "string"
          },
          "givenAt": {
            "format": "datetime",
            "type": "string"
          },
          "issue": {
            "description": "What was issued: a single card or a sealed pack.",
            "refs": [
              "#cardIssue",
              "#packIssue"
            ],
            "type": "union"
          },
          "recipient": {
            "description": "The DID this give was issued to.",
            "format": "did",
            "type": "string"
          },
          "revokedAt": {
            "description": "Set to invalidate this give. Verifiers must treat the whole downstream chain as void.",
            "format": "datetime",
            "type": "string"
          },
          "set": {
            "description": "The dev.malpercio.cards.set manifest this was printed from.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          },
          "source": {
            "description": "The record that triggered issuance, e.g. the like on a pack post. For packs, the seed is derived from it.",
            "format": "at-uri",
            "type": "string"
          }
        },
        "required": [
          "set",
          "recipient",
          "givenAt",
          "issue"
        ],
        "type": "object"
      },
      "type": "record"
    },
    "packIssue": {
      "description": "A sealed pack. Contents are drawn and reserved against supply caps at creation, committed by CID, and revealed on open.",
      "properties": {
        "assetCid": {
          "format": "cid",
          "type": "string"
        },
        "cardCount": {
          "description": "Number of card gives reserved by this pack.",
          "minimum": 1,
          "type": "integer"
        },
        "contentsCid": {
          "description": "CID of the DAG-CBOR object {seed, cards:[{cardId, variantId?}]} drawn at creation. Proves the pull was fixed before opening.",
          "format": "cid",
          "type": "string"
        },
        "openedAt": {
          "format": "datetime",
          "type": "string"
        },
        "packId": {
          "maxLength": 64,
          "type": "string"
        },
        "produced": {
          "description": "The card gives minted when this pack was opened.",
          "items": {
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          },
          "type": "array"
        },
        "seed": {
          "description": "Revealed on open so anyone can rebuild the contents object and recompute contentsCid.",
          "maxLength": 128,
          "type": "string"
        },
        "serial": {
          "minimum": 1,
          "type": "integer"
        }
      },
      "required": [
        "packId",
        "cardCount",
        "contentsCid"
      ],
      "type": "object"
    }
  },
  "id": "dev.malpercio.cards.give",
  "lexicon": 1
}

Validate Record

Validate a record against dev.malpercio.cards.give

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:kmg2eqexpdefljft34crzesc
CID
bafyreih5bdtfhtqjwzmviftaojucdtbhcyzfor6wm3gehsclcdvjqxgbfa
Indexed At
2026-10-20 23:53 UTC
AT-URI
at://did:plc:kmg2eqexpdefljft34crzesc/com.atproto.lexicon.schema/dev.malpercio.cards.give

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • A card (or sealed pack) held by the repo owner. Not authoritative on its own: validity comes from the chain of strongRefs back to a provider give whose recipient matches the current owner at each hop. Blobs are the owne…

  • A card set manifest, published by a provider. Declares every card in the set with its rarity, supply cap, and canonical art. Print runs are auditable against this record.

Lexicon Garden

@