Pin JSON
curl --request POST \
--url https://api.pinata.cloud/pinning/pinJSONToIPFS \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"pinataOptions": {
"cidVersion": 1
},
"pinataMetadata": {
"name": "pinnie.json"
},
"pinataContent": {
"somekey": "somevalue"
}
}
'import requests
url = "https://api.pinata.cloud/pinning/pinJSONToIPFS"
payload = {
"pinataOptions": { "cidVersion": 1 },
"pinataMetadata": { "name": "pinnie.json" },
"pinataContent": { "somekey": "somevalue" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
pinataOptions: {cidVersion: 1},
pinataMetadata: {name: 'pinnie.json'},
pinataContent: {somekey: 'somevalue'}
})
};
fetch('https://api.pinata.cloud/pinning/pinJSONToIPFS', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pinata.cloud/pinning/pinJSONToIPFS",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'pinataOptions' => [
'cidVersion' => 1
],
'pinataMetadata' => [
'name' => 'pinnie.json'
],
'pinataContent' => [
'somekey' => 'somevalue'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pinata.cloud/pinning/pinJSONToIPFS"
payload := strings.NewReader("{\n \"pinataOptions\": {\n \"cidVersion\": 1\n },\n \"pinataMetadata\": {\n \"name\": \"pinnie.json\"\n },\n \"pinataContent\": {\n \"somekey\": \"somevalue\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.pinata.cloud/pinning/pinJSONToIPFS")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"pinataOptions\": {\n \"cidVersion\": 1\n },\n \"pinataMetadata\": {\n \"name\": \"pinnie.json\"\n },\n \"pinataContent\": {\n \"somekey\": \"somevalue\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pinata.cloud/pinning/pinJSONToIPFS")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"pinataOptions\": {\n \"cidVersion\": 1\n },\n \"pinataMetadata\": {\n \"name\": \"pinnie.json\"\n },\n \"pinataContent\": {\n \"somekey\": \"somevalue\"\n }\n}"
response = http.request(request)
puts response.read_body{
"IpfsHash": "<string>",
"PinSize": 123,
"Timestamp": "<string>",
"isDuplicate": true
}Pinning
Pin JSON
Uploads a JSON object to Pinata and pins it to IPFS
POST
/
pinning
/
pinJSONToIPFS
Pin JSON
curl --request POST \
--url https://api.pinata.cloud/pinning/pinJSONToIPFS \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"pinataOptions": {
"cidVersion": 1
},
"pinataMetadata": {
"name": "pinnie.json"
},
"pinataContent": {
"somekey": "somevalue"
}
}
'import requests
url = "https://api.pinata.cloud/pinning/pinJSONToIPFS"
payload = {
"pinataOptions": { "cidVersion": 1 },
"pinataMetadata": { "name": "pinnie.json" },
"pinataContent": { "somekey": "somevalue" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
pinataOptions: {cidVersion: 1},
pinataMetadata: {name: 'pinnie.json'},
pinataContent: {somekey: 'somevalue'}
})
};
fetch('https://api.pinata.cloud/pinning/pinJSONToIPFS', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.pinata.cloud/pinning/pinJSONToIPFS",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'pinataOptions' => [
'cidVersion' => 1
],
'pinataMetadata' => [
'name' => 'pinnie.json'
],
'pinataContent' => [
'somekey' => 'somevalue'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.pinata.cloud/pinning/pinJSONToIPFS"
payload := strings.NewReader("{\n \"pinataOptions\": {\n \"cidVersion\": 1\n },\n \"pinataMetadata\": {\n \"name\": \"pinnie.json\"\n },\n \"pinataContent\": {\n \"somekey\": \"somevalue\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.pinata.cloud/pinning/pinJSONToIPFS")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"pinataOptions\": {\n \"cidVersion\": 1\n },\n \"pinataMetadata\": {\n \"name\": \"pinnie.json\"\n },\n \"pinataContent\": {\n \"somekey\": \"somevalue\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pinata.cloud/pinning/pinJSONToIPFS")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"pinataOptions\": {\n \"cidVersion\": 1\n },\n \"pinataMetadata\": {\n \"name\": \"pinnie.json\"\n },\n \"pinataContent\": {\n \"somekey\": \"somevalue\"\n }\n}"
response = http.request(request)
puts response.read_body{
"IpfsHash": "<string>",
"PinSize": 123,
"Timestamp": "<string>",
"isDuplicate": true
}Guide
Guide
Pinata makes it easy to upload JSON objects using the
pinJSONToIPFS endpoint.Pin JSON
const JWT = 'YOUR_PINATA_JWT';
async function pinJSONToIPFS() {
try {
const data = JSON.stringify({
pinataContent: {
name: "Pinnie",
description: "A really sweet NFT of Pinnie the Pinata",
image: "ipfs://bafkreih5aznjvttude6c3wbvqeebb6rlx5wkbzyppv7garjiubll2ceym4",
external_url: "https://pinata.cloud"
},
pinataMetadata: {
name: "metadata.json"
}
})
const res = await fetch("https://api.pinata.cloud/pinning/pinJSONToIPFS", {
method: "POST",
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${JWT}`,
},
body: data,
});
const resData = await res.json();
console.log(resData);
} catch (error) {
console.log(error);
}
};
await pinJSONToIPFS()
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Response
200 - application/json
{ "IpfsHash": "This is the IPFS multi-hash (CID) provided back for your content," "PinSize": "This is how large (in bytes) the content you just pinned is," "Timestamp": "This is the timestamp for your content pinning (represented in ISO 8601 format)" }
⌘I