Pinata の Files API v3 でグループ機能を使用する際のはまりポイントと解決策をまとめます。
Pinata でアップロードしたファイルをグループで管理し、特定のグループに属するファイルのみを取得したいケースがあります。例えば、NFT登録フォームで使用する入力画像を「input」グループに格納し、そのグループからのみ画像を選択できるようにする場合などです。
はまりポイント#
1. レガシーAPI と V3 API のファイル管理は分離されている#
問題 : レガシーAPI(pinFileToIPFS)でアップロードしたファイルは、V3 API(/v3/files)では取得できません。逆も同様です。
解決策 : どちらかのAPIに統一する。V3 APIに移行する場合は、新規アップロードからV3を使用し、既存ファイルは手動でグループに追加するか、マイグレーションを検討。
2. V3 API のエンドポイントには {network} パラメータが必要#
問題 : V3 API のエンドポイントは {network} パラメータ(public または private)が必須。
解決策 : 通常のIPFSファイルには public を使用。
3. グループフィルタのパラメータ名が異なる#
問題 : アップロード時とリスト取得時でパラメータ名が異なる。
| 操作 | パラメータ名 |
|---|
| アップロード | group_id |
| リスト取得 | group |
4. JWT の種類による認証の違い#
問題 : Scoped Key で生成した JWT は V3 API で動作しない場合がある。
解決策 : Pinata ダッシュボードで Admin 権限を持つ新しい API Key を生成。
実装例#
環境変数#
アップロード API(V3)#
リスト取得 API(V3)#
V3 API エンドポイント一覧#
| 操作 | メソッド | エンドポイント |
|---|
| ファイルアップロード | POST | https://uploads.pinata.cloud/v3/files |
| ファイルリスト | GET | https://api.pinata.cloud/v3/files/{network} |
| グループ作成 | POST | https://api.pinata.cloud/v3/groups/{network} |
| グループにファイル追加 | PUT | https://api.pinata.cloud/v3/groups/{network}/{group_id}/ids/{file_id} |
グループIDの確認方法#
Pinata ダッシュボードでグループを選択すると、URLにグループIDが表示されます:
または、V3 API でファイルを取得すると、各ファイルの group_id フィールドで確認できます:
デバッグのコツ#
- まずグループフィルタなしでリスト取得 : ファイルが存在するか確認
- レスポンスの
group_id を確認: 期待するグループに属しているか確認 - エンドポイントURLを確認 :
/public や /private が含まれているか確認
まとめ#
| 項目 | レガシーAPI | V3 API |
|---|
| アップロード | api.pinata.cloud/pinning/pinFileToIPFS | uploads.pinata.cloud/v3/files |
| リスト | api.pinata.cloud/data/pinList | api.pinata.cloud/v3/files/{network} |
| グループパラメータ(アップロード) | なし | group_id |
| グループパラメータ(リスト) | groupId | group |
| CIDの取得 | response.IpfsHash | response.data.cid |
V3 API への移行時は、これらの違いに注意して実装してください。