{"rid":"storage/nostrmedia-com","card":{"rid":"storage/nostrmedia-com","eid":"nostrmedia","topic":"storage","slug":"nostrmedia-com","provider":"nostrmedia.com (NIP-96 file host)","url":"https://nostrmedia.com/","domain":"nostrmedia.com","category":"p2p-blob-storage","tier":null,"verdict":"qualifies-with-caveat","vorder":1,"grp":"usable","confidence":"reported","binding":"per-object-cap","identity_kind":"anonymous","identity_basis":"stated","needs_card":0,"needs_phone":0,"needs_id":0,"needs_institution":0,"country":null,"crypto":null,"interfaces":null,"egress_metered":0,"per_object_bytes":26214400,"retention_days":null,"verified_at":"2026-10-21T00:00:00.000Z","verified_basis":"inherited","checked_on":"2026-10-21","stale_on":"2026-11-04","n_evidence":3,"usd_month":null,"usd_per_tb_month":null,"summary":"free plan max_byte_size 26,214,400 (25 MiB); paid 'purple'/'onyx' 104,857,600 (100 MiB). `file_expiration: [0,0]` on every plan = never expires.","duplicate_of":null,"n_unknown":5},"record":{"topic":"storage","slug":"nostrmedia-com","provider":"nostrmedia.com (NIP-96 file host)","url":"https://nostrmedia.com/","category":"p2p-blob-storage","free_tier":{"stated":"free plan max_byte_size 26,214,400 (25 MiB); paid 'purple'/'onyx' 104,857,600 (100 MiB). `file_expiration: [0,0]` on every plan = never expires.","unit":"mixed","metered_on":"unstated","source_url":"https://nostrmedia.com/.well-known/nostr/nip96.json","read_on":"2026-10-21","notes":null},"per_object_cap":{"stated":"per-object-cap 25 MiB","bytes":26214400,"source_url":"https://nostrmedia.com/.well-known/nostr/nip96.json","notes":"not stated"},"retention":{"stated":"not stated","source_url":"https://nostrmedia.com/.well-known/nostr/nip96.json","notes":"not stated"},"egress":{"terms":"unmetered, Cloudflare-fronted (Server: cloudflare, Cache-Control public max-age=14400).","metered":false},"interface":["unknown"],"interface_detail":"NIP-96 HTTP file storage. Discoverable at /.well-known/nostr/nip96.json; POST /upload; /presigned 'handles up to 5 GB'.","tooling":"curl; NIP-98 Authorization header (signed event). The llms.txt documents the /presigned path for large objects.","chaining":"machine-readable plan manifest means the cap is queryable rather than scraped — one GET tells you the size ceiling per plan.","limits":[{"kind":"per-object-cap","value":"per-object-cap 25 MiB","source":"https://nostrmedia.com/.well-known/nostr/nip96.json"}],"limits_note":"per-object-cap 25 MiB free. 125 MB on the direct /upload, 5 GB via /presigned (per llms.txt) — the /presigned path is the one that matters and it is far above the free plan's advertised 25 MiB.","identity_cost":{"kind":"anonymous","detail":"anonymous","country":null},"reliability_note":"transforms media at ingest on some paths (resizing, format_conversion, compression, metadata_stripping are all listed in the manifest) — verify originals come back byte-identical, per BRIEF rule 4.","confidence":"reported","confidence_note":"One page read moves it to documented.","evidence":[{"url":"https://nostrmedia.com/.well-known/nostr/nip96.json","date":"2026-10-21","proved":"literal body: api_url https://nostrmedia.com/upload, download_url https://file.nostrmedia.com, supported_nips [94,96,98], plans.free.max_byte_size 26214400, file_expiration [0,0], media_transformations image [resizing, format_conversion, compression, metadata_stripping]"},{"url":"https://nostrmedia.com/llms.txt","date":"2026-10-21","proved":"'A single POST to /upload accepts files up to 125 MB; /presigned handles up to 5 GB', 'Uploads never expire while the subscription is active'"},{"url":"https://nostrmedia.com/docs/api.md","date":"2026-10-21","proved":"'/upload answers 413 above 125 MB because the request would outlive the worker'"}],"verdict":"qualifies-with-caveat","verified_at":"2026-10-21T00:00:00.000Z","notes":"free plan max_byte_size 26,214,400 (25 MiB); paid 'purple'/'onyx' 104,857,600 (100 MiB). `file_expiration: [0,0]` on every plan = never expires.","extras":{"unit_note":"free_tier.unit is 'mixed' because the headline is denominated in MiB or KiB, which the schema enum does not carry; the verbatim free_tier.stated keeps the true unit. See the storage-dossier handover."},"binding":"per-object-cap","binding_note":"the per-object cap sets the shard size and therefore the object count; it bounds the total more tightly than any headline quota"},"claims":[{"path":"$.free_tier.stated","kind":"free-quota","num":25,"unit":"MiB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"},{"path":"$.limits[0].value","kind":"limit:per-object-cap","num":25,"unit":"MiB","per":null,"currency":null,"usd":null,"fx_date":null,"parse":"ok"}],"unknown":[["$.free_tier.notes","process"],["$.interface","interface-unknown"],["$.per_object_cap.notes","not-extracted"],["$.retention.notes","not-extracted"],["$.retention.stated","not-extracted"]],"history":[],"drift":[]}