HTTP 402 + EIP-3009. Your agent signs a transferWithAuthorization once — a facilitator settles it on whichever chain it already holds USDC. No gas needed.
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.
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 |
The two kinds of things an Agent produces.
- 01 Generated artifacts Images, PDFs, code bundles, video.
- 02 RAG corpora Shared knowledge across an Agent fleet.
- 03 Replayable outputs Cache deterministic tool calls and skip the work if the CID resolves.
- 04 Inter-agent handoffs CIDs as pointers, one Agent pins and another retrieves.
- 01 Long-term memory Embeddings, summaries, working notes the Agent uses across runs.
- 02 Task receipts On-chain payment paired with off-chain content the Agent owns.
- 03 Drafts and per-user state Anything the Agent will edit before publishing, or keep scoped to one tenant.
The flow is the same shape for both tracks.
-
STEP 01
The Agent POSTs to
/pinswith a CID. Tack responds402and quotes the price for the duration the Agent picked. - STEP 02 The wallet signs one on-chain authorization. x402 on Taiko or Base, MPP on Tempo, whichever rail the wallet already holds funds on.
-
STEP 03
Tack returns
202 Acceptedand pins the content. The wallet owns the pin and can list, replace, or delete it any time.
-
STEP 01
The Agent POSTs the bytes to
/private/objectswith the retention it wants. Tack responds402with the size-and-duration quote. - STEP 02 The wallet signs the same x402 or MPP authorization it would for a public pin. Tack settles and stores the object on its private volume.
-
STEP 03
Tack returns the object id and a bearer token. The wallet reads its bytes back at
/private/objects/:id/content. -
STEP 04
When the token expires the Agent signs back in with SIWE at
/auth/challengeand/auth/tokenfor a fresh token. No CID is ever emitted.
Two endpoints, one integration.
The same wallet, the same x402 and MPP credentials. /pins publishes to IPFS, /private/objects keeps bytes scoped to the paying wallet.
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) }, // Taiko
{ network: "eip155:8453", client: new ExactEvmScheme(baseSig) }, // Base
],
});
// 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..." }),
});
import { Mppx, tempo } from "mppx/client";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount("0x..."); // holds USDC.e on Tempo
const mppx = Mppx.create({
methods: [tempo({ account })], // Tempo 4217
});
// Same endpoint. USDC.e on Tempo.
const res = await mppx.fetch("https://tack.inferenceroom.ai/pins", {
method: "POST",
headers: { "X-Pin-Duration-Months": "6" },
body: JSON.stringify({ cid: "Qm..." }),
});
# Ask for the quote. Tack returns a machine-readable 402.
curl -i -X POST https://tack.inferenceroom.ai/pins \
-H "X-Pin-Duration-Months: 6" \
-d '{"cid":"Qm..."}'
# → HTTP/1.1 402 Payment Required
# → payment-required: accepts=[
# → {network:"eip155:167000", asset:"USDC", amount:"0.10"}, # Taiko
# → {network:"eip155:8453", asset:"USDC", amount:"0.10"}, # Base
# → ]
# → WWW-Authenticate: Payment method="tempo", chainId=4217 # Tempo (MPP)
# Pick any chain your wallet holds. Sign, retry. Tack pins, returns 202.
// 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-14",
},
body: bytes,
});
// Object id is in the JSON body, bearer token is in the response header.
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}` },
});
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.
Pay for size and duration, on either track.
The slider below is the actual formula. Drag it for any object, public pin or private storage, and the price updates the same way. Numbers round up to the nearest USDC atomic unit at settlement.
| Pinata x402open-source demo | Tacklive in production | |
|---|---|---|
| Price · 1 GB · 1 mo | $1.20 | $0.1012× cheaper |
| Duration | Fixed 12 months | 1–24 months (you pick) |
| Chains | Base | Taiko · Base · Tempo |
| Payment protocols | x402 | x402 · MPP |
| IPFS Pinning Service API | — | ✓ |
| A2A agent card | — | ✓ |
Built-in
-
Settled in
USDCon Taiko or Base, orUSDC.eon 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.
How it’s calculated
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.
The full surface, pin endpoints and private object endpoints.
IPFS Pinning Service API spec on the pin track, a parallel wallet-owned private object track, a gateway with optional paywalls, and an A2A agent card. SIWE issues bearer tokens for owner routes.
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.aiQuestions builders actually ask.
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.
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.
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 from the Agent and no separate billing account is needed.
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.
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.
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.
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.
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.
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.