Quickstart
This quickstart guide will help you set up and make calls on the IPFS network using the Infura endpoints.
To access the IPFS network through Infura, you'll need to add a billing card to your account, even if you're using a free account. Refer to the billing details for more information.
Prerequisites
Before you begin, ensure you have a valid API key and API key secret.
Make calls
cURL
cURL generates the auth header and encodes your credentials behind the scenes.
Include the -u
flag with the authentication information.
curl -X POST -F file=@myfile -u "<API_KEY>:<API_KEY_SECRET>" "https://ipfs.infura.io:5001/api/v0/add"
JavaScript
Wrap JavaScript calls to IPFS with the Infura Authorization
header.
xhr.setRequestHeader("Authorization", "Basic " + btoa(<API_KEY> + ":" + <API_KEY_SECRET>));
NodeJS
Change the <API_KEY>
and <API_KEY_SECRET>
in the NodeJS example code below.
Save the following script to a file, e.g. index.js
.
const https = require("https");
const projectId = "<API_KEY>";
const projectSecret = "<API_KEY_SECRET>";
const options = {
host: "ipfs.infura.io",
port: 5001,
path: "/api/v0/pin/add?arg=QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn",
method: "POST",
auth: projectId + ":" + projectSecret,
};
let req = https.request(options, (res) => {
let body = "";
res.on("data", function (chunk) {
body += chunk;
});
res.on("end", function () {
console.log(body);
});
});
req.end();
In a terminal window, run the script with node index.js
Output something like:
{"Pins":["QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn"]}
Python
Change the projectId
and projectSecret
in the Python example code below.
Save the following script to a file, e.g. index.py
.
import requests
projectId = "<API_KEY>"
projectSecret = "<API_KEY_SECRET>"
endpoint = "https://ipfs.infura.io:5001"
### CREATE AN ARRAY OF TEST FILES ###
files = {
'file': 'myNFT.png'
}
### ADD FILE TO IPFS AND SAVE THE HASH ###
response1 = requests.post(endpoint + '/api/v0/add', files=files, auth=(projectId, projectSecret))
print(response1)
hash = response1.text.split(",")[1].split(":")[1].replace('"','')
print(hash)
### READ FILE WITH HASH ###
params = {
'arg': hash
}
response2 = requests.post(endpoint + '/api/v0/cat', params=params, auth=(projectId, projectSecret))
print(response2)
print(response2.text)
### REMOVE OBJECT WITH PIN/RM ###
response3 = requests.post(endpoint + '/api/v0/pin/rm', params=params, auth=(projectId, projectSecret))
print(response3.json())
Run the script with python index.py
.
Output something like:
<Response [200]>
QmWtBbpKST49AQFLx8HAdwwjUu7HBP2wrtAH1x8df5qrVm
<Response [200]>
myNFT.png
{'Pins': ['QmWtBbpKST49AQFLx8HAdwwjUu7HBP2wrtAH1x8df5qrVm']}
kubo-rpc-client
Use the official kubo-rpc-client
JavaScript client library.
Install the library with npm install --save kubo-rpc-client
.
Save the following script to a file, e.g. index.mjs
.
import { create } from 'kubo-rpc-client'
const projectId = "<API_KEY>";
const projectSecret = "<API_KEY_SECRET>";
const auth =
"Basic " + Buffer.from(projectId + ":" + projectSecret).toString("base64");
const client = create({
host: "ipfs.infura.io",
port: 5001,
protocol: "https",
headers: {
authorization: auth,
},
});
client.pin.add("QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn").then((res) => {
console.log(res);
});
Run with node index.mjs
.
Output something like:
CID(QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn)
go-ipfs-api
- Use the official IPFS
go-ipfs-api
GoLang API. - Install with
go get -u github.com/ipfs/go-ipfs-api
. - Create a go module with
go mod init infura
. - Save the following script to a file, e.g.
index.go
, and include the Infuraauth
header with thehttp.RoundTripper
wrapper.
package main
import (
"fmt"
"net/http"
"os"
"strings"
ipfsApi "github.com/ipfs/go-ipfs-api" // v0.2.0
)
func main() {
projectId := "<API_KEY>"
projectSecret := "<API_KEY_SECRET>"
shell := ipfsApi.NewShellWithClient("https://ipfs.infura.io:5001", NewClient(projectId, projectSecret))
cid, err := shell.Add(strings.NewReader("Infura IPFS - Getting started demo."))
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("Data successfully stored in IPFS: %v\n", cid)
}
// NewClient creates an http.Client that automatically perform basic auth on each request.
func NewClient(projectId, projectSecret string) *http.Client {
return &http.Client{
Transport: authTransport{
RoundTripper: http.DefaultTransport,
ProjectId: projectId,
ProjectSecret: projectSecret,
},
}
}
// authTransport decorates each request with a basic auth header.
type authTransport struct {
http.RoundTripper
ProjectId string
ProjectSecret string
}
func (t authTransport) RoundTrip(r *http.Request) (*http.Response, error) {
r.SetBasicAuth(t.ProjectId, t.ProjectSecret)
return t.RoundTripper.RoundTrip(r)
}
Run with go run index.go
.
Output something like:
CID(QmeGAVddnBSnKc1DLE7DLV9uuTqo5F7QbaveTjr45JUdQn)
go-ipfs-http-client
- Use the official IPFS
go-ipfs-http-client
GoLang API. - Install with
go get github.com/ipfs/go-ipfs-http-client
. - Create a go module with
go mod init infura
. - Save the following script to a file, e.g.
index.go
, and include the Infuraauth
header with thehttp.RoundTripper
wrapper.
package main
import (
"context"
"encoding/base64"
"fmt"
"net/http"
"os"
"strings"
ipfsFiles "github.com/ipfs/go-ipfs-files" // v0.0.8
ipfsApi "github.com/ipfs/go-ipfs-http-client" // v0.1.0
)
func main() {
projectId := "<API_KEY>"
projectSecret := "<API_KEY_SECRET>"
httpClient := &http.Client{}
httpApi, err := ipfsApi.NewURLApiWithClient("https://ipfs.infura.io:5001", httpClient)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
httpApi.Headers.Add("Authorization", "Basic " + basicAuth(projectId, projectSecret))
content := strings.NewReader("Infura IPFS - Getting started demo.")
p, err := httpApi.Unixfs().Add(context.Background(), ipfsFiles.NewReaderFile(content))
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("Data successfully stored in IPFS: %v\n", p.Cid().String())
}
func basicAuth(projectId, projectSecret string) string {
auth := projectId + ":" + projectSecret
return base64.StdEncoding.EncodeToString([]byte(auth))
}
Run with go run index.go
.
Example output:
Data successfully stored in IPFS: QmTHr95iiwSTA2USxx4g5kKnhqsNRixqohhwxjvdXmSrWn
Next Steps
Now that you have successfully made a call to the IPFS network, you can explore more functionalities and APIs provided by Infura. Here are some suggestions:
-
Explore other IPFS APIs: Infura supports a wide range of APIs. You can find more information in the JSON-RPC API method documentation.
-
Try out different networks: Infura supports multiple networks including Arbitrum, Linea, Polygon, Optimism, and more.
-
Monitor your usage: Keep an eye on your usage on the Infura dashboard to ensure you're not hitting your rate limits.
Remember, the Infura community is here to help. If you have any questions or run into any issues, check out the Infura community for help and answers to common questions.