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
| Method | Path | Purpose |
|---|---|---|
POST | /pins | Pin an existing CID. Body: {"cid": "Qm..."} |
POST | /upload | Upload a file (≤100 MB) and pin it. Multipart file= |
GET | /ipfs/:cid | Retrieve content. Supports range + ETag |
GET | /pins / /pins/:requestid | List / inspect your pins (bearer auth) |
DELETE | /pins/:requestid | Unpin 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 defaultWhat to know before shipping
- Pricing. $0.10 per GB-month (min $0.001). Set
X-Pin-Duration-Monthsbetween 1 and 24. - Funding. Agent needs USDC on Taiko mainnet (
eip155:167000, asset0x07d83526730c7438048D55A4fc0b850e2aaB6f0b) — no ETH required. - Owner auth. Paid writes return
x-wallet-auth-token; pass it asAuthorization: Bearer …to list or delete your own pins. - Discovery. Agent card lives at
/.well-known/agent.json; liveness at/health. - Pin vs upload.
/pinsexpects a CID you already computed. To hand Tack raw bytes, use/upload.
Learn more
- x402 protocol — payment flow spec
- Tack on GitHub — source and issues
- Agent Quickstart — deploy contracts and bridge with your agent