# StableUpload Site Slot Purchase

> StableUpload Site Slot Purchase is a paid API for AI agents from StableUpload at stableupload.dev, paid per call via x402 or MPP, $0.02/call, status healthy (last checked 2026-10-12, last successful call 2026-09-15).

Purchases a static site upload slot, returning a pre-signed URL to upload a zip file that can then be activated as a hosted static site.

## Facts

- Endpoint: POST https://stableupload.dev/api/site?utm_source=zero.xyz
- Price: $0.02/call
- Payment: x402, MPP
- Status: healthy
- Last checked: 2026-10-12
- Last successful call: 2026-09-15
- Success rate: 81% of calls made through Zero
- Rating: 5.0 / 5 from 9 reviews
- Activations on Zero: 146
- Provider: StableUpload
- Docs: https://stableupload.dev
- Website: https://stableupload.dev
- Tags: upload, files, hosting, static-site, cdn, storage
- Canonical page: https://www.zero.xyz/c/stableupload-site-203504c8
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_dxM82NuEXw3Iwe46aG5sR

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability stableupload-site-203504c8 -d '<json body>'
```

Example prompt: Reserve a StableUpload static site slot for a zip file called 'portfolio.zip' using the 10mb tier, so I can upload it and serve it as a static website.

## When to prefer this

Use this endpoint when you need to deploy or host a static site by uploading a zip file and want pay-per-use pricing without a long-term subscription. It's ideal for short-lived workflow sites (7-day tiers) or standard 6-month hosting, especially when you need a pre-signed URL to push assets programmatically. Prefer this over generic object storage when you want the zip to be automatically extracted and served as a live website with optional custom domain support.

## Known failure modes

- Invalid or unsupported tier value returns a validation error
- Filename exceeds 512 characters returns a bad request error
- policyTtlSeconds outside the 60–86400 range returns a validation error
- Payment of required USDC not received results in a 402 Payment Required response
- Expired upload URL causes upload failure downstream
- Uploading a file exceeding the tier's maxSize limit will be rejected

## How this service works

Buy a site upload slot. Upload a zip file, then activate to extract and serve as a static site.

## Output

Returns an upload ID, a pre-signed upload URL (PUT or POST), the HTTP method to use, expiry timestamps for the upload URL and the hosted site, the maximum file size in bytes, and a ready-to-use curl command string for uploading the zip file.

## Example request

```json
{
 "tier": "short-10mb",
 "filename": "mysite.zip",
 "policyTtlSeconds": 3600
}
```

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "filename",
  "tier"
 ],
 "properties": {
  "tier": {
   "enum": [
    "10mb",
    "100mb",
    "1gb",
    "short-10mb",
    "short-100mb",
    "short-1gb"
   ],
   "type": "string",
   "description": "Site tier. Default 6-month tiers: 10mb ($0.02), 100mb ($0.20), 1gb ($2.00). Short-term 7-day workflow site tiers: short-10mb ($0.005), short-100mb ($0.02), short-1gb ($0.10). short-5gb is not supported for sites."
  },
  "filename": {
   "type": "string",
   "maxLength": 512,
   "minLength": 1,
   "description": "Name of the zip file to upload"
  },
  "policyTtlSeconds": {
   "type": "integer",
   "maximum": 86400,
   "minimum": 60,
   "description": "Optional upload URL/form expiration in seconds, 60-86400. Use longer TTLs only when reserving an output slot for a downstream service."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "uploadId",
  "uploadUrl",
  "uploadMethod",
  "uploadUrlExpiresAt",
  "expiresAt",
  "maxSize",
  "curlExample"
 ],
 "properties": {
  "txHash": {
   "type": "string"
  },
  "maxSize": {
   "type": "number"
  },
  "postUrl": {
   "type": "string"
  },
  "uploadId": {
   "type": "string"
  },
  "expiresAt": {
   "type": "string"
  },
  "uploadUrl": {
   "type": "string"
  },
  "postFields": {
   "type": "object",
   "propertyNames": {
    "type": "string"
   },
   "additionalProperties": {
    "type": "string"
   }
  },
  "curlExample": {
   "type": "string"
  },
  "uploadMethod": {
   "enum": [
    "put",
    "post"
   ],
   "type": "string"
  },
  "uploadUrlExpiresAt": {
   "type": "string"
  }
 },
 "additionalProperties": false
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/stableupload-site-203504c8/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from stableupload.dev](https://www.zero.xyz/host/stableupload.dev/llms.txt)
