Dead Drop · Schema
Drop
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.
MessagingPrivacyAnonymousOpen Source
Properties
| Name | Type | Description |
|---|---|---|
| id | string | SHA-256 hash of the drop name. |
| name | string | Human-friendly 4-word kebab-case drop name generated from the EFF Diceware wordlist. |
| tier | string | Drop tier. Free: 10KB, 7 days. Deep: 4MB, 90 days. |
| visibility | string | Drop visibility. Private drops are encrypted; public drops are plaintext. |
| payload | string | For private drops: hex-encoded AES-GCM ciphertext. For public drops: raw content string. |
| salt | string | Hex-encoded 16-byte salt for PBKDF2 key derivation. |
| iv | stringnull | Hex-encoded 12-byte AES-GCM initialization vector. Null for public drops. |
| encryptionAlgo | stringnull | Encryption algorithm identifier. Null for public drops. |
| encryptionParams | objectnull | |
| mimeType | string | MIME type of drop content. |
| hashAlgo | string | Hash algorithm used for the drop id and admin authentication. |
| contentHash | string | SHA-256 hash of the canonical content payload JSON. Used for optimistic concurrency and admin auth. |
| expiresAt | string | ISO 8601 timestamp at which the drop expires and is purged. |
JSON Schema
{
"$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"]
}