with open("creds.json") as f:
= json.loads(f.read())["Pinata"]["JWT"] creds
Pinata
generate_apikey
generate_apikey (cred:str, key_name:str, pinlist:bool=False, userPinnedDataTotal:bool=False, hashMetadata:bool=True, hashPinPolicy:bool=False, pinByHash:bool=True, pinFileToIPFS:bool=True, pinJSONToIPFS:bool=True, pinJobs:bool=True, unpin:bool=True, userPinPolicy:bool=True)
Type | Default | Details | |
---|---|---|---|
cred | str | JWT | |
key_name | str | Key name | |
pinlist | bool | False | list pins |
userPinnedDataTotal | bool | False | total data stored |
hashMetadata | bool | True | metadata |
hashPinPolicy | bool | False | policy |
pinByHash | bool | True | pin cid |
pinFileToIPFS | bool | True | upload file to IPFS |
pinJSONToIPFS | bool | True | upload json to IPFS |
pinJobs | bool | True | see pin jobs |
unpin | bool | True | unpin ipfs cid |
userPinPolicy | bool | True | establish pin policy |
Generate API Key
= generate_apikey(creds,"Test")
response response.json()
{'pinata_api_key': '443e2dadf1e6a47c2754',
'pinata_api_secret': '0f84d67fe64136d4d9ddbfb1235a8ab1fd490f12c1f6fcc532b758062695a1dc',
'JWT': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySW5mb3JtYXRpb24iOnsiaWQiOiJkMjhmMjBjZi1kZmUwLTRjOGYtOTI3Mi0yNmI5YzJkOGEzY2QiLCJlbWFpbCI6InZpbnRhZ2Vnb2xkMTIzQGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwaW5fcG9saWN5Ijp7InJlZ2lvbnMiOlt7ImlkIjoiTllDMSIsImRlc2lyZWRSZXBsaWNhdGlvbkNvdW50IjoxfV0sInZlcnNpb24iOjF9LCJtZmFfZW5hYmxlZCI6ZmFsc2UsInN0YXR1cyI6IkFDVElWRSJ9LCJhdXRoZW50aWNhdGlvblR5cGUiOiJzY29wZWRLZXkiLCJzY29wZWRLZXlLZXkiOiI0NDNlMmRhZGYxZTZhNDdjMjc1NCIsInNjb3BlZEtleVNlY3JldCI6IjBmODRkNjdmZTY0MTM2ZDRkOWRkYmZiMTIzNWE4YWIxZmQ0OTBmMTJjMWY2ZmNjNTMyYjc1ODA2MjY5NWExZGMiLCJpYXQiOjE2NTg0OTk3NDF9.Rd4F1zBE8wTPIwi4mD1x3pdEnfEM2Ik7zjiw0vQ7AC8'}
list_apikeys
list_apikeys (cred:str)
List API Keys
= list_apikeys(creds).json()["keys"][0];newest_apikey newest_apikey
{'id': '1ff9d58d-d7fa-4598-9863-c53a806faff6',
'name': 'Test',
'key': '443e2dadf1e6a47c2754',
'secret': 'ed7a3bdc89fb353b6c4f4155a9adb7f5:d15adb31f816663e2612ff5f89a5497abc30a5100ab83575247ba67cc9d49a7d61293d77c94049a8d83a82d8f02423357f311b26204bb57e7be9181d324e6424',
'max_uses': None,
'uses': 0,
'user_id': 'd28f20cf-dfe0-4c8f-9272-26b9c2d8a3cd',
'scopes': {'endpoints': {'data': {'pinList': False,
'userPinnedDataTotal': False},
'pinning': {'unpin': True,
'pinJobs': True,
'pinByHash': True,
'hashMetadata': True,
'hashPinPolicy': False,
'pinFileToIPFS': True,
'pinJSONToIPFS': True,
'userPinPolicy': True}}},
'revoked': False,
'createdAt': '2022-07-22T14:22:21.191Z',
'updatedAt': '2022-07-22T14:22:21.191Z'}
revoke_apikey
revoke_apikey (cred:str, revoke_apikey:str)
Revoke API Key
"JWT"]) revoke_apikey(creds,response.json()[
<Response [200]>
upload_file
upload_file (cred:str, name:str, fpaths:list, metadata:dict, cid_version:str='1', directory:bool=False)
Type | Default | Details | |
---|---|---|---|
cred | str | JWT key | |
name | str | filename | |
fpaths | list | filepaths | |
metadata | dict | metadata | |
cid_version | str | 1 | IPFS cid |
directory | bool | False | upload directory |
Upload File to IPFS with metadata
= {"type":"AdultData"}
metadata
"adult_data.csv","output/adult_data.csv",metadata,cid_version=1,directory=False).text upload_file(creds,
'{"IpfsHash":"bafybeibcsnxt2sqzsvfg4lzg3iuxkfit37l3rz5gqmdxwsgec56qalmxie","PinSize":3975284,"Timestamp":"2022-06-17T22:43:08.303Z","isDuplicate":true}'
upload_jsonfile
upload_jsonfile (cred:str, name:str, fpaths:list, metadata:dict, cid_version:str, directory:bool=False)
Type | Default | Details | |
---|---|---|---|
cred | str | JWT key | |
name | str | filename | |
fpaths | list | filepaths | |
metadata | dict | metadata | |
cid_version | str | IPFS cid | |
directory | bool | False | upload directory |
This endpoint is optimized for JSON files
= {"name":"Vote"}
metadata
"ens_airdrop_Nov8th2021.json","output/ens_airdrop_Nov8th2021.json",metadata,cid_version=1,directory=False).text upload_jsonfile(creds,
'{"IpfsHash":"bafkreid56by3qspgyxvppq3ggj2x4tec3akpnlffbhangjzzfc3lfh66yq","PinSize":45,"Timestamp":"2022-07-22T14:29:51.674Z","isDuplicate":true}'
pin
pin (cred:str, cid:str, fn=None, pinataMetadata=None)
Type | Default | Details | |
---|---|---|---|
cred | str | JWT key | |
cid | str | IPFS cid | |
fn | NoneType | None | Name of file |
pinataMetadata | NoneType | None | Add keys and values associated with IPFS CID |
Pin files
= {"dApp":"Ethereum Name Service",
metadata "token":"ENS"
}
"QmUUSHH2ycqciruPaRcptpUQDDeRiMV3G9PxA6KUupXTJV",fn="ens_airdrop",pinataMetadata=metadata) pin(creds,
{"id":"8cba5496-3cd4-4edb-92d7-023c0ce9c145","ipfsHash":"QmUUSHH2ycqciruPaRcptpUQDDeRiMV3G9PxA6KUupXTJV","status":"prechecking","name":"ens_airdrop"}
unpin
unpin (cred:str, cid:str)
Type | Details | |
---|---|---|
cred | str | JWT Key |
cid | str | IPFS CID |
Unpin IPFS CID
"QmUUSHH2ycqciruPaRcptpUQDDeRiMV3G9PxA6KUupXTJV") unpin(creds,
<Response [200]>
If IPFS CID isn’t pinned. A 500 error message will be returned
"QmZnxARhJWsCbTxiAzoRhnxHgMtoEkNJNS8DGLCBEMvm4V") unpin(creds,
<Response [500]>
edit_metadata
edit_metadata (cred:str, cid:str, name:str, metadata=None)
Type | Default | Details | |
---|---|---|---|
cred | str | JWT Key | |
cid | str | IPFS CID | |
name | str | filename | |
metadata | NoneType | None | Add keys and values associated with IPFS CID |
Edit metadata of already pinned IPFS CID
= {"type":"Test"}
metadata
"bafybeibcsnxt2sqzsvfg4lzg3iuxkfit37l3rz5gqmdxwsgec56qalmxie","name",metadata) edit_metadata(creds,
<Response [200]>
If IPFS CID is not actively pinned. A 500 error message will be returned
= {"type":"Test"}
metadata
"QmUUSHH2ycqciruPaRcptpUQDDeRiMV3G9PxA6KUupXTJV","name",metadata) edit_metadata(creds,
<Response [500]>
get_pinned_jobs
get_pinned_jobs (cred:str, params=None)
‘sort’ - Sort the results by the date added to the pinning queue (see value options below) ‘ASC’ - Sort by ascending dates ‘DESC’ - Sort by descending dates ‘status’ - Filter by the status of the job in the pinning queue (see potential statuses below) ‘prechecking’ - Pinata is running preliminary validations on your pin request. ‘searching’ - Pinata is actively searching for your content on the IPFS network. This may take some time if your content is isolated. ‘retrieving’ - Pinata has located your content and is now in the process of retrieving it. ‘expired’ - Pinata wasn’t able to find your content after a day of searching the IPFS network. Please make sure your content is hosted on the IPFS network before trying to pin again. ‘over_free_limit’ - Pinning this object would put you over the free tier limit. Please add a credit card to continue pinning content. ‘over_max_size’ - This object is too large of an item to pin. If you’re seeing this, please contact us for a more custom solution. ‘invalid_object’ - The object you’re attempting to pin isn’t readable by IPFS nodes. Please contact us if you receive this, as we’d like to better understand what you’re attempting to pin. ‘bad_host_node’ - You provided a host node that was either invalid or unreachable. Please make sure all provided host nodes are online and reachable. ‘ipfs_pin_hash’ - Retrieve the record for a specific IPFS hash ‘limit’ - Limit the amount of results returned per page of results (default is 5, and max is 1000) ‘offset’ - Provide the record offset for records being returned. This is how you retrieve records on additional pages (default is 0)
Type | Default | Details | |
---|---|---|---|
cred | str | JWT Key | |
params | NoneType | None | filtering pinned jobs |
Retrieve pinned jobs. If there are pending pin jobs, they will be returned in json format.
get_pinned_jobs(creds).json()
{'count': 0, 'rows': []}
get_pinned_files
get_pinned_files (cred:str, params=None)
Query Parameters = params
hashContains: (string) - Filter on alphanumeric characters inside of pin hashes. Hashes which do not include the characters passed in will not be returned. pinStart: (must be in ISO_8601 format) - Exclude pin records that were pinned before the passed in ‘pinStart’ datetime. pinEnd: (must be in ISO_8601 format) - Exclude pin records that were pinned after the passed in ‘pinEnd’ datetime. unpinStart: (must be in ISO_8601 format) - Exclude pin records that were unpinned before the passed in ‘unpinStart’ datetime. unpinEnd: (must be in ISO_8601 format) - Exclude pin records that were unpinned after the passed in ‘unpinEnd’ datetime. pinSizeMin: (integer) - The minimum byte size that pin record you’re looking for can have pinSizeMax: (integer) - The maximum byte size that pin record you’re looking for can have status: (string) - * Pass in ‘all’ for both pinned and unpinned records * Pass in ‘pinned’ for just pinned records (hashes that are currently pinned) * Pass in ‘unpinned’ for just unpinned records (previous hashes that are no longer being pinned on pinata) pageLimit: (integer) - This sets the amount of records that will be returned per API response. (Max 1000) pageOffset: (integer) - This tells the API how far to offset the record responses. For example, if there’s 30 records that match your query, and you passed in a pageLimit of 10, providing a pageOffset of 10 would return records 11-20.
Type | Default | Details | |
---|---|---|---|
cred | str | JWT Key | |
params | NoneType | None | Filter returned pinned files |
Retrieve pinned files and use filtering arguments such as hashContains
and status
to filter by IPFS CID and get only the file that is pinned. Pinata keeps a log of all the times an IPFS CID is pinned and unpinned. Therefore, without the status
filter multiple records would be returned.
={"hashContains":"bafybeibcsnxt2sqzsvfg4lzg3iuxkfit37l3rz5gqmdxwsgec56qalmxie","status":"pinned"}).json() get_pinned_files(creds,params
{'count': 1,
'rows': [{'id': 'a1a93991-99bc-4c12-9553-2e689046cf65',
'ipfs_pin_hash': 'bafybeibcsnxt2sqzsvfg4lzg3iuxkfit37l3rz5gqmdxwsgec56qalmxie',
'size': 3975284,
'user_id': 'd28f20cf-dfe0-4c8f-9272-26b9c2d8a3cd',
'date_pinned': '2022-06-17T22:43:08.303Z',
'date_unpinned': None,
'metadata': {'name': 'name',
'keyvalues': {'Type': 'Test',
'type': 'Test',
'company': 'Pinata',
'filetype': 'json'}},
'regions': [{'regionId': 'NYC1',
'currentReplicationCount': 1,
'desiredReplicationCount': 1}]}]}
get_datausage
get_datausage (cred:str, params=None)
Type | Default | Details | |
---|---|---|---|
cred | str | JWT Key | |
params | NoneType | None | Filter returned data usage statistics |
Retrieve data usage stats. The stats are in bytes.
get_datausage(creds).json()
{'pin_count': -223,
'pin_size_total': 349265187,
'pin_size_with_replications_total': 349265187}