Build on ipfs.family.
Pin, fetch and renew files from code. Agents get an MCP server; everyone else gets plain HTTP and the IPFS Pinning Service API.
Pin a file
Make an order with each file's name and size (and its CID if you hashed it), upload the bytes, then send the payment tx the order returns. Inside your free 100 MB there is nothing to pay. Our node hashes with the same settings as ipfs add --cid-version 1, so the CID you saw is the CID we pin.
# 1. what it costs (owner= applies your free 100 MB)curl "https://api.ipfs.family/quote?bytes=500000000&months=12&token=USDG"# 2. an order, signed or with an API keycurl -X POST https://api.ipfs.family/orders \ -H "Authorization: Bearer $IPFS_KEY" \ -d '{"items":[{"name":"notes.pdf","bytes":2412883}],"months":12,"token":"USDG"}'# 3. the bytes, then send order.pay from any walletcurl -X PUT https://api.ipfs.family/orders/$ORDER/files/$PIN \ --data-binary @notes.pdf
{ "bytes": 500000000, "months": 12, "tier": "paid", "usd": 0.24, "dueUsd": 0.24, "pay": { "sym": "USDG", "decimals": 6, "amount": "0.24" }}
Endpoints
Also speaks the IPFS Pinning Service API at /psa: run ipfs pin remote service add ipfsfamily https://api.ipfs.family/psa ipfs_sk_..., then ipfs pin remote add --service=ipfsfamily <cid>. The full list lives in llms.txt and openapi.json.
MCP tools
Streamable HTTP at https://api.ipfs.family/mcp. Read tools are open; tools that act for a wallet need Authorization: Bearer ipfs_sk_... from POST /keys.
Signing
Wallet actions send {owner, ts, sig, ...args}. The signature is a personal_sign of ipfs.family\n<action>\n<canonical args>\nts:<ts>, where canonical args is JSON with keys sorted and ts is the time in ms (valid 10 minutes, each signature works once). Actions: pin.order, pin.renew, pin.unpin, credit.topup, order.quote, key.create, read. Agents sign once for a key and send it as a Bearer token instead.
Private files
IPFS is public by default: anyone with a CID can fetch it. The site encrypts private files in your browser with AES-GCM before upload, using a key your wallet signature unlocks. The gateway only ever sees ciphertext, which gets its own CID. Over the API, encrypt before you upload; private: true also hides the name from public lists.
Pricing
Pay in ETH, USDG or any Robinhood Chain token with a live price. Unpin and the unused paid time comes back as credit; credit pays your next order first.
Contracts
There is no storage contract. Every payment is a plain transfer on Robinhood Chain (chain 4663) to the ipfs.family wallet, with the order tag in its calldata: that tx is your receipt. Files live on our IPFS node and the public IPFS network, not on chain.
Agents can read this list too: GET https://api.ipfs.family/contracts or the list_contracts tool.