Upload your images, videos, and other supported files
to use with Nostr clients who utilize Blossom and NIP-96
like Primal, Amethyst, Nostur, YakiHonne, 0xchat & noStrudel.
We offer a unique feature called Zapwall that allows creators to monetize their files with Nostr zaps.
Keep track of uploads in our file manager to search or sort them, copy URLs, delete them, and more.
Our platform is serverless and distributed across the largest global network for optimal performance.
Find out the most common questions related to our Nostr Media hosting service.
Still need help?
Contact UsThe premium plans offer 100 GB with the Purple subscription and 210 GB with the Onyx subscription and 2.1 TB with the Gold subscription! However many files these storage allocations support is up to the size of each file.
All users must subscribe to one of our paid plans to upload and store files.
We support uploading the following file types:
.jpeg, .jpg, .png, .gif, .webp, .bmp, .tiff, .heic, .ico, .mp4, .webm, .ogg, .mov, .avi, .wmv, .mkv, .flv, .mpeg, .mpg, .3gp, .m4v, .zip, .pdf, .svg, .mp3, .wav, .flac, .aac, .m4a, .wma, .docx, .xlsx, .pptx, .txt, .rtf, .odt, .ods, .csv, .psd, .stl, .rar, .7z, .tar.gz
Nostr Media is both Blossom and NIP-96 compliant for uploads. In addition to using our own iteration of Blossom for a general purpose API. (see API documentation further in this FAQ)
This means you can use Nostr Media to upload files on Primal, Amethyst, Nostur, YakiHonne, Snort, noStrudel, 0xchat and any other client that supports either Blossom or NIP-96 protocols for uploading.
For either option, all you need to do is enter https://nostrmedia.com for the address and click save. From there, all uploads will begin saving to your Nostr Media account, connected through Nostr.
However, at this time only the upload and mirroring portion of either NIP-96 and/or Blossom is supported. This means in order to list or delete files, you will need to use our file manager. We are working to make our platform fully compliant in the future.
Additionally, we are constantly working with more Nostr client developers to help bring Nostr Media integration into as many Nostr apps as possible.
No! Premium plan uploads never expire.
The uploaded files for premium plans never expire until or unless the subscription is canceled and/or expires!
All premium plan subscriber uploads will remain online as long as their subscription remains active.
Yes! All of our premium plan subscribers get access to a file manager where they can see all uploaded files and choose to copy their URL or delete them.
All premium plan subscribers get full access to manage their files.
No. If you have lost your private key (nsec), we cannot help recover it. Our uploading process does not (from our end) require the private key. We have no way of recovering a lost private key.
A lost or compromised private key would require you to create a new Nostr account and go through subscribing to a new plan.
Calling all Nostr creators! Have you ever wanted to earn Bitcoin on your work? Now you can!
We are the first to introduce a Zapwall feature, which is a paywall, but requires Nostr zapping to unlock the file.
This optional feature, available only to our paid subscribers, allows charging Satoshis to unlock a file.
All of the Bitcoin Lightning payments made from the Nostr zaps to unlock files goes directly to the file owner. We do not take a cut of the zaps!
Checkout this demo of Zapwall in action:
If you've subscribed to one of our premium plans by credit card through Stripe, you can manage the subscription here.
If you've subscribed using Bitcoin through a Nostr zap, you can check how much time remains in your subscription here at the bottom using "Check Time Remaining" button. Renewing is quick and easy. All you need to do is do a new Zap for the plan type and length of time and it will automatically update your subscription.
If you've subscribed to one of our premium plans using a credit card through Stripe and you've canceled the subscription here, the uploaded files will be automatically deleted at the end of your subscription period.
If you've subscribed using Bitcoin through a Nostr zap, your files will stay live for 14 days after subscription expiry.
Upgrading or downgrading will not impact your stored files. However, if you have exceeded the 100 GB limit of the Purple plan and downgrade from the Onyx plan, you will not be able to upload any further files.
We do not moderate our users' uploaded content.
However, we are bound by the laws of our applicable country. Therefore, we will adhere to any valid DMCA, Abuse, or Illegal content complaints regarding user uploads and if deemed necessary will remove such content.
Read more in our Terms of Service.
Yes! To upload media to Nostr Media via our API, a Nostr client can use one of two methods:
Method 1: Standard Upload (files up to 100MB)For standard uploads using the Blossom spec:
1. Compute the SHA-256 HashBefore uploading the file, compute the SHA-256 hash of the file. This hash will be used in the Nostr event tags.
2. Sign the EventSign a Nostr event with the following structure:
{ "kind": 24242, "created_at": TIMESTAMP, "tags": [ ["t", "upload"], ["x", "SHA-256 hash of the file"] ], "content": "Uploading blob with SHA-256 hash", "pubkey": "USER_PUBLIC_KEY"} 3. Make the Upload RequestSend a POST request to https://nostrmedia.com/upload with the signed event in the Authorization header and the media file in the body.
POST /upload Authorization: Nostr BASE64_ENCODED_SIGNED_EVENT FormData: file: MEDIA_FILE
The API for uploading is based on Blossom and also accepts PUT and OPTIONS headers.
For uploads larger than 100MB, use the presigned upload endpoint:
1. Request a Presigned URLSend a POST request to https://nostrmedia.com/presigned with the file's SHA-256 hash and size in the request body, and a signed Nostr event in the Authorization header:
POST /presigned Authorization: Nostr BASE64_ENCODED_SIGNED_EVENT Content-Type: application/json
{ "sha256": "SHA-256 hash of the file", "size": FILE_SIZE_IN_BYTES, "type": "MIME_TYPE" } 2. Upload Using Presigned URLThe response will contain a presigned URL. Use this URL to upload your file directly with a PUT request:
PUT [PRESIGNED_URL] Content-Type: MIME_TYPE Body: RAW_FILE_DATA
This method supports files up to 5 GB and provides direct upload to our storage system.