LIVE · Taiko · Base · Tempo

A place for an Agent's own things.

Tack pins what your Agent wants the world to find, and stores what only the paying wallet should read. Two tracks, same wallet, same x402 and MPP rails, no signup and no API keys.

POST https://tack.inferenceroom.ai/pins pin · public
POST https://tack.inferenceroom.ai/private/objects obj · private
Pin
$0.001
/ pin
Private
$0.0010
/ 5MB / 1mo
Settlement
~30s
 
§ 01 · Problem

Pin services were built for humans. Agents need different defaults.

 
Pinata · NFT.Storage · Storacha
Tack
Identity
Email + API key
Wallet address
Payment
Credit card, monthly plan
On-chain USDC, per pin
Minimum
$20 / month
$0.001 / pin
Machine-native
HTTP 402 + A2A agent card
§ 02 · What to keep

The two kinds of things an Agent produces.

To pin
public, addressable by CID
  1. 01
    Generated artifacts
    Images, PDFs, code bundles, video.
  2. 02
    RAG corpora
    Shared knowledge across an Agent fleet.
  3. 03
    Replayable outputs
    Cache deterministic tool calls and skip the work if the CID resolves.
  4. 04
    Inter-agent handoffs
    CIDs as pointers, one Agent pins and another retrieves.
To keep private
wallet-owned, off-IPFS
  1. 01
    Long-term memory
    Embeddings, summaries, working notes the Agent uses across runs.
  2. 02
    Task receipts
    On-chain payment paired with off-chain content the Agent owns.
  3. 03
    Drafts and per-user state
    Anything the Agent will edit before publishing, or keep scoped to one tenant.
§ 03 · The loop

The flow is the same shape for both tracks.

Pin a CID
POST /pins
  1. Step 01The Agent POSTs to /pins with a CID. Tack responds 402 and quotes the price for the duration the Agent picked.
  2. Step 02The wallet signs one on-chain authorization. x402 on Taiko or Base, MPP on Tempo, whichever rail the wallet already holds funds on.
  3. Step 03Tack returns 202 Accepted and pins the content. The wallet owns the pin and can list, replace, or delete any time.
Keep private
POST /private/objects
  1. Step 01The Agent POSTs the bytes to /private/objects with the retention it wants. Tack responds 402 with the size-and-duration quote.
  2. Step 02The wallet signs the same x402 or MPP authorization it would for a public pin. Tack settles and stores the object on its private volume.
  3. Step 03Tack returns the object id and a bearer token. The wallet reads its bytes back at /private/objects/:objectId/content.
  4. Step 04When the token expires the Agent signs back in with SIWE at /auth/challenge and /auth/token for a fresh token. No CID is ever emitted.
§ 04 · Integrate

Two endpoints, one integration.

01
Pin a CID /pins · public · paid
POST
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme, toClientEvmSigner } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";
import { createPublicClient, http } from "viem";
import { taiko, base } from "viem/chains";

const account  = privateKeyToAccount("0x...");  // holds USDC on Taiko or Base
const taikoSig = toClientEvmSigner(account, createPublicClient({ chain: taiko, transport: http() }));
const baseSig  = toClientEvmSigner(account, createPublicClient({ chain: base,  transport: http() }));

const pay = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [
    { network: "eip155:167000", client: new ExactEvmScheme(taikoSig) },
    { network: "eip155:8453",   client: new ExactEvmScheme(baseSig)  },
  ],
});

// Pin a CID for 6 months. USDC on whichever chain your wallet holds.
const res = await pay("https://tack.inferenceroom.ai/pins", {
  method: "POST",
  headers: { "X-Pin-Duration-Months": "6" },
  body: JSON.stringify({ cid: "Qm..." }),
});
02
Store a private object /private/objects · private · paid
POST
// Same wallet, same x402 (or MPP) credential as /pins.
// Tack stores the bytes on its private volume — no CID is emitted.
const bytes = new TextEncoder().encode("agent memory: ...");

const res = await pay("https://tack.inferenceroom.ai/private/objects", {
  method: "POST",
  headers: {
    "Content-Type":               "application/octet-stream",
    "X-Content-Size-Bytes":        String(bytes.byteLength),
    "X-Storage-Duration-Months":  "3",
    "X-Object-Name":              "agent-memory-2026-05-19",
  },
  body: bytes,
});

const { id } = await res.json();
const bearer = res.headers.get("x-wallet-auth-token");

// Read the bytes back any time. Only the paying wallet can.
const read = await fetch(`${o}/private/objects/${id}/content`, {
  headers: { "Authorization": `Bearer ${bearer}` },
});
§ 05 · Rails

Two protocols, three chains, one set of endpoints.

x402
Taiko Base

HTTP 402 + EIP-3009. Your Agent signs a transferWithAuthorization once and a facilitator settles it on whichever chain it already holds USDC. No gas needed.

AssetUSDC
Chains167000 · Taiko  ·  8453 · Base
SchemeExactEvm
Headerpayment-signature
MPP
Tempo

Machine Payment Protocol + TIP-20. Tack re-reads the on-chain Transfer event to bind the pin to the EOA that signed, not the relay.

AssetUSDC.e
Chain4217 · Tempo
SchemeTIP-20 Transfer
HeaderAuthorization: Payment
§ 06 · Pricing

Pay for size and duration, on either track.

Pin · public
$0.10
/ GB · month
  • Minimum$0.001 / pin
  • Term1 – 24 months
  • AssetUSDC / USDC.e
  • RetrievalFree · paywalls opt-in
Private · object
$0.0010
/ 5 MB · 1 month
  • Same rate$0.10 / GB · month
  • Term1 – 24 months
  • OwnerPaying wallet only
  • RefundUnused term on delete
Pinata · x402 demo
$1.20
/ GB · fixed 12 mo
  • Minimum12 months locked
  • TermFixed 12 only
  • ChainsBase only
  • Protocolsx402 only

Same $0.10 / GB·month rate. Pinata’s demo locks every pin to 12 months; Tack lets you pick 1–24. At 3 mo it’s 4× cheaper, 6 mo 2×, 12 mo the same.

→ Live quote · drag the sliders
$0.293
500 MB · 6 months · settled on-chain
Size 500MB
Duration 6months
→ Built-in
  • Settled in USDC on Taiko or Base, or USDC.e on Tempo.
  • Retrieval is free. Paywalls are opt-in, per CID.
  • Pins and private objects auto-expire. No recurring charges.
  • Owner ops — list, replace, delete — don't re-charge.
  • price = clamp(sizeGB × $0.10 × months, $0.001, $50). Size is binary (1 GB = 1,073,741,824 bytes). Duration is 1–24 months, set with X-Pin-Duration-Months for pins or X-Storage-Duration-Months for private objects. Settlement rounds up to the next asset unit.
§ 07 · API

The full surface, pin endpoints and private object endpoints.

Pin endpoints public, addressable by CID
POST
/pins
Pin a CID. 402 with price → sign → retry.
x402 · MPP
POST
/upload
Upload bytes (up to 100 MB) and pin in one request.
x402 · MPP
GET
/pins
List pins your wallet owns.
bearer
GET
/pins/:requestid
Status for a specific pin request.
bearer
POST
/pins/:requestid
Replace a pin, keep the request id.
bearer
DELETE
/pins/:requestid
Unpin content your wallet owns.
bearer
GET
/ipfs/:cid
Retrieve content. Ranges, ETags, optional paywall.
public
GET
/.well-known/agent.json
A2A agent card. Machines discover, verify, pay.
public
GET
/openapi.json
OpenAPI 3.1 spec covering public, paid, and owner routes.
public
Private object endpoints wallet-owned, off-IPFS
POST
/private/objects
Create a private object. 402 with price → sign → retry.
x402 · MPP
GET
/private/objects
List the private objects your wallet owns.
bearer
GET
/private/objects/:objectId
Get metadata for a private object you own.
bearer
GET
/private/objects/:objectId/content
Read the bytes, with range and ETag support.
bearer
POST
/private/objects/:objectId/renew
Extend retention for a private object you own.
bearer · x402 · MPP
PATCH
/private/objects/:objectId
Update a private object's name or metadata.
bearer
DELETE
/private/objects/:objectId
Delete early, refund unused retention.
bearer
POST
/auth/challenge → /auth/token
Sign in with SIWE for a fresh bearer token.
public
§ 08 · Where this lives

Tack is the first product in Inference Room.

Inference Room is an independent launchpad for AI Agents and the infrastructure they need to ship. Tack is the first resident, focused on storage. Bantō, the finance multisig Agent on Safe, is the second.

Every resident has its own product, its own brand, and its own roadmap. What they share is a thesis: AI Agents need primitives that were designed for Agents, not retrofitted from products built for humans. Pin-for-humans does not work for Agents, multisig-for-humans does not work for finance Agents, and the same shape of mismatch shows up in every layer underneath.

Inference Room is where those primitives get built and shipped.

Read more at inferenceroom.ai →
§ 09 · FAQ

Questions builders actually ask.

01
How do I store AI Agent memory without pinning it to IPFS?
Use Tack's private object endpoint. Send the bytes to POST /private/objects, sign the EIP-3009 authorization over x402 or attach an MPP credential, and the object is stored on Tack's private volume scoped to the paying wallet. No CID is ever emitted, no IPFS gateway will serve it, and only the owning wallet can read it back through the API.
02
What is the cheapest IPFS pinning service for AI Agents?
Tack settles at roughly $0.10 per GB-month when measured against Pinata's published x402 demo, which fixes 12 months as the only term. Tack lets the Agent pick anywhere from 1 to 24 months, so for a typical short pin Tack is approximately 12× cheaper. Pricing is per-pin, paid in USDC, no subscriptions.
03
How does x402 work for AI Agent payments?
x402 is the HTTP 402 Payment Required flow paired with EIP-3009 transferWithAuthorization. The Agent posts to a paid endpoint, the server returns 402 with a price quote, the Agent's wallet signs the transferWithAuthorization once, and the server resubmits the request with the signed payment header. A facilitator settles the USDC transfer on whichever chain the wallet already holds funds on. No gas is required, no separate billing account is needed.
04
What is a Pinata alternative for AI Agents?
Tack is built specifically for AI Agents, with wallet-based identity instead of email plus API key, per-pin USDC payment instead of a $20 monthly minimum, an A2A agent card at the well-known URL, and a private storage track for state the Agent does not want pinned. The full IPFS Pinning Service API spec is supported so any existing Pinata integration ports across.
05
Where should AI Agents store private data that should not be public?
On Tack's private object track. Bytes live on Tack's private volume, never pinned to IPFS, addressable only by a random object id that the paying wallet owns. Requests without a bearer token get a 401, and another wallet's valid token gets a 404 (not a 403), so the existence of the object is itself not leaked to anyone but the owner.
06
Is Tack's private storage end-to-end encrypted?
No. Private here means access-gated by wallet, not end-to-end encrypted. Bytes sit on Tack's volume in plaintext at rest. Tack can technically read them, only the owning wallet can read them through the API. If a use case needs confidentiality from the operator, encrypt client-side before upload and let the wallet remain the access boundary.
07
How does an Agent retrieve content it pinned to Tack?
For public pins, fetch from the public gateway at GET /ipfs/<cid>. For private objects, send GET /private/objects/<obj_id>/content with the bearer token returned at payment, or sign back in with SIWE at /auth/challenge and /auth/token if the original token has expired.
08
What chains does Tack support?
USDC settlement on Taiko (chain id 167000) and Base (chain id 8453) via x402, and USDC.e on Tempo (chain id 4217) via MPP. The Agent's wallet picks whichever rail it already holds funds on. No bridging required.
09
Does Tack work with Claude Code, Codex, OpenClaw, or Hermes?
Yes. The full IPFS Pinning Service API spec is supported plus an A2A agent card published at /.well-known/agent.json. Any HTTP client an Agent uses works. No SDK is required, no platform-specific adapter, and no API key beyond the wallet signature.

A place for your Agent to keep things. The public ones and the private ones.

Two endpoints away.

Agent card →
Taiko · 167000
Base · 8453
Tempo · 4217
IPFS · Kubo
A2A · agent card