NewS3-compatible API — use any AWS SDK to upload to IPFSRead docs →
Generous quotas. Predictable bills.

The complete IPFS platform.

Pin files, serve via dedicated gateways, publish mutable IPNS names — all through a simple REST API. Free tier included.

Developer experience

Three lines. That's it.

Traditional IPFS
14 linessetup.js
// Install and configure IPFS
const { create } = require('ipfs-http-client');
const client = create({
  host: 'localhost',
  port: 5001,
  protocol: 'http'
});

// Upload file
const { cid } = await client.add(
  Buffer.from(JSON.stringify(data))
);
console.log('CID:', cid.toString());
IPFS Ninja
6 linesupload.js
const res = await fetch("https://api.ipfs.ninja/upload/new", {
  method: "POST",
  headers: { "X-Api-Key": "ninja_..." },
  body: JSON.stringify({ content: data })
});
const { cid } = await res.json();

Features

Everything you need

Upload any file

JSON, images, PDFs, binary — auto-detected. Add custom metadata to every upload.

Dedicated gateways

Personal subdomain, gateway tokens, and IP/origin restrictions.

Pin existing CIDs

Fetch any CID from the IPFS network and pin it to your account.

Image optimization

Resize, reformat, and adjust quality on-the-fly via query params.

Signed upload tokens

Let clients upload directly without exposing your API keys.

Usage analytics

Per-key filtering, daily upload charts, storage and bandwidth tracking.

How it works

Ship in minutes, not days

Upload, retrieve, and integrate — all through a simple REST API.

1

Upload an image

Read a file from disk and upload it to IPFS with a single fetch call.

upload.mjs
import { readFileSync } from "fs";

// Read the image file
const image = readFileSync("./photo.png");

// Upload to IPFS
const res = await fetch("https://api.ipfs.ninja/upload/new", {
  method: "POST",
  headers: {
    "X-Api-Key": "ninja_your_api_key",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    content: image.toString("base64"),
    description: "My photo",
  }),
});

const { cid, uris } = await res.json();
console.log(cid);      // QmXk7VRz...
console.log(uris.url); // https://ipfs.ninja/ipfs/QmXk7...
2

Get your IPFS CID

The API returns a permanent content identifier and a gateway URL.

response.json
{
  "cid": "QmXk7VRz4qoG5Dg8sFL4bYWHpKe4F",
  "sizeMB": 0.042,
  "uris": {
    "ipfs": "ipfs://QmXk7VRz4qoG5Dg8sFL4bYWHpKe4F",
    "url": "https://ipfs.ninja/ipfs/QmXk7VRz4qoG5Dg..."
  }
}
3

Retrieve your files

List uploads or fetch any file by CID — from code or any IPFS gateway.

list.mjs
// List all your uploaded files
const files = await fetch(
  "https://api.ipfs.ninja/upload/list?from=1&to=9999999999999",
  { headers: { "X-Api-Key": "ninja_your_api_key" } }
).then((r) => r.json());

console.log(files);
// [{ cid: "QmXk7...", fileType: "image", sizeMB: 0.042 }]

// Or fetch directly via any IPFS gateway:
// https://ipfs.ninja/ipfs/QmXk7VRz4qoG5Dg8sFL4bYWHpKe4F

Pricing

Simple pricing. Generous quotas. No surprise bills.

Simple, predictable pricing. Scale when you're ready — not when a bill surprises you.

Dharma

$0

Try IPFS Ninja free — no credit card

  • 1 GB total storage
  • 2 GB bandwidth / month
  • 50 files
  • 1 API key
  • Public gateway access
  • All file types
See all features

Bodhi

$5/ month

For side projects

  • 10 GB total storage
  • 20 GB bandwidth / month
  • 200 files
  • 3 API keys
  • 1 dedicated gateway
  • Public gateway access
See all features
Most popular

Karma

$19/ month

For growing apps

  • 100 GB total storage
  • 100 GB bandwidth / month
  • 1,000 files
  • 10 API keys
  • 1 dedicated gateway
  • Public gateway access
See all features

Nirvana

$59/ month

For production workloads at scale

  • 1 TB total storage
  • 500 GB bandwidth / month
  • Unlimited files
  • 50 API keys
  • 1 dedicated gateway
  • Public gateway access
See all features

Compare

How we stack up

Paid plans start at $5/mo — transparent pricing, hard caps, no hidden fees.

FeatureIPFS NinjaPinata
Free tier50 files, 1 GB, 2 GB bw500 files, 1 GB
Lowest paid plan$5/mo$20/mo
Dedicated gatewayAll paid plansUp to 3
Gateway access modes3 modesToken-gated
Client-side upload tokensPresigned URLs
Per-file analyticsPaid plans
Image optimizationPaid plans
Bandwidth overageHard cap (no surprise bills)$0.08/GB
IPNS mutable namesUp to 10
API styleREST + S3-compatibleREST + JS SDK
MCP Server (AI assistants)
CAR import (DAG import)Paid plans only

Frequently Asked Questions

Everything you need to know about IPFS Ninja.

What is IPFS pinning?
IPFS pinning keeps your files permanently available on the IPFS network. Without pinning, files may be garbage-collected by IPFS nodes. IPFS Ninja pins your files to ensure they stay accessible 24/7.
What file types can I upload?
Any file type. JSON objects are sent natively, while images, PDFs, videos, HTML, and all other formats are base64-encoded. There's no file type restriction.
How does the free plan work?
The Dharma plan is free forever — no credit card required. You get 1 GB storage, 2 GB bandwidth per month, 50 files, 1 API key, and shared public-gateway access. You'll receive a heads-up email as you approach your bandwidth quota each month.
What is a dedicated gateway?
Each account gets a private gateway URL (e.g., https://your-slug.gw.ipfs.ninja) to serve your pinned content over HTTPS. You can configure access modes, token authentication, IP whitelisting, and origin restrictions.
How do signed upload tokens work?
Signed tokens are time-limited credentials you can safely use in client-side code (browsers, mobile apps) without exposing your API key. Create them server-side, pass to the client, upload directly from the browser.
Is my data encrypted?
Files on IPFS are content-addressed and publicly accessible by CID. If you need privacy, encrypt your data before uploading. The restricted gateway mode ensures only you can access files through your gateway, but the CIDs themselves are public on the IPFS network.
Can I pin an existing CID from the network?
Yes. Use the POST /pin endpoint with any valid CID to pin content that already exists on IPFS. This is useful for NFT metadata, content mirroring, or archival. Once pinned to your account the CID is served through the apex gateway just like any other upload.
Does ipfs.ninja/ipfs/<cid> work for any CID on the IPFS network?
No. The apex gateway at https://ipfs.ninja/ipfs/<cid> only serves CIDs that have been uploaded or pinned by a registered IPFS Ninja user. Requests for any other CID return HTTP 410 Gone with a pointer to public IPFS gateways like ipfs.io or dweb.link. To serve a third-party CID through our gateway, sign up free and use POST /pin to add it to your account.
Where do I serve my own content from?
Two URL patterns serve your uploads: (1) the shared apex gateway at https://ipfs.ninja/ipfs/<cid> — works for any CID you own or have pinned, and (2) your dedicated gateway at https://<your-slug>.gw.ipfs.ninja/ipfs/<cid> — full SLA, custom access controls, and configurable rate limits. Both serve the same content; dedicated gateways are recommended for production embedding.
How do I cancel or downgrade?
You can manage your subscription from the Profile page. Downgrading preserves your files but applies the lower plan's limits. There are no cancellation fees.

Ready to pin?

Start uploading to IPFS in under a minute.

Create free account