# three.ws Asset Download

> three.ws Asset Download is a paid API for AI agents from three.ws, paid per call via x402, $1/call, status unknown (last checked 2026-09-14).

Downloads a paid 3D asset (e.g. GLB model file) by slug, returning a signed time-limited download URL via x402 micropayment

## Facts

- Endpoint: GET https://three.ws/api/x402/asset-download
- Price: $1/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-14
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/three-ws-asset-download-e50370f5
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_9YSPTOkQOWOSLw4ykNYhs

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 three-ws-asset-download-e50370f5
```

Example prompt: Download the three.ws asset with slug 'pole-dancer-rumba' — I need the GLB file URL so I can embed it in my scene.

## When to prefer this

Use this endpoint when you need to programmatically retrieve a specific paid 3D asset (GLB/GLTF) from the three.ws catalog by its known slug, and you are prepared to pay $1 USDC per call via x402 micropayment. Prefer this over generic file storage APIs when the asset is a three.ws-curated rigged 3D model or animation.

## Known failure modes

- Invalid or unknown slug returns an error or non-ok response
- Expired payment or missing x402 payment header returns 402 Payment Required
- Download URL expires after the expiresAt timestamp, requiring a new call
- Asset may be temporarily unavailable if R2 storage is unreachable
- Slug field too long (over 128 chars) or empty will fail schema validation

## How this service works

Make a 3D AI agent from a selfie in 60 seconds. Drop one HTML tag to embed it on any website. Agents think on IBM watsonx.ai (Granite); optionally charge per chat with built-in micropayments.

## Output

A JSON object containing: ok (true), slug, title, mimeType (e.g. model/gltf-binary), sizeBytes, a signed time-limited downloadUrl pointing to the GLB file on Cloudflare R2, an expiresAt datetime, and an optional description. The downloadUrl is ready to use immediately but expires at the given timestamp.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "required": [
  "input"
 ],
 "properties": {
  "input": {
   "type": "object",
   "required": [
    "type",
    "method"
   ],
   "properties": {
    "type": {
     "type": "string",
     "const": "http"
    },
    "method": {
     "enum": [
      "GET",
      "HEAD",
      "DELETE"
     ],
     "type": "string"
    },
    "queryParams": {
     "type": "object",
     "$schema": "https://json-schema.org/draft/2020-12/schema",
     "required": [
      "slug"
     ],
     "properties": {
      "slug": {
       "type": "string",
       "maxLength": 128,
       "minLength": 1,
       "description": "Unique asset slug from the paid_assets catalog."
      }
     }
    }
   },
   "additionalProperties": false
  },
  "output": {
   "type": "object",
   "required": [
    "type"
   ],
   "properties": {
    "type": {
     "type": "string"
    },
    "example": {
     "type": "object",
     "$schema": "https://json-schema.org/draft/2020-12/schema",
     "required": [
      "ok",
      "slug",
      "title",
      "mimeType",
      "sizeBytes",
      "downloadUrl",
      "expiresAt"
     ],
     "properties": {
      "ok": {
       "type": "boolean",
       "const": true
      },
      "slug": {
       "type": "string"
      },
      "title": {
       "type": "string"
      },
      "mimeType": {
       "type": "string"
      },
      "expiresAt": {
       "type": "string",
       "format": "date-time"
      },
      "sizeBytes": {
       "type": "integer",
       "minimum": 0
      },
      "description": {
       "type": "string"
      },
      "downloadUrl": {
       "type": "string",
       "format": "uri"
      }
     }
    }
   }
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "ok": true,
  "slug": "pole-dancer-rumba",
  "title": "Pole Dancer (Rumba)",
  "mimeType": "model/gltf-binary",
  "expiresAt": "2026-05-21T18:48:09.000Z",
  "sizeBytes": 6492840,
  "description": "The default three.ws dancer rigged for the /club Rumba routine.",
  "downloadUrl": "https://three-ws-public.r2.dev/assets/pole-dancer-rumba.glb?X-Amz-Algorithm=..."
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/three-ws-asset-download-e50370f5/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from three.ws](https://www.zero.xyz/host/three.ws/llms.txt)
