# agent-exec Storage Write (POST /storage)

> agent-exec Storage Write (POST /storage) is a paid API for AI agents from agent-exec.448c.org, paid per call via x402, $0.0051/call, status unknown (last checked 2026-10-10).

Stores an arbitrary blob of data in an isolated, pay-per-use object store, returning a UUID that can later be used to retrieve the object.

## Facts

- Endpoint: POST https://agent-exec.448c.org/storage?utm_source=zero.xyz
- Price: $0.0051/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-10
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/agent-exec-storage-write-post-storage-4bd844eb
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_hyk_qBCBsfYoD-dEDEAKt

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 agent-exec-storage-write-post-storage-4bd844eb -d '<json body>'
```

Example prompt: Store this JSON blob I just computed under the label 'pipeline-result-v3' using the small plan — I need to be able to retrieve it later by ID, no account required, just pay with USDC.

## When to prefer this

Choose this endpoint when an AI agent needs to persist arbitrary data blobs between runs without creating an account or obtaining an API key — payment in USDC is the only credential needed. Prefer it over traditional object storage APIs when operating in accountless, pay-per-use agent pipelines using the x402 payment protocol. Ideal for ephemeral inter-agent data handoffs or short-lived result archival where no persistent account management is desired.

## Known failure modes

- Body too large for chosen plan — service auto-selects the smallest fitting plan or returns a 402 with revised pricing
- Payment amount insufficient — 402 response with exact required amount
- Label exceeds 128 characters or contains control characters — cleaned silently rather than rejected
- Invalid plan enum value — treated as omitted, smallest fitting plan selected
- Network or sandbox unavailability — 5xx error

## How this service works

Accountless, pay-per-use code execution for software agents: submit source code, get stdout, stderr and exit code back from an isolated, network-less sandbox. No account, no API key -- possession of valid payment is sufficient.

## Output

Returns a JSON object containing: a unique UUID ('id') to retrieve the stored object later via GET /storage/{id}, the chosen plan name, the expiry timestamp in Unix milliseconds, the label if one was provided, and a payment receipt object (asset, payer address, amount, network, transaction hash) confirming the USDC charge.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "plan": {
   "enum": [
    "small",
    "medium",
    "large",
    "year"
   ],
   "type": "string",
   "description": "Optional. Which plan to buy -- see x-payment-info.pricing for each plan's byte cap, retention window and price. Omitted, misspelled or too small for the body, you get the smallest plan the body fits, and the 402 quotes exactly that; with a payment attached, the largest plan it covers that fits the body."
  },
  "label": {
   "type": "string",
   "description": "Optional. A name of your own choosing for this object, stored verbatim and returned on every GET /storage/list row -- so a later run that no longer remembers the id can still tell which object is which without downloading them. Opaque to us: never parsed, indexed or deduplicated on. At most 128 characters, non-empty, and no control characters; a label breaking any of those is cleaned rather than refused: control characters removed, cut to the cap, an empty one ignored. Labels are NOT unique and NOT addressable -- two objects may share one, and lookup is list-then-get-by-id."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "id",
  "expiresAt",
  "plan"
 ],
 "properties": {
  "id": {
   "type": "string",
   "description": "Pass as GET /storage/{id} to read this object back. A UUID for a paid POST /storage; `free:<your wallet address>` for the one object POST /storage/free maintains -- stable across every free renewal for that wallet."
  },
  "plan": {
   "enum": [
    "small",
    "medium",
    "large",
    "year",
    "free"
   ],
   "type": "string",
   "description": "One of the paid plans (small/medium/large/year) from POST /storage, or \"free\" from POST /storage/free."
  },
  "label": {
   "type": [
    "string",
    "null"
   ],
   "description": "The label you passed as ?label=, stored verbatim, or null if you passed none. Echoed back so you can confirm what was stored rather than assuming it."
  },
  "payment": {
   "type": "object",
   "properties": {
    "asset": {
     "type": "string"
    },
    "payer": {
     "type": "string",
     "description": "The paying wallet's address."
    },
    "amount": {
     "type": "string",
     "description": "Atomic units of the settlement asset that were charged."
    },
    "network": {
     "type": "string"
    },
    "transaction": {
     "type": "string",
     "description": "On-chain settlement transaction hash."
    }
   },
   "description": "Only present for a paid POST /storage write. Absent for POST /storage/free -- nothing was charged."
  },
  "expiresAt": {
   "type": "integer",
   "description": "Unix ms this object stops being retained."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/agent-exec-storage-write-post-storage-4bd844eb/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from agent-exec.448c.org](https://www.zero.xyz/host/agent-exec.448c.org/llms.txt)
