Create an API Key and get Gateway URL
To create an API key, visit the Keys Page and click the “New Key” button in the top right. Once you do that you can select if you want your key to be admin or if you want to scope the privileges of the keys to certain endpoints or limit the number of uses. Make those selections, then give the key a name at the bottom, and click create key.If you are just getting started we recommend using Admin privileges, then move
to scope keys as you better understand your needs
The API keys are only shown once, be sure to copy them somewhere safe!
Server-Side Setup
Start up Next.js Project
As with any Next.js project we can start one up with the following commandcd into the repo and install pinata
.env.local file in the root of the project and put in the following variables:
JWT from the API key creation in the previous step as well as the Gateway Domain. The format of the Gateway domain should be mydomain.mypinata.cloud.
Setup Pinata
Create a directory calledutils in the root of the project and then make a file called config.ts inside of it. In that file we’ll export an instance of the Files SDK that we can use throughout the rest of the app.
utils/config.ts
Create Client Side Form
Next we’ll want to make an upload form on the client side that will allow someone to select a file and upload it. In the/app/page.tsx file take out the boiler plate code and use the following.
app/page.tsx
Next.js does have a file size limitation for what can be passed through the
API routes, so if you need more than the limit then it is advised to make
signed JWTs by following this
guide.
Create API Route
Next.js is ideal for file uploads as it’s API routes keep keys hidden and unexposed to the client. In the last step we made a function that uploads to/api/files so now we need to create that route by making /app/api/files/route.ts in our app.
Once you have created that file you can paste in the following code.
app/api/files/route.ts
POST request from the client, then send an API request to Pinata with the upload, then make one more request to get a signed URL we can use to see the content. Once complete it will return the URL to the client.
With our URL we can render the image we uploaded by adding the following code to the page.tsx file.
app/page.tsx
Client-Side Setup
Next.js has a file size limit as to what can be pass through API routes, so another workaround is to upload the file on the client side. To do this securely you can make an API route that generates a temporary upload URL that is used in the upload request.Start up Next.js Project
As with any Next.js project we can start one up with the following commandcd into the repo and install pinata
.env.local file in the root of the project and put in the following variables:
JWT from the API key creation in the previous step as well as the Gateway Domain. The format of the Gateway domain should be mydomain.mypinata.cloud.
Setup Pinata
Create a directory calledutils in the root of the project and then make a file called config.ts inside of it. In that file we’ll export an instance of the Files SDK that we can use throughout the rest of the app.
utils/config.ts
Create API Route
In order to upload on the client side we need to upload it securely without leaking our admin API key. To avoid this we’ll make an API route in our Next project underapp/api/url/route.ts.
Once you have created that file you can paste in the following code.
app/api/url/route.ts
GET request to /api/url it will return a temporary signed upload URL that is only valid for 30 seconds, which we can use on the client to make the upload request.
Create Client Side Form
Next we’ll want to make an upload form on the client side that will allow someone to select a file and upload it with the signed upload URL In the/app/page.tsx file take out the boiler plate code and use the following.
app/page.tsx
url() method in combination with our upload methods which passes in the signed upload url instead of trying to access the admin key. We can take the response and create a URL to access the file.
app/page.tsx