This is the write endpoint of the project-zero IPFS node. Anything you push
here is pinned on ipfs01 and served to the world from
ipfs.p0.contact and over bitswap.
Uploading needs a geninf account in the core-member group.
ipfs, create.Your username is the one Authentik shows under User details. Revoke the app password on the same page whenever you like.
One file, pinned, with a modern CID:
curl -u <username>:<app-password> -F file=@clip.mp4 \
"https://ipfs-api.p0.contact/api/v0/add?pin=true&cid-version=1"
# {"Name":"clip.mp4","Hash":"bafy…","Size":"…"}
Share https://ipfs.p0.contact/ipfs/<Hash>. Any IPFS
gateway or client resolves the same CID; this one is simply the fastest for
our own content.
A directory (the last line of the response is the directory's CID; files
sit at /ipfs/<dir-cid>/a.jpg):
curl -u <username>:<app-password> \
-F "file=@a.jpg;filename=album/a.jpg" -F "file=@b.jpg;filename=album/b.jpg" \
"https://ipfs-api.p0.contact/api/v0/add?pin=true&cid-version=1&wrap-with-directory=true"
With the kubo CLI:
ipfs --api /dns/ipfs-api.p0.contact/tcp/443/https \
--api-auth basic:<username>:<app-password> add -r ./album
# everything pinned, by everyone
curl -u <username>:<app-password> -X POST \
"https://ipfs-api.p0.contact/api/v0/pin/ls?type=recursive"
# drop one; the blocks go at the next garbage collection
curl -u <username>:<app-password> -X POST \
"https://ipfs-api.p0.contact/api/v0/pin/rm?arg=<cid>"
Any member can unpin any artifact. There is no per-member
quota and no backup: an upload lives on this node's volume and on your own
disk, nowhere else. Only add, pin/add,
pin/ls, pin/rm, id and
version are reachable here; everything else answers 404.
Source and operator notes: machines/ipfs01/README.md.