{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/dead-drop/main/json-schema/dead-drop-drop-schema.json", "title": "Drop", "description": "A dead-drop ephemeral data share. Free tier: 10KB, 7-day lifespan. Deep tier: 4MB, 90-day lifespan. Private drops are end-to-end encrypted client-side (zero-knowledge); public drops are plaintext.", "type": "object", "properties": { "id": { "type": "string", "pattern": "^[a-f0-9]{64}$", "description": "SHA-256 hash of the drop name." }, "name": { "type": "string", "description": "Human-friendly 4-word kebab-case drop name generated from the EFF Diceware wordlist." }, "tier": { "type": "string", "enum": ["free", "deep"], "description": "Drop tier. Free: 10KB, 7 days. Deep: 4MB, 90 days." }, "visibility": { "type": "string", "enum": ["private", "public"], "description": "Drop visibility. Private drops are encrypted; public drops are plaintext." }, "payload": { "type": "string", "description": "For private drops: hex-encoded AES-GCM ciphertext. For public drops: raw content string." }, "salt": { "type": "string", "pattern": "^[a-f0-9]{32}$", "description": "Hex-encoded 16-byte salt for PBKDF2 key derivation." }, "iv": { "type": ["string", "null"], "pattern": "^[a-f0-9]{24}$", "description": "Hex-encoded 12-byte AES-GCM initialization vector. Null for public drops." }, "encryptionAlgo": { "type": ["string", "null"], "enum": ["pbkdf2-aes256-gcm-v1", null], "description": "Encryption algorithm identifier. Null for public drops." }, "encryptionParams": { "type": ["object", "null"], "properties": { "rounds": { "type": "integer", "minimum": 1, "description": "PBKDF2 iteration count." } } }, "mimeType": { "type": "string", "enum": ["text/plain"], "description": "MIME type of drop content." }, "hashAlgo": { "type": "string", "enum": ["sha-256"], "description": "Hash algorithm used for the drop id and admin authentication." }, "contentHash": { "type": "string", "pattern": "^[a-f0-9]{64}$", "description": "SHA-256 hash of the canonical content payload JSON. Used for optimistic concurrency and admin auth." }, "expiresAt": { "type": "string", "format": "date-time", "description": "ISO 8601 timestamp at which the drop expires and is purged." } }, "required": ["id", "tier", "visibility", "payload", "salt", "mimeType", "hashAlgo", "expiresAt"] }