Upload files to the cloud and get shareable public URLs using stableupload.dev (x402 micropayments). USE FOR: - Uploading files to get public URLs - Sharing files via download links - Hosting images, documents, or any file type - Making files publicly accessible for 7 days or 6 months - Hosting static websites with custom domains TRIGGERS: - "upload this", "share this file", "get me a link" - "host this file", "make this downloadable" - "public URL", "download link", "put online" - "share file", "file hosting", "upload file" - "host site", "deploy site", "static site" ALWAYS use `npx agentcash@latest fetch` for stableupload.dev endpoints — never curl or WebFetch for the purchase step.
68
83%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Critical
Do not install without reviewing
Upload any local file to S3-backed cloud storage via x402 micropayments. Returns a public URL. No API keys needed.
See rules/getting-started.md for installation and wallet setup.
| Tier | Max Size | Retention | Cost |
|---|---|---|---|
10mb | 10 MB | 6 months | $0.02 |
100mb | 100 MB | 6 months | $0.20 |
1gb | 1 GB | 6 months | $2.00 |
short-10mb | 10 MB | 7 days | $0.005 |
short-100mb | 100 MB | 7 days | $0.02 |
short-1gb | 1 GB | 7 days | $0.10 |
short-5gb | 5 GB | 7 days | $0.50 |
Default tiers expire after 6 months; short-* tiers after 7 days. short-5gb is for file uploads only (not sites).
| Task | Endpoint | Price |
|---|---|---|
| Buy upload slot | https://stableupload.dev/api/upload | Tier-based |
| List uploads | GET https://stableupload.dev/api/uploads | Free (auth) |
| Get upload details | GET https://stableupload.dev/api/download/:uploadId | Free (auth) |
| Buy site slot | https://stableupload.dev/api/site | Tier-based |
| Activate site | POST https://stableupload.dev/api/site/activate | Free (auth) |
| Update site | PUT https://stableupload.dev/api/site | Free (auth) |
| Renew site | https://stableupload.dev/api/site/renew | Tier-based |
| Preview domain DNS | GET https://stableupload.dev/api/site/domain/preview?hostname=... | Free (no auth) |
| Attach domain | POST https://stableupload.dev/api/site/domain | Free (auth) |
| Detach domain | DELETE https://stableupload.dev/api/site/domain | Free (auth) |
| Domain status | GET https://stableupload.dev/api/site/domain/status?uploadId=... | Free (auth) |
npx agentcash@latest balanceEnsure sufficient USDC balance for the chosen tier.
If balance is low and the user needs funding details, run npx agentcash@latest accounts to get deposit links and wallet addresses.
Pick the smallest tier that fits the file. Check file size first with ls -la or wc -c. Use a short-* tier when the file only needs to live for 7 days — they cost a fraction of the 6-month tiers.
| Tier | Max Size | Retention | Cost |
|---|---|---|---|
10mb | 10 MB | 6 months | $0.02 |
100mb | 100 MB | 6 months | $0.20 |
1gb | 1 GB | 6 months | $2.00 |
short-10mb | 10 MB | 7 days | $0.005 |
short-100mb | 100 MB | 7 days | $0.02 |
short-1gb | 1 GB | 7 days | $0.10 |
short-5gb | 5 GB | 7 days | $0.50 |
npx agentcash@latest fetch https://stableupload.dev/api/upload -m POST -b '{"filename": "report.pdf", "contentType": "application/pdf", "tier": "10mb"}'Parameters:
filename — name for the uploaded file (required)contentType — MIME type (required, advisory for browser)tier — "10mb", "100mb", "1gb", "short-10mb", "short-100mb", "short-1gb", or "short-5gb" (required)policyTtlSeconds — optional upload URL expiration in seconds, 60–86400; use longer TTLs only when reserving an output slot for a downstream serviceResponse:
{
"uploadId": "k7gm3nqp2",
"uploadUrl": "https://f.stableupload.dev/k7gm3nqp2/report.pdf?t=...",
"uploadMethod": "put",
"uploadUrlExpiresAt": "2026-08-19T01:00:00.000Z",
"publicUrl": "https://f.stableupload.dev/k7gm3nqp2/report.pdf",
"expiresAt": "2027-02-19T00:00:00.000Z",
"maxSize": 10485760,
"curlExample": "curl -X PUT ..."
}Use Bash to PUT the file to the returned uploadUrl:
curl -s -X PUT "<uploadUrl>" -H "Content-Type: <mime>" --data-binary @/absolute/path/to/fileCritical: Use --data-binary (not -d) to preserve binary content. Use the absolute path.
The response includes a ready-made curlExample. If uploadMethod is "post", upload a multipart form to postUrl with postFields instead of a PUT.
Present the publicUrl to the user. This URL is publicly accessible immediately and remains live for the tier's retention window (6 months for default tiers, 7 days for short-* tiers) — see expiresAt.
| File Type | Content Type |
|---|---|
application/pdf | |
| PNG image | image/png |
| JPEG image | image/jpeg |
| CSV | text/csv |
| JSON | application/json |
| Plain text | text/plain |
| ZIP archive | application/zip |
| Excel | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
| Unknown | application/octet-stream |
To list uploads for the current wallet:
npx agentcash@latest fetch https://stableupload.dev/api/uploadsnpx agentcash@latest fetch https://stableupload.dev/api/download/k7gm3nqp2uploadUrlExpiresAt in the response; upload promptly, or set policyTtlSeconds (60–86400) at purchase to extendshort-* tiersnpx agentcash@latest discover https://stableupload.dev if you need to verify endpointsUpload a file the user just created: Skip discovery, go straight to wallet check + buy slot + upload.
Upload multiple files: Buy separate slots for each file. Slots can be purchased in parallel but uploads must use the correct uploadUrl for each.
User asks to "share" or "send" a file: Upload it and present the public URL. The URL can be shared anywhere.
Host images for emails:
Upload the image, then reference the publicUrl in email HTML:
<img src="https://f.stableupload.dev/abc/photo.png" alt="Photo" />Host static sites (HTML/CSS/JS) with custom domains and automatic HTTPS.
1. Buy a site slot (paid, tier-based):
npx agentcash@latest fetch https://stableupload.dev/api/site -m POST -b '{"filename": "my-site.zip", "tier": "100mb"}'Returns {uploadId, uploadUrl}.
2. Upload the zip:
curl -X PUT "$uploadUrl" -H "Content-Type: application/zip" --data-binary @site.zip3. Activate the site (SIWX, free):
npx agentcash@latest fetch https://stableupload.dev/api/site/activate -m POST -b '{"uploadId": "..."}'Returns {siteUrl, fileCount, files}. Site is live at https://{uploadId}.s.stableupload.dev/.
Update for free: PUT /api/site to get a new upload URL, upload the new zip, then activate.
npx agentcash@latest fetch https://stableupload.dev/api/site -m PUT -b '{"uploadId": "...", "filename": "my-site.zip"}'Then upload the new zip and call activate again.
1. Preview the required DNS records (free, no auth):
npx agentcash@latest fetch "https://stableupload.dev/api/site/domain/preview?hostname=www.example.com"Returns {hostname, dnsRecords}. Set these DNS records before attaching for instant SSL.
2. Attach the domain:
npx agentcash@latest fetch https://stableupload.dev/api/site/domain -m POST -b '{"uploadId": "...", "hostname": "www.example.com"}'Creates the TLS cert and routes the hostname. Check status:
npx agentcash@latest fetch "https://stableupload.dev/api/site/domain/status?uploadId=..."Poll until ssl is "active".
Detach a domain:
npx agentcash@latest fetch https://stableupload.dev/api/site/domain -m DELETE -b '{"uploadId": "...", "hostname": "www.example.com"}'npx agentcash@latest fetch https://stableupload.dev/api/site/renew -m POST -b '{"uploadId": "...", "count": 4}'Extends the site by count x the original tier's retention window (e.g. 4 x 6 months on a default tier). Price = tier price x count ($0.005–$20.00).
short-5gb; POST /api/site takes filename and tier only (no contentType)npx agentcash@latest accounts to show deposit links and wallet addresses3d657b7
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.