Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Pinata Migration Examples

Comprehensive code examples for migrating from Pinata SDK to Pinner. See the Migration Guide for step-by-step instructions.

Pinata SDK 2.x Examples

File Upload

Pinata SDK 2.x

import { PinataSDK } from "pinata";
 
const pinata = new PinataSDK({
  pinataJwt: process.env.PINATA_JWT
});
 
const file = new File(["Hello!"], "hello.txt", { type: "text/plain" });
const upload = await pinata.upload.public.file(file);
 
console.log("CID:", upload.cid);
console.log("Name:", upload.name);

Pinner with Adapter

import { Pinner } from "@lumeweb/pinner";
import { pinataAdapter } from "@lumeweb/pinner";
 
const pinner = new Pinner({
  jwt: process.env.PINNER_API_KEY
});
const adapter = pinataAdapter(pinner);
 
const file = new File(["Hello!"], "hello.txt", { type: "text/plain" });
const upload = await adapter.upload.public.file(file)
  .name("hello.txt")
  .execute();
 
console.log("CID:", upload.cid);
console.log("Name:", upload.name);

JSON Upload

Pinata SDK 2.x

const data = { name: "test", value: 123 };
const upload = await pinata.upload.public.json(data);

Pinner with Adapter

const data = { name: "test", value: 123 };
const upload = await adapter.upload.public.json(data)
  .name("data.json")
  .execute();

Base64 Upload

Pinata SDK 2.x

const base64String = "SGVsbG8gV29ybGQh";
const upload = await pinata.upload.public.base64(base64String);

Pinner with Adapter

const base64String = "SGVsbG8gV29ybGQh";
const upload = await adapter.upload.public.base64(base64String)
  .name("file.txt")
  .execute();

Pin by CID

Pinata SDK 2.x

const pin = await pinata.upload.public.cid("QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco");

Pinner with Adapter

const pin = await adapter.upload.public.cid("QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco")
  .execute();

List Files

Pinata SDK 2.x

const files = await pinata.files.public.list()
  .limit(10)
  .all();
 
for (const file of files) {
  console.log(file.name, file.cid);
}

Pinner with Adapter

const files = await adapter.files.public.list()
  .limit(10)
  .all();
 
for (const file of files) {
  console.log(file.name, file.cid);
}

Directory Upload

Pinata SDK 2.x

const files = [
  new File(["content"], "file1.txt"),
  new File(["content"], "file2.txt"),
];
const upload = await pinata.upload.public.fileArray(files);

Pinner with Adapter

const files = [
  new File(["content"], "file1.txt"),
  new File(["content"], "file2.txt"),
];
const upload = await adapter.upload.public.fileArray(files)
  .name("my-directory")
  .execute();

Delete Files

Pinata SDK 2.x

await pinata.files.public.delete(["QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco"]);

Pinner with Adapter

await adapter.files.public.delete(["QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco"]);

Pinata SDK 1.x Legacy Examples

File Upload

Pinata SDK 1.x

import { pinata } from "pinata";
 
const file = new File(["Hello!"], "hello.txt", { type: "text/plain" });
const upload = await pinata.pinFileToIPFS(file);
 
console.log("IpfsHash:", upload.IpfsHash);

Pinner with Legacy Adapter

import { Pinner } from "@lumeweb/pinner";
import { pinataLegacyAdapter } from "@lumeweb/pinner";
 
const pinner = new Pinner({
  jwt: process.env.PINNER_API_KEY
});
const adapter = pinataLegacyAdapter(pinner);
 
const file = new File(["Hello!"], "hello.txt", { type: "text/plain" });
const upload = await adapter.pinFileToIPFS(file);
 
console.log("IpfsHash:", upload.IpfsHash);

JSON Upload

Pinata SDK 1.x

const data = { name: "test", value: 123 };
const upload = await pinata.pinJSONToIPFS(data);

Pinner with Legacy Adapter

const data = { name: "test", value: 123 };
const upload = await adapter.pinJSONToIPFS(data);

Pin by CID

Pinata SDK 1.x

const pin = await pinata.pinByHash("QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco");

Pinner with Legacy Adapter

const pin = await adapter.pinByHash("QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco");

List Pins

Pinata SDK 1.x

const pins = await pinata.pinList({
  limit: 10
});
 
for (const pin of pins.files) {
  console.log(pin.ipfs_pin_hash);
}

Pinner with Legacy Adapter

const pins = await adapter.pinList({
  limit: 10
});
 
for (const pin of pins.files) {
  console.log(pin.ipfs_pin_hash);
}

Unpin

Pinata SDK 1.x

await pinata.unpin("QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco");

Pinner with Legacy Adapter

await adapter.unpin("QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco");

Update Metadata

Pinata SDK 1.x

await pinata.hashMetadata("QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco", {
  project: "my-app",
  version: "2.0"
});

Pinner with Legacy Adapter

await adapter.hashMetadata("QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco", {
  project: "my-app",
  version: "2.0"
});

Native Pinner API

For the best experience, you can use Pinner's native API directly:

File Upload

import { Pinner } from "@lumeweb/pinner";
 
const pinner = new Pinner({
  jwt: process.env.PINNER_API_KEY
});
 
const file = new File(["Hello!"], "hello.txt", { type: "text/plain" });
const result = await pinner.uploadAndWait(file);
 
console.log("CID:", result.cid);

Upload with Operation Control

// Pass progress callback in options
const operation = await pinner.upload(file, {
  name: "hello.txt",
  keyvalues: { project: "demo" },
  onProgress: (progress) => {
    console.log(`Progress: ${progress.percentage.toFixed(1)}%`);
    console.log(`Uploaded: ${progress.bytesUploaded} / ${progress.bytesTotal} bytes`);
  }
});
 
// Wait for completion
const result = await operation.result;
 
// Or access progress directly from the operation
console.log("Final progress:", operation.progress.percentage);

Pin Management

// Pin by CID
for await (const cid of pinner.pinByHash("QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco")) {
  console.log("Pinned:", cid.toString());
}
 
// List pins
const pins = await pinner.listPins();
for (const pin of pins) {
  console.log(pin.cid.toString(), pin.name);
}
 
// Unpin
await pinner.unpin("QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco");

Error Handling

Pinata SDK

try {
  const upload = await pinata.upload.public.file(file);
} catch (error) {
  console.error("Pinata error:", error.message);
}

Pinner SDK

import { Pinner, PinnerError } from "@lumeweb/pinner";
 
try {
  const result = await pinner.upload(file);
} catch (error) {
  if (error instanceof PinnerError) {
    console.error("Code:", error.code);
    console.error("Message:", error.message);
  }
}