As of June 30th, 2024 NFT.Storage will be discontinuing their classic product that allows files uploads. This guide is written as a service to help anyone who still needs uploads to migrate to Pinata.

API/SDK Uploads

Please refer to the code guides below showing how you can migrate your exising NFT.Storage code to using the Pinata API.

We are currently rewriting our SDK to make uploads outside of readable streams much easier, please stay tunned!

Uploading Blob or File Objects

async function nftStorage() {
  const text = "hello world!";
  const blob = new Blob([text], { type: "text/plain" });
  const cid = await client.storeBlob(blob);

Uploading a Directory

async function nftStorageDirectory() {
  const cid = await client.storeDirectory([
    new File(["hello world"], "hello.txt"),
    new File([JSON.stringify({ from: "incognito" }, null, 2)], "metadata.json"),

Uploading NFT Metadata

async function nftStorageMetadata() {
  const metadata = await{
    name: " store test",
    description: "Test ERC-1155 compatible metadata.",
    image: new File(["hello world"], "hello.txt", { type: "image/png" }),
    properties: {
      custom: "Custom data can appear here, files are auto uploaded.",
      file: new File(["This is a readme"], "", { type: "text/plain" }),

  console.log("IPFS URL for the metadata:", metadata.url);

Migrating Existing Pins

To get started, make sure you’ve signed up for Pinata. Pinata makes it easy to move between IPFS services, but you’ll need a paid plan in order to migrate.

Next, you’ll need to know how you access your old NFT.Storage content. Since the news broke, the old interface has been moved to You’ll want to sign in there. Once you’re signed in, you’ll need to create an API key, if you haven’t previously created one. Click the API Keys button in the top navigation.

Once on the API keys page, either create a new key or copy an existing key. Once you have that key, head back over to Pinata. Click the avatar dropdown in the top-right, then choose the Integrations option.

On the Integrations page, you’ll see a new integration for NFT.Storage. Click on that one and you’ll be prompted to enter your API key.

When you add your key and start the import, the process will work like this:

  1. Pinata will make a GET request to find all the CIDs pinned to your NFT.Storage account
  2. Pinata will then import all of those CIDs into a queue
  3. Pinata will send you an email if we were able to add the CIDs to the queue or we’ll send you an error email if there was a problem
  4. Pinata will begin the process of searching the IPFS network and pinning these files to your account
  5. You can monitor the progress by going to the Files Manager and paying attention to the Pin By CID queue

When everything is complete, your Pin By CID queue will be empty and you’ll be fully migrated over.

This integration should make the process of migrating from NFT.Storage to Pinata as easy as possible. Once complete, you won’t have to worry about the future of your files as they will be safely pinned to IPFS using Pinata. They will also be accessible through your own Dedicated IPFS Gateway.