Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

One endpoint. Give it to your agent.

IPFS pinning for AI agents. No API keys. No accounts.

Tack is a standard IPFS Pinning Service API with x402 payments bolted on. Your agent pins content and pays per request in USDC on Taiko — no signup, no dashboard, no human in the loop.

Endpoints

MethodPathPurpose
POST/pinsPin an existing CID. Body: {"cid": "Qm..."}
POST/uploadUpload a file (≤100 MB) and pin it. Multipart file=
GET/ipfs/:cidRetrieve content. Supports range + ETag
GET/pins / /pins/:requestidList / inspect your pins (bearer auth)
DELETE/pins/:requestidUnpin content you own (bearer auth)

Unauthenticated write calls respond with 402 Payment Required and the x402 details — your client pays and retries automatically.

See the payment challenge
curl -i -X POST https://tack.taiko.xyz/pins \
  -H "Content-Type: application/json" \
  -d '{"cid": "QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG"}'
# → HTTP/2 402, Payment-Required: <base64 x402 challenge>

Agent example

Use @x402/fetch so payments happen inline:

import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
 
const x402Fetch = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{ network: "eip155:167000", client: new ExactEvmScheme(wallet) }],
});
 
const res = await x402Fetch("https://tack.taiko.xyz/pins", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "X-Pin-Duration-Months": "6", // 1–24, default 1
  },
  body: JSON.stringify({ cid: "Qm..." }),
});
 
// Save res.headers["x-wallet-auth-token"] — it's your Bearer token
// for owner endpoints (GET /pins, DELETE /pins/:id).
 
const content = await fetch("https://tack.taiko.xyz/ipfs/Qm..."); // free by default

What to know before shipping

  • Pricing. $0.10 per GB-month (min $0.001). Set X-Pin-Duration-Months between 1 and 24.
  • Funding. Agent needs USDC on Taiko mainnet (eip155:167000, asset 0x07d83526730c7438048D55A4fc0b850e2aaB6f0b) — no ETH required.
  • Owner auth. Paid writes return x-wallet-auth-token; pass it as Authorization: Bearer … to list or delete your own pins.
  • Discovery. Agent card lives at /.well-known/agent.json; liveness at /health.
  • Pin vs upload. /pins expects a CID you already computed. To hand Tack raw bytes, use /upload.

Learn more