> ## Documentation Index
> Fetch the complete documentation index at: https://docs.theblockchainlibrary.com/llms.txt
> Use this file to discover all available pages before exploring further.

# IPFS Upload with Pinata

> Upload metadata or images to IPFS via Pinata's API for NFT metadata.

# IPFS Upload with Pinata

Upload metadata or images to IPFS via Pinata's API for NFT metadata.

Upload metadata or images to IPFS via Pinata's API for NFT metadata.

## Explanation

Pinata is a popular IPFS pinning service. Upload files via multipart form data and metadata via JSON. The returned IpfsHash can be combined with an IPFS gateway URL (e.g., [https://ipfs.io/ipfs/HASH](https://ipfs.io/ipfs/HASH)) to serve NFT metadata.

## Code

```javascript theme={null}
import fs from "fs";
import FormData from "form-data";

async function uploadToIPFS(filePath) {
  const form = new FormData();
  form.append("file", fs.createReadStream(filePath));

  const res = await fetch("https://api.pinata.cloud/pinning/pinFileToIPFS", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.PINATA_JWT}`,
    },
    body: form,
  });

  const data = await res.json();
  return `ipfs://${data.IpfsHash}`;
}

// Upload NFT metadata JSON
async function uploadMetadata(metadata) {
  const res = await fetch("https://api.pinata.cloud/pinning/pinJSONToIPFS", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      Authorization: `Bearer ${process.env.PINATA_JWT}`,
    },
    body: JSON.stringify({ pinataContent: metadata }),
  });
  const data = await res.json();
  return `ipfs://${data.IpfsHash}`;
}
```

***

**Canonical knowledge ID:** `code-example:ipfs-upload-pinata`
