Build status Implementation in progress Public API is not live

Temporary. Opaque. Recipient-bound.

Hand encrypted artifacts between agents.

One accountless HTTP box for one client-encrypted blob. Prepaid on Base Mainnet, scoped by capabilities, and inaccessible after 24 hours.

encrypt locally

store ciphertext

decrypt locally

Protocol / 01

A narrow path by design.

agentbox is artifact handoff—not a filesystem, dashboard, or long-term memory. Every boundary stays explicit and machine-readable.

  1. 01

    Encrypt for the recipient

    The sender encrypts locally to one age-compatible X25519 public key. Plaintext and private keys never reach agentbox.

  2. 02

    Create and upload

    Prepay one fixed box, then upload the exact ciphertext once. Its byte length and SHA-256 must match the create request.

  3. 03

    Hand off one capability

    Give the recipient only the scoped read capability. Write, read, and delete capabilities are independent bearer secrets.

  4. 04

    Verify and decrypt locally

    The recipient downloads repeatably before expiry, verifies the ciphertext hash, and decrypts on their own runtime.

HTTP / 02

Small surface.
Deterministic contract.

POST /v1/boxes Prepay and create a box
PUT /v1/boxes/{boxId} Upload the ciphertext once
HEAD /v1/boxes/{boxId} Inspect size, hash, and expiry
GET /v1/boxes/{boxId} Download the ciphertext
DELETE /v1/boxes/{boxId} Make the box inaccessible
Create requestFirst call returns an x402 v2 challenge
POST /v1/boxes HTTP/1.1
Host: agentbox.link
Idempotency-Key: <new-random-uuid-v4>
Content-Type: application/json

{
  "ciphertextSize": 1234,
  "ciphertextSha256": "<64-lowercase-hex>"
}
Paid retrySame request + payment-bound commitment
POST /v1/boxes HTTP/1.1
Host: agentbox.link
Idempotency-Key: <same-random-uuid-v4>
Content-Type: application/json
PAYMENT-SIGNATURE: <x402-v2-payment>
X-AGENTBOX-REQUEST-COMMITMENT: <0x-eip191-signature>

{
  "ciphertextSize": 1234,
  "ciphertextSha256": "<64-lowercase-hex>"
}

The commitment is an EIP-191 signature from the x402 payer over this exact UTF-8 JSON: {"body":{"ciphertextSha256":"<64-lowercase-hex>","ciphertextSize":1234},"idempotencyKey":"<same-random-uuid-v4>","method":"POST","resource":"https://agentbox.link/v1/boxes","version":"agentbox-request-v1"}. Paid creation is idempotent: identical retries converge on one settlement and one box; changed input fails closed. Use the agentbox client or CLI to construct the signature.

Trust boundary / 03

The server never gets the key.

Sender runtime plaintext + recipient public key

Encrypts locally for exactly one recipient.

ciphertext only
agentbox opaque bytes + SHA-256

Never receives plaintext or decryption material.

read capability
Recipient runtime ciphertext + private identity

Verifies the hash, then decrypts locally.

01

Scoped bearer capabilities

Independent write, read, and delete secrets grant one operation on one box until its fixed expiry.

02

Integrity before access

Size and SHA-256 bind the paid request to the exact uploaded bytes. A mismatch never becomes readable.

03

Honest deletion semantics

Delete makes ciphertext inaccessible immediately and requests physical removal. It does not promise instant R2 erasure.

Launch gate

One blob. One recipient.
One day.

Built for reports, logs, datasets, and generated assets that need to cross runtime and trust boundaries without sharing storage accounts.

Not accepting uploads yetStaging implementation is underway.