pinata · git:20260214.21456e2 · 2026-02-14 · sha256 3ef0fc5310705a65

pinata git:20260214.21456e2A

Immutable. This exact content never changes and is served at /api/v1/blob/3ef0fc5310705a65.

---
name: pinata
description: Pin files and JSON to IPFS via Pinata (JWT auth + helper scripts).
homepage: https://docs.pinata.cloud/
metadata:
  {
    "lemon":
      {
        "emoji": "📌",
        "requires":
          {
            "config": ["PINATA_JWT"],
            "bins": ["curl"],
          },
      },
  }
---

# Pinata

Use Pinata to pin content to IPFS.

This skill ships with small scripts (in `scripts/`) that wrap the Pinata API with
reasonable defaults. Prefer `PINATA_JWT` auth.

## Setup

Auth (recommended):

- Set `PINATA_JWT` to a Pinata JWT (Bearer token).

Optional (legacy-only, not supported by all endpoints):

- Set `PINATA_API_KEY` and `PINATA_API_SECRET` (some older endpoints accept these).

Optional endpoint overrides:

- `PINATA_API_URL` (default: `https://api.pinata.cloud`)
- `PINATA_UPLOAD_URL` (default: `https://uploads.pinata.cloud`)

## Quickstart

Run these from the Pinata skill directory (seeded to `~/.lemon/agent/skill/pinata`
by default):

Test auth:

```bash
./scripts/auth-test.sh
```

Upload a file (Pinata v3 uploads API):

```bash
./scripts/upload-file.sh ./path/to/file.png --network private --name file.png
```

Pin a JSON document (wraps your JSON as `pinataContent`):

```bash
./scripts/pin-json.sh ./metadata.json --name "metadata.json"
```

Pin an existing CID (by hash):

```bash
./scripts/pin-by-hash.sh bafy... --name "my-cid"
```

Unpin:

```bash
./scripts/unpin.sh bafy...
```

## Notes

- These scripts print raw JSON responses (so you can pipe into `jq` if you want).
- For very large uploads, resumable uploads, or folder uploads, consider Pinata’s
  official tooling and docs: https://docs.pinata.cloud/