No subscriptions. Use Walrus's robust, verifiable, and decentralized storage. Pay via x402.
Send POST /v1/files/public with your file, or request an upload session with
maxSizeBytes, to find out the price via the 402 challenge.
Use an upload session when your client can't put a large file's bytes
inline in the paid request — for example a CLI passing the body as a command-line argument.
It splits payment from byte transfer: you pay for a declared maxSizeBytes, then
PUT the actual bytes (which may be smaller, never larger) to the returned URL.
Durations are requested in days, then rounded up to Walrus epochs by the server. Walrus Testnet epochs are 1 day; Walrus Mainnet epochs are 14 days.
Files stored through this service are PUBLIC on Walrus and retrievable by anyone with the blob ID. Use it to share the file with anyone.
If you need to store private data, make sure you encrypt it yourself and only send the cyphertext.
store.nosub.club does not store your file any longer than it's necessary to fulfil your request and upload it to Walrus storage.
POST /v1/files/public?duration=<days>[&contentType=<mime>]application/octet-stream.
duration is the requested storage period in days.
contentType is optional — supply a MIME type (e.g. text/plain,
application/json, application/msword) to have it stored as
metadata on the Walrus blob object. When set, the returned aggregatorUrl
serves the file with the correct Content-Type header, which helps agents
and browsers interpret the content without guessing.
POST /v1/files/publiccontentText, contentBase64, or
maxSizeBytes plus contentType for a paid upload session.
After payment, a session request returns HTTP 200 with an
uploadUrl, method (PUT),
expiresAt, maxSizeBytes, and contentType.
PUT /v1/files/public/uploads/:tokenuploadUrl returned above.
No payment header is needed — it was settled on the POST. Send the
Content-Type you declared in the session (e.g. audio/wav),
not application/octet-stream; a mismatch is rejected.
The body must not exceed maxSizeBytes, and the session is single-use and
expires at expiresAt. A successful PUT returns the same 201
storage response as a direct upload.
POST /v1/files/public/:blobId/extend{"duration": <days>} (JSON).
A successful upload returns HTTP 201:
{
"blobId": "0xabc123...",
"storageObjectId": "0xdef456...",
"aggregatorUrl": "https://aggregator.walrus.space/v1/blobs/by-object-id/0xdef456...",
"expiresAt": "2026-08-23T00:00:00.000Z"
}
The blobId is permanent on Walrus for the duration of file storage. You can retrieve your file
using blobId or storageObjectId from any public Walrus aggregator — even
if this service is down.