# StableStudio Upload

> StableStudio Upload is a paid API for AI agents from stablestudio.io, paid per call via x402, $0.01/call, status unknown (last checked 2026-09-14).

Requests a pre-signed upload token for submitting a file (e.g. an image) to StableStudio's Vercel Blob storage in preparation for AI image/video generation.

## Facts

- Endpoint: POST https://stablestudio.io/api/upload
- Price: $0.01/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/stablestudio-upload-3d00f8fe
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_hSSXUbrC605X8EDUdQ_2_

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 stablestudio-upload-3d00f8fe -d '<json body>'
```

Example prompt: I want to upload my photo 'portrait.jpg' to StableStudio so I can use it for AI image generation — can you get me an upload token for a JPEG file?

## When to prefer this

Use this endpoint when you need to stage a file (image/video) into StableStudio's storage system before triggering AI generation. This is a prerequisite upload-initiation step, not the generation call itself. Prefer this when working within the StableStudio pay-per-generation pipeline on a pay-as-you-go basis without subscriptions.

## Known failure modes

- Invalid or missing file metadata returns a 400 error
- Payment failure or insufficient USDC balance blocks the request
- Expired client token renders the upload URL unusable
- Unsupported content type may be rejected
- Network timeout during token generation

## How this service works

Get a client token for direct upload to Vercel Blob

## Output

Returns a JSON object containing an uploadId (UUID), a pathname for the stored file, an expiry timestamp for the token, a Vercel blob client token for the actual PUT upload, and a ready-to-use curl command to perform the upload.

## Example request

```json
{
 "size": 102400,
 "filename": "test-image.png",
 "contentType": "image/png"
}
```

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "size": {
   "type": "number",
   "description": "File size in bytes (optional)"
  },
  "filename": {
   "type": "string",
   "description": "Name of the file to upload"
  },
  "contentType": {
   "enum": [
    "image/jpeg",
    "image/jpg",
    "image/png",
    "image/gif",
    "image/webp",
    "video/mp4",
    "video/webm",
    "video/quicktime",
    "audio/mpeg",
    "audio/mp3",
    "audio/wav",
    "audio/x-wav",
    "audio/mp4",
    "audio/aac",
    "audio/ogg"
   ],
   "type": "string",
   "description": "MIME type of the file"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "pathname": "uploads/8eecdb7b-bd76-4054-94f9-94c9abb57eab/photo.jpg",
  "uploadId": "8eecdb7b-bd76-4054-94f9-94c9abb57eab",
  "expiresAt": "2026-05-18T20:11:05.273Z",
  "clientToken": "vercel_blob_client_token_example_redacted",
  "curlExample": "curl -X PUT \"https://vercel.com/api/blob/?pathname=uploads%2F8eecdb7b-bd76-4054-94f9-94c9abb57eab%2Fphoto.jpg\" -H \"authorization: Bearer <client-token>\" -H \"x-content-type: image/jpeg\" -H \"x-api-version: 11\" --data-binary @photo.jpg"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/stablestudio-upload-3d00f8fe/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from stablestudio.io](https://www.zero.xyz/host/stablestudio.io/llms.txt)
