{"id":"98cab717-18d4-49ec-b934-25dc1dd8da5e","entityType":"agent","slug":"clawhub-pinata-pinata-api","name":"Pinata API","canonicalUrl":"https://www.xpersona.co/agent/clawhub-pinata-pinata-api","canonicalPath":"/agent/clawhub-pinata-pinata-api","generatedAt":"2026-10-10T03:52:33.684Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T23:08:18.529Z","emptyReason":null},"description":"Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization. Skill: Pinata API Owner: pinata Summary: Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization. Tags: latest:1.0.10 Version history: v1.0.10 | 2026-04-22T16:52:31.191Z | user No user-facing changes in this release. Transferring ownership to the Pinata org. - Version bumped to 1.0.10. - No file changes detected. v1.0.9 | 2026-02-20T15:31:47.591Z | user - Environment vari","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.9K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s1796rems26khtzmdz8vvf4s9985b2s3:pinata-api","sourceUrl":"https://clawhub.ai/pinata/pinata-api","homepage":"https://clawhub.ai/pinata/skills/pinata-api","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/pinata/pinata-api","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/pinata/skills/pinata-api","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":66,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization. Skill: Pinata API Owner: pinata Summary: Pinata IPFS API "},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:08:18.529Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:08:18.529Z","emptyReason":null},"stars":null,"forks":null,"downloads":1909,"packageName":null,"latestVersion":"1.0.10","tractionLabel":"1.9K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T23:08:18.529Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T23:08:18.529Z","lastCrawledAt":"2026-10-09T23:08:18.529Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T23:08:18.529Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.10","createdAt":"2026-04-22T16:52:31.191Z","changelog":"No user-facing changes in this release. Transferring ownership to the Pinata org. - Version bumped to 1.0.10. - No file changes detected.","fileCount":3,"zipByteSize":4247},{"version":"1.0.9","createdAt":"2026-02-20T15:31:47.591Z","changelog":"- Environment variable names updated: `GATEWAY_URL` → `PINATA_GATEWAY_URL`, `GATEWAY_KEY` → `PINATA_GATEWAY_KEY` throughout the documentation and metadata. - References in sample URLs, usage instructions, and notes now consistently use `PINATA_GATEWAY_URL`. - No changes to endpoints or API functionality. Documentation only.","fileCount":2,"zipByteSize":2997},{"version":"1.0.8","createdAt":"2026-02-18T17:26:45.813Z","changelog":"- Documentation has been restructured and streamlined for clarity. - Descriptions and API examples have been reformatted for readability, using concise HTTP request formats. - Minor change to the description: \"AI-powered vector search\" updated to \"file vectorization.\" - Added summary tables for request bodies, required and optional parameters. - Section and endpoint headers have been standardized. - No functional or behavioral changes to the API.","fileCount":2,"zipByteSize":2994},{"version":"1.0.7","createdAt":"2026-02-18T16:56:28.462Z","changelog":"No user-facing changes. Documentation formatting and example environment variable usage have been updated for clarity. No file or functional changes detected in this version.","fileCount":2,"zipByteSize":3230},{"version":"1.0.6","createdAt":"2026-02-17T23:33:37.488Z","changelog":"- Major cleanup: removed all source files and configuration files from the skill. - SKILL.md documentation overhauled and converted to a new, frontmatter-based format.","fileCount":2,"zipByteSize":3479},{"version":"1.0.5","createdAt":"2026-02-13T22:46:03.419Z","changelog":"- Added repository link to the documentation. - No functional or API changes. - No user-facing updates except for documentation improvement.","fileCount":5,"zipByteSize":5085},{"version":"1.0.4","createdAt":"2026-02-13T22:06:01.744Z","changelog":"- Updated environment variable requirements: `GATEWAY_URL` is now required, and new optional `GATEWAY_KEY` added for accessing public IPFS content not tied to your Pinata account. - Documentation now references Pinata's Gateway Access Controls for public gateway key usage.","fileCount":5,"zipByteSize":5055},{"version":"1.0.2","createdAt":"2026-02-13T22:02:50.197Z","changelog":"- Added package.json to the project to define dependencies and metadata.","fileCount":5,"zipByteSize":4859}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1796rems26khtzmdz8vvf4s9985b2s3:pinata-api","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pinata-pinata-api/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pinata-pinata-api/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pinata-pinata-api/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pinata-pinata-api/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pinata-pinata-api/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-pinata-pinata-api/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T03:52:33.683Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pinata-pinata-api/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pinata-pinata-api/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pinata-pinata-api/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-pinata-pinata-api/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T23:08:18.529Z","emptyReason":null},"readme":"Skill: Pinata API\n\nOwner: pinata\n\nSummary: Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization.\n\nTags: latest:1.0.10\n\nVersion history:\n\nv1.0.10 | 2026-04-22T16:52:31.191Z | user\n\nNo user-facing changes in this release. Transferring ownership to the Pinata org. \n\n- Version bumped to 1.0.10.\n- No file changes detected.\n\nv1.0.9 | 2026-02-20T15:31:47.591Z | user\n\n- Environment variable names updated: `GATEWAY_URL` → `PINATA_GATEWAY_URL`, `GATEWAY_KEY` → `PINATA_GATEWAY_KEY` throughout the documentation and metadata.\n- References in sample URLs, usage instructions, and notes now consistently use `PINATA_GATEWAY_URL`.\n- No changes to endpoints or API functionality. Documentation only.\n\nv1.0.8 | 2026-02-18T17:26:45.813Z | user\n\n- Documentation has been restructured and streamlined for clarity.\n- Descriptions and API examples have been reformatted for readability, using concise HTTP request formats.\n- Minor change to the description: \"AI-powered vector search\" updated to \"file vectorization.\"\n- Added summary tables for request bodies, required and optional parameters.\n- Section and endpoint headers have been standardized.\n- No functional or behavioral changes to the API.\n\nv1.0.7 | 2026-02-18T16:56:28.462Z | user\n\nNo user-facing changes. Documentation formatting and example environment variable usage have been updated for clarity. No file or functional changes detected in this version.\n\nv1.0.6 | 2026-02-17T23:33:37.488Z | user\n\n- Major cleanup: removed all source files and configuration files from the skill.\n- SKILL.md documentation overhauled and converted to a new, frontmatter-based format.\n\nv1.0.5 | 2026-02-13T22:46:03.419Z | user\n\n- Added repository link to the documentation.\n- No functional or API changes.\n- No user-facing updates except for documentation improvement.\n\nv1.0.4 | 2026-02-13T22:06:01.744Z | user\n\n- Updated environment variable requirements: `GATEWAY_URL` is now required, and new optional `GATEWAY_KEY` added for accessing public IPFS content not tied to your Pinata account.\n- Documentation now references Pinata's Gateway Access Controls for public gateway key usage.\n\nv1.0.2 | 2026-02-13T22:02:50.197Z | user\n\n- Added package.json to the project to define dependencies and metadata.\n\nv1.0.1 | 2026-02-13T21:59:12.534Z | user\n\n- Initial release of the Pinata API skill.\n- Provides functions for file management, groups, gateway operations, digital signatures, payments, and AI-powered vector search on Pinata's IPFS services.\n- Requires `PINATA_JWT` environment variable for authentication.\n- Supports advanced actions such as signed uploads, payment instructions, and semantic search via vector embeddings.\n\nv1.0.0 | 2026-02-13T21:44:29.351Z | user\n\nPinata IPFS API skill for file storage, groups, gateways, and more\n\nArchive index:\n\nArchive v1.0.10: 3 files, 4247 bytes\n\nFiles: skill-card.md (2389b), SKILL.md (8132b), _meta.json (130b)\n\nFile v1.0.10:SKILL.md\n\n---\nname: pinata-api\ndescription: Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization.\nhomepage: https://pinata.cloud\nmetadata: {\"openclaw\": {\"emoji\": \"📌\", \"requires\": {\"env\": [\"PINATA_JWT\", \"PINATA_GATEWAY_URL\"]}, \"primaryEnv\": \"PINATA_JWT\"}}\n---\n\n# Pinata API\n\nAccess the Pinata IPFS storage API. Upload files, manage groups, create gateways, add signatures, set up x402 payments, and perform AI-powered vector search.\n\nRepo: https://github.com/PinataCloud/pinata-api-skill\n\n## Authentication\n\nAll requests require the header:\n\n```\nAuthorization: Bearer $PINATA_JWT\n```\n\n**Environment Variables:**\n\n- `PINATA_JWT` (required) - Your Pinata API JWT token. Get one at [app.pinata.cloud/developers/api-keys](https://app.pinata.cloud/developers/api-keys)\n- `PINATA_GATEWAY_URL` (required) - Your Pinata gateway domain (e.g., `your-gateway.mypinata.cloud`). Find yours at [app.pinata.cloud/gateway](https://app.pinata.cloud/gateway)\n- `PINATA_GATEWAY_KEY` (optional) - Gateway key for accessing public IPFS content not tied to your Pinata account. See [Gateway Access Controls](https://docs.pinata.cloud/gateways/gateway-access-controls#gateway-keys)\n\n### Test Authentication\n\n```\nGET https://api.pinata.cloud/data/testAuthentication\n```\n\n## Base URLs\n\n- **API:** `https://api.pinata.cloud`\n- **Uploads:** `https://uploads.pinata.cloud`\n\n## Common Parameters\n\n- `{network}` - IPFS network: `public` (default) or `private`\n- Pagination uses `limit` and `pageToken` query parameters\n\n## Files\n\n### Search Files\n\n```\nGET https://api.pinata.cloud/v3/files/{network}\n```\n\nQuery parameters (all optional): `name`, `cid`, `mimeType`, `limit`, `pageToken`\n\n### Get File by ID\n\n```\nGET https://api.pinata.cloud/v3/files/{network}/{id}\n```\n\n### Update File Metadata\n\n```\nPUT https://api.pinata.cloud/v3/files/{network}/{id}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"new-name\",\n  \"keyvalues\": {\"key\": \"value\"}\n}\n```\n\nBoth fields are optional.\n\n### Delete File\n\n```\nDELETE https://api.pinata.cloud/v3/files/{network}/{id}\n```\n\n### Upload File\n\n```\nPOST https://uploads.pinata.cloud/v3/files\nContent-Type: multipart/form-data\n```\n\nForm fields:\n- `file` (required) - The file to upload\n- `network` (optional) - `public` or `private`\n- `group_id` (optional) - Group to add the file to\n- `keyvalues` (optional) - JSON string of key-value metadata\n\n## Groups\n\n### List Groups\n\n```\nGET https://api.pinata.cloud/v3/groups/{network}\n```\n\nQuery parameters (all optional): `name`, `limit`, `pageToken`\n\n### Create Group\n\n```\nPOST https://api.pinata.cloud/v3/groups/{network}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"my-group\"\n}\n```\n\n### Get Group\n\n```\nGET https://api.pinata.cloud/v3/groups/{network}/{id}\n```\n\n### Update Group\n\n```\nPUT https://api.pinata.cloud/v3/groups/{network}/{id}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"updated-name\"\n}\n```\n\n### Delete Group\n\n```\nDELETE https://api.pinata.cloud/v3/groups/{network}/{id}\n```\n\n### Add File to Group\n\n```\nPUT https://api.pinata.cloud/v3/groups/{network}/{groupId}/ids/{fileId}\n```\n\n### Remove File from Group\n\n```\nDELETE https://api.pinata.cloud/v3/groups/{network}/{groupId}/ids/{fileId}\n```\n\n## Gateway & Downloads\n\n### Create Private Download Link\n\n```\nPOST https://api.pinata.cloud/v3/files/private/download_link\nContent-Type: application/json\n```\n\nCreates a temporary signed URL for accessing private files.\n\nBody:\n\n```json\n{\n  \"url\": \"https://{PINATA_GATEWAY_URL}/files/{cid}\",\n  \"expires\": 600,\n  \"date\": 1700000000,\n  \"method\": \"GET\"\n}\n```\n\n- `url` (required) - Full gateway URL using your `PINATA_GATEWAY_URL` and the file's CID\n- `expires` (optional) - Seconds until expiry (default: 600)\n- `date` (required) - Current Unix timestamp in seconds\n- `method` (required) - HTTP method, typically `GET`\n\n### Create Signed Upload URL\n\n```\nPOST https://uploads.pinata.cloud/v3/files/sign\nContent-Type: application/json\n```\n\nCreates a pre-signed URL for client-side uploads (no JWT needed on the client).\n\nBody:\n\n```json\n{\n  \"date\": 1700000000,\n  \"expires\": 3600\n}\n```\n\nOptional fields: `max_file_size` (bytes), `allow_mime_types` (array), `group_id`, `filename`, `keyvalues`\n\n## Signatures\n\nEIP-712 signatures for verifying content authenticity.\n\n### Add Signature\n\n```\nPOST https://api.pinata.cloud/v3/files/{network}/signature/{cid}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"signature\": \"0x...\",\n  \"address\": \"0x...\"\n}\n```\n\n### Get Signature\n\n```\nGET https://api.pinata.cloud/v3/files/{network}/signature/{cid}\n```\n\n### Delete Signature\n\n```\nDELETE https://api.pinata.cloud/v3/files/{network}/signature/{cid}\n```\n\n## Pin By CID\n\nPin existing IPFS content by its CID (public network only).\n\n### Pin a CID\n\n```\nPOST https://api.pinata.cloud/v3/files/public/pin_by_cid\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"cid\": \"bafybeig...\"\n}\n```\n\nOptional fields: `name`, `group_id`, `keyvalues`, `host_nodes` (array of multiaddrs)\n\n### Query Pin Requests\n\n```\nGET https://api.pinata.cloud/v3/files/public/pin_by_cid\n```\n\nQuery parameters (all optional): `order` (`ASC`/`DESC`), `status`, `cid`, `limit`, `pageToken`\n\n### Cancel Pin Request\n\n```\nDELETE https://api.pinata.cloud/v3/files/public/pin_by_cid/{id}\n```\n\n## x402 Payment Instructions\n\nCreate payment instructions for monetizing IPFS content using the x402 protocol with USDC on Base.\n\n**USDC Contract Addresses:**\n- Base mainnet: `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`\n- Base Sepolia (testnet): `0x036CbD53842c5426634e7929541eC2318f3dCF7e`\n\n**Important:** The `amount` field uses the smallest USDC unit (6 decimals). For example, $1.50 = `\"1500000\"`.\n\n### Create Payment Instruction\n\n```\nPOST https://api.pinata.cloud/v3/x402/payment_instructions\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"My Payment\",\n  \"description\": \"Pay to access this content\",\n  \"payment_requirements\": [\n    {\n      \"asset\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n      \"pay_to\": \"0xWALLET_ADDRESS\",\n      \"network\": \"base\",\n      \"amount\": \"1500000\"\n    }\n  ]\n}\n```\n\n- `name` (required) - Display name\n- `description` (optional) - Description\n- `payment_requirements` (required) - Array with `asset` (USDC contract address), `pay_to` (wallet address), `network` (`base` or `base-sepolia`), `amount` (smallest unit as string)\n\n### List Payment Instructions\n\n```\nGET https://api.pinata.cloud/v3/x402/payment_instructions\n```\n\nQuery parameters (all optional): `limit`, `pageToken`, `cid`, `name`, `id`\n\n### Get Payment Instruction\n\n```\nGET https://api.pinata.cloud/v3/x402/payment_instructions/{id}\n```\n\n### Delete Payment Instruction\n\n```\nDELETE https://api.pinata.cloud/v3/x402/payment_instructions/{id}\n```\n\n### Associate CID with Payment\n\n```\nPUT https://api.pinata.cloud/v3/x402/payment_instructions/{id}/cids/{cid}\n```\n\n### Remove CID from Payment\n\n```\nDELETE https://api.pinata.cloud/v3/x402/payment_instructions/{id}/cids/{cid}\n```\n\n## Vectorize (AI Search)\n\nGenerate vector embeddings for files and perform semantic search across groups.\n\n### Vectorize a File\n\n```\nPOST https://uploads.pinata.cloud/v3/vectorize/files/{file_id}\n```\n\n### Delete File Vectors\n\n```\nDELETE https://uploads.pinata.cloud/v3/vectorize/files/{file_id}\n```\n\n### Query Vectors (Semantic Search)\n\n```\nPOST https://uploads.pinata.cloud/v3/vectorize/groups/{group_id}/query\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"text\": \"search query here\"\n}\n```\n\n## Notes\n\n- All JSON endpoints require `Content-Type: application/json`\n- File uploads use `multipart/form-data` — do not set Content-Type manually\n- Pagination: use `pageToken` from the previous response to get the next page\n- Network defaults to `public` if not specified\n- Gateway URLs follow the pattern `https://{PINATA_GATEWAY_URL}/files/{cid}`\n\n## Resources\n\n- [Pinata Documentation](https://docs.pinata.cloud)\n- [API Keys](https://app.pinata.cloud/developers/api-keys)\n- [Gateway Setup](https://docs.pinata.cloud/gateways)\n- [x402 Protocol](https://docs.pinata.cloud/x402)\n- [Source (GitHub)](https://github.com/PinataCloud/pinata-api-skill)\n\nFile v1.0.10:_meta.json\n\n{\n  \"ownerId\": \"kn75pszqsdbzq42x925mcdpc9d812x85\",\n  \"slug\": \"pinata-api\",\n  \"version\": \"1.0.10\",\n  \"publishedAt\": 1776876751191\n}\n\nFile v1.0.10:skill-card.md\n\n## Description:\n\nPinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pinata](https://clawhub.ai/user/pinata)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to call the Pinata IPFS API for file storage, metadata and group management, gateway links, signed uploads/downloads, x402 payment instructions, and vector search.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill uses a Pinata JWT that can manage Pinata/IPFS resources in the user's account.\n\nMitigation: Use a scoped Pinata API token where possible and install the skill only when account-level Pinata API access is intended.\n\nRisk: API requests can delete files or groups, create signed links, vectorize private content, or configure x402 payment instructions.\n\nMitigation: Review agent-proposed requests before execution, especially destructive operations, signed upload or download links, private-content vectorization, and payment-related changes.\n\n## Reference(s):\n\n- [Pinata Skill Page](https://clawhub.ai/pinata/skills/pinata-api)\n- [Pinata Documentation](https://docs.pinata.cloud)\n- [Pinata API Keys](https://app.pinata.cloud/developers/api-keys)\n- [Gateway Setup](https://docs.pinata.cloud/gateways)\n- [Gateway Access Controls](https://docs.pinata.cloud/gateways/gateway-access-controls#gateway-keys)\n- [x402 Protocol](https://docs.pinata.cloud/x402)\n- [Source (GitHub, artifact-listed resource; not server-resolved provenance)](https://github.com/PinataCloud/pinata-api-skill)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with HTTP examples, JSON request bodies, and configuration guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses PINATA_JWT and PINATA_GATEWAY_URL environment variables; outputs may include authenticated Pinata API requests for account resources.]\n\n## Skill Version(s):\n\n1.0.10 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.9: 2 files, 2997 bytes\n\nFiles: SKILL.md (8132b), _meta.json (129b)\n\nFile v1.0.9:SKILL.md\n\n---\nname: pinata-api\ndescription: Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization.\nhomepage: https://pinata.cloud\nmetadata: {\"openclaw\": {\"emoji\": \"📌\", \"requires\": {\"env\": [\"PINATA_JWT\", \"PINATA_GATEWAY_URL\"]}, \"primaryEnv\": \"PINATA_JWT\"}}\n---\n\n# Pinata API\n\nAccess the Pinata IPFS storage API. Upload files, manage groups, create gateways, add signatures, set up x402 payments, and perform AI-powered vector search.\n\nRepo: https://github.com/PinataCloud/pinata-api-skill\n\n## Authentication\n\nAll requests require the header:\n\n```\nAuthorization: Bearer $PINATA_JWT\n```\n\n**Environment Variables:**\n\n- `PINATA_JWT` (required) - Your Pinata API JWT token. Get one at [app.pinata.cloud/developers/api-keys](https://app.pinata.cloud/developers/api-keys)\n- `PINATA_GATEWAY_URL` (required) - Your Pinata gateway domain (e.g., `your-gateway.mypinata.cloud`). Find yours at [app.pinata.cloud/gateway](https://app.pinata.cloud/gateway)\n- `PINATA_GATEWAY_KEY` (optional) - Gateway key for accessing public IPFS content not tied to your Pinata account. See [Gateway Access Controls](https://docs.pinata.cloud/gateways/gateway-access-controls#gateway-keys)\n\n### Test Authentication\n\n```\nGET https://api.pinata.cloud/data/testAuthentication\n```\n\n## Base URLs\n\n- **API:** `https://api.pinata.cloud`\n- **Uploads:** `https://uploads.pinata.cloud`\n\n## Common Parameters\n\n- `{network}` - IPFS network: `public` (default) or `private`\n- Pagination uses `limit` and `pageToken` query parameters\n\n## Files\n\n### Search Files\n\n```\nGET https://api.pinata.cloud/v3/files/{network}\n```\n\nQuery parameters (all optional): `name`, `cid`, `mimeType`, `limit`, `pageToken`\n\n### Get File by ID\n\n```\nGET https://api.pinata.cloud/v3/files/{network}/{id}\n```\n\n### Update File Metadata\n\n```\nPUT https://api.pinata.cloud/v3/files/{network}/{id}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"new-name\",\n  \"keyvalues\": {\"key\": \"value\"}\n}\n```\n\nBoth fields are optional.\n\n### Delete File\n\n```\nDELETE https://api.pinata.cloud/v3/files/{network}/{id}\n```\n\n### Upload File\n\n```\nPOST https://uploads.pinata.cloud/v3/files\nContent-Type: multipart/form-data\n```\n\nForm fields:\n- `file` (required) - The file to upload\n- `network` (optional) - `public` or `private`\n- `group_id` (optional) - Group to add the file to\n- `keyvalues` (optional) - JSON string of key-value metadata\n\n## Groups\n\n### List Groups\n\n```\nGET https://api.pinata.cloud/v3/groups/{network}\n```\n\nQuery parameters (all optional): `name`, `limit`, `pageToken`\n\n### Create Group\n\n```\nPOST https://api.pinata.cloud/v3/groups/{network}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"my-group\"\n}\n```\n\n### Get Group\n\n```\nGET https://api.pinata.cloud/v3/groups/{network}/{id}\n```\n\n### Update Group\n\n```\nPUT https://api.pinata.cloud/v3/groups/{network}/{id}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"updated-name\"\n}\n```\n\n### Delete Group\n\n```\nDELETE https://api.pinata.cloud/v3/groups/{network}/{id}\n```\n\n### Add File to Group\n\n```\nPUT https://api.pinata.cloud/v3/groups/{network}/{groupId}/ids/{fileId}\n```\n\n### Remove File from Group\n\n```\nDELETE https://api.pinata.cloud/v3/groups/{network}/{groupId}/ids/{fileId}\n```\n\n## Gateway & Downloads\n\n### Create Private Download Link\n\n```\nPOST https://api.pinata.cloud/v3/files/private/download_link\nContent-Type: application/json\n```\n\nCreates a temporary signed URL for accessing private files.\n\nBody:\n\n```json\n{\n  \"url\": \"https://{PINATA_GATEWAY_URL}/files/{cid}\",\n  \"expires\": 600,\n  \"date\": 1700000000,\n  \"method\": \"GET\"\n}\n```\n\n- `url` (required) - Full gateway URL using your `PINATA_GATEWAY_URL` and the file's CID\n- `expires` (optional) - Seconds until expiry (default: 600)\n- `date` (required) - Current Unix timestamp in seconds\n- `method` (required) - HTTP method, typically `GET`\n\n### Create Signed Upload URL\n\n```\nPOST https://uploads.pinata.cloud/v3/files/sign\nContent-Type: application/json\n```\n\nCreates a pre-signed URL for client-side uploads (no JWT needed on the client).\n\nBody:\n\n```json\n{\n  \"date\": 1700000000,\n  \"expires\": 3600\n}\n```\n\nOptional fields: `max_file_size` (bytes), `allow_mime_types` (array), `group_id`, `filename`, `keyvalues`\n\n## Signatures\n\nEIP-712 signatures for verifying content authenticity.\n\n### Add Signature\n\n```\nPOST https://api.pinata.cloud/v3/files/{network}/signature/{cid}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"signature\": \"0x...\",\n  \"address\": \"0x...\"\n}\n```\n\n### Get Signature\n\n```\nGET https://api.pinata.cloud/v3/files/{network}/signature/{cid}\n```\n\n### Delete Signature\n\n```\nDELETE https://api.pinata.cloud/v3/files/{network}/signature/{cid}\n```\n\n## Pin By CID\n\nPin existing IPFS content by its CID (public network only).\n\n### Pin a CID\n\n```\nPOST https://api.pinata.cloud/v3/files/public/pin_by_cid\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"cid\": \"bafybeig...\"\n}\n```\n\nOptional fields: `name`, `group_id`, `keyvalues`, `host_nodes` (array of multiaddrs)\n\n### Query Pin Requests\n\n```\nGET https://api.pinata.cloud/v3/files/public/pin_by_cid\n```\n\nQuery parameters (all optional): `order` (`ASC`/`DESC`), `status`, `cid`, `limit`, `pageToken`\n\n### Cancel Pin Request\n\n```\nDELETE https://api.pinata.cloud/v3/files/public/pin_by_cid/{id}\n```\n\n## x402 Payment Instructions\n\nCreate payment instructions for monetizing IPFS content using the x402 protocol with USDC on Base.\n\n**USDC Contract Addresses:**\n- Base mainnet: `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`\n- Base Sepolia (testnet): `0x036CbD53842c5426634e7929541eC2318f3dCF7e`\n\n**Important:** The `amount` field uses the smallest USDC unit (6 decimals). For example, $1.50 = `\"1500000\"`.\n\n### Create Payment Instruction\n\n```\nPOST https://api.pinata.cloud/v3/x402/payment_instructions\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"My Payment\",\n  \"description\": \"Pay to access this content\",\n  \"payment_requirements\": [\n    {\n      \"asset\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n      \"pay_to\": \"0xWALLET_ADDRESS\",\n      \"network\": \"base\",\n      \"amount\": \"1500000\"\n    }\n  ]\n}\n```\n\n- `name` (required) - Display name\n- `description` (optional) - Description\n- `payment_requirements` (required) - Array with `asset` (USDC contract address), `pay_to` (wallet address), `network` (`base` or `base-sepolia`), `amount` (smallest unit as string)\n\n### List Payment Instructions\n\n```\nGET https://api.pinata.cloud/v3/x402/payment_instructions\n```\n\nQuery parameters (all optional): `limit`, `pageToken`, `cid`, `name`, `id`\n\n### Get Payment Instruction\n\n```\nGET https://api.pinata.cloud/v3/x402/payment_instructions/{id}\n```\n\n### Delete Payment Instruction\n\n```\nDELETE https://api.pinata.cloud/v3/x402/payment_instructions/{id}\n```\n\n### Associate CID with Payment\n\n```\nPUT https://api.pinata.cloud/v3/x402/payment_instructions/{id}/cids/{cid}\n```\n\n### Remove CID from Payment\n\n```\nDELETE https://api.pinata.cloud/v3/x402/payment_instructions/{id}/cids/{cid}\n```\n\n## Vectorize (AI Search)\n\nGenerate vector embeddings for files and perform semantic search across groups.\n\n### Vectorize a File\n\n```\nPOST https://uploads.pinata.cloud/v3/vectorize/files/{file_id}\n```\n\n### Delete File Vectors\n\n```\nDELETE https://uploads.pinata.cloud/v3/vectorize/files/{file_id}\n```\n\n### Query Vectors (Semantic Search)\n\n```\nPOST https://uploads.pinata.cloud/v3/vectorize/groups/{group_id}/query\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"text\": \"search query here\"\n}\n```\n\n## Notes\n\n- All JSON endpoints require `Content-Type: application/json`\n- File uploads use `multipart/form-data` — do not set Content-Type manually\n- Pagination: use `pageToken` from the previous response to get the next page\n- Network defaults to `public` if not specified\n- Gateway URLs follow the pattern `https://{PINATA_GATEWAY_URL}/files/{cid}`\n\n## Resources\n\n- [Pinata Documentation](https://docs.pinata.cloud)\n- [API Keys](https://app.pinata.cloud/developers/api-keys)\n- [Gateway Setup](https://docs.pinata.cloud/gateways)\n- [x402 Protocol](https://docs.pinata.cloud/x402)\n- [Source (GitHub)](https://github.com/PinataCloud/pinata-api-skill)\n\nFile v1.0.9:_meta.json\n\n{\n  \"ownerId\": \"kn75pszqsdbzq42x925mcdpc9d812x85\",\n  \"slug\": \"pinata-api\",\n  \"version\": \"1.0.9\",\n  \"publishedAt\": 1771601507591\n}\n\nArchive v1.0.8: 2 files, 2994 bytes\n\nFiles: SKILL.md (8090b), _meta.json (129b)\n\nFile v1.0.8:SKILL.md\n\n---\nname: pinata-api\ndescription: Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization.\nhomepage: https://pinata.cloud\nmetadata: {\"openclaw\": {\"emoji\": \"📌\", \"requires\": {\"env\": [\"PINATA_JWT\", \"GATEWAY_URL\"]}, \"primaryEnv\": \"PINATA_JWT\"}}\n---\n\n# Pinata API\n\nAccess the Pinata IPFS storage API. Upload files, manage groups, create gateways, add signatures, set up x402 payments, and perform AI-powered vector search.\n\nRepo: https://github.com/PinataCloud/pinata-api-skill\n\n## Authentication\n\nAll requests require the header:\n\n```\nAuthorization: Bearer $PINATA_JWT\n```\n\n**Environment Variables:**\n\n- `PINATA_JWT` (required) - Your Pinata API JWT token. Get one at [app.pinata.cloud/developers/api-keys](https://app.pinata.cloud/developers/api-keys)\n- `GATEWAY_URL` (required) - Your Pinata gateway domain (e.g., `your-gateway.mypinata.cloud`). Find yours at [app.pinata.cloud/gateway](https://app.pinata.cloud/gateway)\n- `GATEWAY_KEY` (optional) - Gateway key for accessing public IPFS content not tied to your Pinata account. See [Gateway Access Controls](https://docs.pinata.cloud/gateways/gateway-access-controls#gateway-keys)\n\n### Test Authentication\n\n```\nGET https://api.pinata.cloud/data/testAuthentication\n```\n\n## Base URLs\n\n- **API:** `https://api.pinata.cloud`\n- **Uploads:** `https://uploads.pinata.cloud`\n\n## Common Parameters\n\n- `{network}` - IPFS network: `public` (default) or `private`\n- Pagination uses `limit` and `pageToken` query parameters\n\n## Files\n\n### Search Files\n\n```\nGET https://api.pinata.cloud/v3/files/{network}\n```\n\nQuery parameters (all optional): `name`, `cid`, `mimeType`, `limit`, `pageToken`\n\n### Get File by ID\n\n```\nGET https://api.pinata.cloud/v3/files/{network}/{id}\n```\n\n### Update File Metadata\n\n```\nPUT https://api.pinata.cloud/v3/files/{network}/{id}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"new-name\",\n  \"keyvalues\": {\"key\": \"value\"}\n}\n```\n\nBoth fields are optional.\n\n### Delete File\n\n```\nDELETE https://api.pinata.cloud/v3/files/{network}/{id}\n```\n\n### Upload File\n\n```\nPOST https://uploads.pinata.cloud/v3/files\nContent-Type: multipart/form-data\n```\n\nForm fields:\n- `file` (required) - The file to upload\n- `network` (optional) - `public` or `private`\n- `group_id` (optional) - Group to add the file to\n- `keyvalues` (optional) - JSON string of key-value metadata\n\n## Groups\n\n### List Groups\n\n```\nGET https://api.pinata.cloud/v3/groups/{network}\n```\n\nQuery parameters (all optional): `name`, `limit`, `pageToken`\n\n### Create Group\n\n```\nPOST https://api.pinata.cloud/v3/groups/{network}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"my-group\"\n}\n```\n\n### Get Group\n\n```\nGET https://api.pinata.cloud/v3/groups/{network}/{id}\n```\n\n### Update Group\n\n```\nPUT https://api.pinata.cloud/v3/groups/{network}/{id}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"updated-name\"\n}\n```\n\n### Delete Group\n\n```\nDELETE https://api.pinata.cloud/v3/groups/{network}/{id}\n```\n\n### Add File to Group\n\n```\nPUT https://api.pinata.cloud/v3/groups/{network}/{groupId}/ids/{fileId}\n```\n\n### Remove File from Group\n\n```\nDELETE https://api.pinata.cloud/v3/groups/{network}/{groupId}/ids/{fileId}\n```\n\n## Gateway & Downloads\n\n### Create Private Download Link\n\n```\nPOST https://api.pinata.cloud/v3/files/private/download_link\nContent-Type: application/json\n```\n\nCreates a temporary signed URL for accessing private files.\n\nBody:\n\n```json\n{\n  \"url\": \"https://{GATEWAY_URL}/files/{cid}\",\n  \"expires\": 600,\n  \"date\": 1700000000,\n  \"method\": \"GET\"\n}\n```\n\n- `url` (required) - Full gateway URL using your `GATEWAY_URL` and the file's CID\n- `expires` (optional) - Seconds until expiry (default: 600)\n- `date` (required) - Current Unix timestamp in seconds\n- `method` (required) - HTTP method, typically `GET`\n\n### Create Signed Upload URL\n\n```\nPOST https://uploads.pinata.cloud/v3/files/sign\nContent-Type: application/json\n```\n\nCreates a pre-signed URL for client-side uploads (no JWT needed on the client).\n\nBody:\n\n```json\n{\n  \"date\": 1700000000,\n  \"expires\": 3600\n}\n```\n\nOptional fields: `max_file_size` (bytes), `allow_mime_types` (array), `group_id`, `filename`, `keyvalues`\n\n## Signatures\n\nEIP-712 signatures for verifying content authenticity.\n\n### Add Signature\n\n```\nPOST https://api.pinata.cloud/v3/files/{network}/signature/{cid}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"signature\": \"0x...\",\n  \"address\": \"0x...\"\n}\n```\n\n### Get Signature\n\n```\nGET https://api.pinata.cloud/v3/files/{network}/signature/{cid}\n```\n\n### Delete Signature\n\n```\nDELETE https://api.pinata.cloud/v3/files/{network}/signature/{cid}\n```\n\n## Pin By CID\n\nPin existing IPFS content by its CID (public network only).\n\n### Pin a CID\n\n```\nPOST https://api.pinata.cloud/v3/files/public/pin_by_cid\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"cid\": \"bafybeig...\"\n}\n```\n\nOptional fields: `name`, `group_id`, `keyvalues`, `host_nodes` (array of multiaddrs)\n\n### Query Pin Requests\n\n```\nGET https://api.pinata.cloud/v3/files/public/pin_by_cid\n```\n\nQuery parameters (all optional): `order` (`ASC`/`DESC`), `status`, `cid`, `limit`, `pageToken`\n\n### Cancel Pin Request\n\n```\nDELETE https://api.pinata.cloud/v3/files/public/pin_by_cid/{id}\n```\n\n## x402 Payment Instructions\n\nCreate payment instructions for monetizing IPFS content using the x402 protocol with USDC on Base.\n\n**USDC Contract Addresses:**\n- Base mainnet: `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`\n- Base Sepolia (testnet): `0x036CbD53842c5426634e7929541eC2318f3dCF7e`\n\n**Important:** The `amount` field uses the smallest USDC unit (6 decimals). For example, $1.50 = `\"1500000\"`.\n\n### Create Payment Instruction\n\n```\nPOST https://api.pinata.cloud/v3/x402/payment_instructions\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"My Payment\",\n  \"description\": \"Pay to access this content\",\n  \"payment_requirements\": [\n    {\n      \"asset\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n      \"pay_to\": \"0xWALLET_ADDRESS\",\n      \"network\": \"base\",\n      \"amount\": \"1500000\"\n    }\n  ]\n}\n```\n\n- `name` (required) - Display name\n- `description` (optional) - Description\n- `payment_requirements` (required) - Array with `asset` (USDC contract address), `pay_to` (wallet address), `network` (`base` or `base-sepolia`), `amount` (smallest unit as string)\n\n### List Payment Instructions\n\n```\nGET https://api.pinata.cloud/v3/x402/payment_instructions\n```\n\nQuery parameters (all optional): `limit`, `pageToken`, `cid`, `name`, `id`\n\n### Get Payment Instruction\n\n```\nGET https://api.pinata.cloud/v3/x402/payment_instructions/{id}\n```\n\n### Delete Payment Instruction\n\n```\nDELETE https://api.pinata.cloud/v3/x402/payment_instructions/{id}\n```\n\n### Associate CID with Payment\n\n```\nPUT https://api.pinata.cloud/v3/x402/payment_instructions/{id}/cids/{cid}\n```\n\n### Remove CID from Payment\n\n```\nDELETE https://api.pinata.cloud/v3/x402/payment_instructions/{id}/cids/{cid}\n```\n\n## Vectorize (AI Search)\n\nGenerate vector embeddings for files and perform semantic search across groups.\n\n### Vectorize a File\n\n```\nPOST https://uploads.pinata.cloud/v3/vectorize/files/{file_id}\n```\n\n### Delete File Vectors\n\n```\nDELETE https://uploads.pinata.cloud/v3/vectorize/files/{file_id}\n```\n\n### Query Vectors (Semantic Search)\n\n```\nPOST https://uploads.pinata.cloud/v3/vectorize/groups/{group_id}/query\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"text\": \"search query here\"\n}\n```\n\n## Notes\n\n- All JSON endpoints require `Content-Type: application/json`\n- File uploads use `multipart/form-data` — do not set Content-Type manually\n- Pagination: use `pageToken` from the previous response to get the next page\n- Network defaults to `public` if not specified\n- Gateway URLs follow the pattern `https://{GATEWAY_URL}/files/{cid}`\n\n## Resources\n\n- [Pinata Documentation](https://docs.pinata.cloud)\n- [API Keys](https://app.pinata.cloud/developers/api-keys)\n- [Gateway Setup](https://docs.pinata.cloud/gateways)\n- [x402 Protocol](https://docs.pinata.cloud/x402)\n- [Source (GitHub)](https://github.com/PinataCloud/pinata-api-skill)\n\nFile v1.0.8:_meta.json\n\n{\n  \"ownerId\": \"kn75pszqsdbzq42x925mcdpc9d812x85\",\n  \"slug\": \"pinata-api\",\n  \"version\": \"1.0.8\",\n  \"publishedAt\": 1771435605813\n}\n\nArchive v1.0.7: 2 files, 3230 bytes\n\nFiles: SKILL.md (9789b), _meta.json (129b)\n\nFile v1.0.7:SKILL.md\n\n---\nname: pinata-api\ndescription: Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and AI-powered vector search.\nhomepage: https://pinata.cloud\nmetadata: {\"openclaw\": {\"emoji\": \"📌\", \"requires\": {\"env\": [\"PINATA_JWT\", \"GATEWAY_URL\"]}, \"primaryEnv\": \"PINATA_JWT\"}}\n---\n\n# Pinata API\n\nAccess the Pinata IPFS storage API. Upload files, manage groups, create gateways, add signatures, set up x402 payments, and perform AI-powered vector search.\n\nRepo: https://github.com/PinataCloud/pinata-api-skill\n\n## Authentication\n\nAll requests require a Pinata JWT in the Authorization header:\n\n```\nAuthorization: Bearer $PINATA_JWT\n```\n\n**Environment Variables:**\n\n- `PINATA_JWT` (required) - Your Pinata API JWT token. Get one at [app.pinata.cloud/developers/api-keys](https://app.pinata.cloud/developers/api-keys)\n- `GATEWAY_URL` (required) - Your Pinata gateway domain (e.g., `your-gateway.mypinata.cloud`). Find yours at [app.pinata.cloud/gateway](https://app.pinata.cloud/gateway)\n- `GATEWAY_KEY` (optional) - Gateway key for accessing public IPFS content not tied to your Pinata account. See [Gateway Access Controls](https://docs.pinata.cloud/gateways/gateway-access-controls#gateway-keys)\n\n### Test Authentication\n\n```bash\ncurl -s https://api.pinata.cloud/data/testAuthentication \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n## Base URLs\n\n- **API:** `https://api.pinata.cloud`\n- **Uploads:** `https://uploads.pinata.cloud`\n\n## Common Parameters\n\n- `network` - IPFS network: `public` (default) or `private`\n- Pagination uses `limit` and `pageToken` query parameters\n\n## Files\n\n### Search Files\n\n```bash\nGET /v3/files/{network}?name=...&cid=...&mimeType=...&limit=...&pageToken=...\n```\n\n```bash\ncurl -s \"https://api.pinata.cloud/v3/files/public?limit=10\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\nQuery parameters (all optional): `name`, `cid`, `mimeType`, `limit`, `pageToken`\n\n### Get File by ID\n\n```bash\nGET /v3/files/{network}/{id}\n```\n\n```bash\ncurl -s \"https://api.pinata.cloud/v3/files/public/{id}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n### Update File Metadata\n\n```bash\nPUT /v3/files/{network}/{id}\n```\n\n```bash\ncurl -s -X PUT \"https://api.pinata.cloud/v3/files/public/{id}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"new-name\", \"keyvalues\": {\"key\": \"value\"}}'\n```\n\n### Delete File\n\n```bash\nDELETE /v3/files/{network}/{id}\n```\n\n```bash\ncurl -s -X DELETE \"https://api.pinata.cloud/v3/files/public/{id}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n### Upload File\n\n```bash\nPOST https://uploads.pinata.cloud/v3/files\n```\n\nUses `multipart/form-data`. Do **not** set `Content-Type` manually — let the HTTP client set the boundary.\n\n```bash\ncurl -s -X POST \"https://uploads.pinata.cloud/v3/files\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -F \"file=@FILE_PATH\" \\\n  -F \"network=public\" \\\n  -F \"group_id=GROUP_ID\" \\\n  -F 'keyvalues={\"key\":\"value\"}'\n```\n\nOptional form fields: `network`, `group_id`, `keyvalues` (JSON string)\n\n## Groups\n\n### List Groups\n\n```bash\nGET /v3/groups/{network}?name=...&limit=...&pageToken=...\n```\n\n```bash\ncurl -s \"https://api.pinata.cloud/v3/groups/public?limit=10\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n### Create Group\n\n```bash\nPOST /v3/groups/{network}\n```\n\n```bash\ncurl -s -X POST \"https://api.pinata.cloud/v3/groups/public\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"my-group\"}'\n```\n\n### Get Group\n\n```bash\nGET /v3/groups/{network}/{id}\n```\n\n### Update Group\n\n```bash\nPUT /v3/groups/{network}/{id}\n```\n\n```bash\ncurl -s -X PUT \"https://api.pinata.cloud/v3/groups/public/{id}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"updated-name\"}'\n```\n\n### Delete Group\n\n```bash\nDELETE /v3/groups/{network}/{id}\n```\n\n### Add File to Group\n\n```bash\nPUT /v3/groups/{network}/{groupId}/ids/{fileId}\n```\n\n```bash\ncurl -s -X PUT \"https://api.pinata.cloud/v3/groups/public/{groupId}/ids/{fileId}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n### Remove File from Group\n\n```bash\nDELETE /v3/groups/{network}/{groupId}/ids/{fileId}\n```\n\n## Gateway & Downloads\n\n### Create Private Download Link\n\n```bash\nPOST /v3/files/private/download_link\n```\n\nCreates a temporary signed URL for accessing private files.\n\n```bash\ncurl -s -X POST \"https://api.pinata.cloud/v3/files/private/download_link\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://YOUR_GATEWAY_URL/files/YOUR_CID\",\n    \"expires\": 600,\n    \"date\": CURRENT_UNIX_TIMESTAMP,\n    \"method\": \"GET\"\n  }'\n```\n\n- `url` (required) - Full gateway URL: `https://{GATEWAY_URL}/files/{cid}`\n- `expires` (optional) - Seconds until expiry (default: 600)\n- `date` (required) - Current Unix timestamp in seconds\n- `method` (required) - HTTP method, typically `\"GET\"`\n\n### Create Signed Upload URL\n\n```bash\nPOST https://uploads.pinata.cloud/v3/files/sign\n```\n\nCreates a pre-signed URL for client-side uploads (no JWT needed on the client).\n\n```bash\ncurl -s -X POST \"https://uploads.pinata.cloud/v3/files/sign\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"date\": CURRENT_UNIX_TIMESTAMP,\n    \"expires\": 3600\n  }'\n```\n\nOptional fields: `max_file_size` (bytes), `allow_mime_types` (array), `group_id`, `filename`, `keyvalues`\n\n## Signatures\n\nEIP-712 signatures for verifying content authenticity.\n\n### Add Signature\n\n```bash\nPOST /v3/files/{network}/signature/{cid}\n```\n\n```bash\ncurl -s -X POST \"https://api.pinata.cloud/v3/files/public/signature/{cid}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"signature\": \"0x...\", \"address\": \"0x...\"}'\n```\n\n### Get Signature\n\n```bash\nGET /v3/files/{network}/signature/{cid}\n```\n\n### Delete Signature\n\n```bash\nDELETE /v3/files/{network}/signature/{cid}\n```\n\n## Pin By CID\n\nPin existing IPFS content by its CID (public network only).\n\n### Pin a CID\n\n```bash\nPOST /v3/files/public/pin_by_cid\n```\n\n```bash\ncurl -s -X POST \"https://api.pinata.cloud/v3/files/public/pin_by_cid\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"cid\": \"bafybeig...\"}'\n```\n\nOptional fields: `name`, `group_id`, `keyvalues`, `host_nodes` (array of multiaddrs)\n\n### Query Pin Requests\n\n```bash\nGET /v3/files/public/pin_by_cid?order=ASC&status=...&cid=...&limit=...&pageToken=...\n```\n\n### Cancel Pin Request\n\n```bash\nDELETE /v3/files/public/pin_by_cid/{id}\n```\n\n## x402 Payment Instructions\n\nCreate payment instructions for monetizing IPFS content using the x402 protocol with USDC on Base.\n\n**USDC Contract Addresses:**\n- Base mainnet: `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`\n- Base Sepolia (testnet): `0x036CbD53842c5426634e7929541eC2318f3dCF7e`\n\n**Important:** The `amount` field uses the smallest USDC unit (6 decimals). For example, $1.50 = `\"1500000\"`.\n\n### Create Payment Instruction\n\n```bash\nPOST /v3/x402/payment_instructions\n```\n\n```bash\ncurl -s -X POST \"https://api.pinata.cloud/v3/x402/payment_instructions\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"My Payment\",\n    \"description\": \"Pay to access this content\",\n    \"payment_requirements\": [{\n      \"asset\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n      \"pay_to\": \"0xYOUR_WALLET_ADDRESS\",\n      \"network\": \"base\",\n      \"amount\": \"1500000\"\n    }]\n  }'\n```\n\n- `name` (required) - Display name\n- `description` (optional) - Description\n- `payment_requirements` (required) - Array with `asset` (USDC address), `pay_to` (wallet), `network` (`\"base\"` or `\"base-sepolia\"`), `amount` (smallest unit string)\n\n### List Payment Instructions\n\n```bash\nGET /v3/x402/payment_instructions?limit=...&pageToken=...&cid=...&name=...&id=...\n```\n\n### Get Payment Instruction\n\n```bash\nGET /v3/x402/payment_instructions/{id}\n```\n\n### Delete Payment Instruction\n\n```bash\nDELETE /v3/x402/payment_instructions/{id}\n```\n\n### Associate CID with Payment\n\n```bash\nPUT /v3/x402/payment_instructions/{id}/cids/{cid}\n```\n\n```bash\ncurl -s -X PUT \"https://api.pinata.cloud/v3/x402/payment_instructions/{id}/cids/{cid}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n### Remove CID from Payment\n\n```bash\nDELETE /v3/x402/payment_instructions/{id}/cids/{cid}\n```\n\n## Vectorize (AI Search)\n\nGenerate vector embeddings for files and perform semantic search across groups.\n\n### Vectorize a File\n\n```bash\nPOST https://uploads.pinata.cloud/v3/vectorize/files/{file_id}\n```\n\n```bash\ncurl -s -X POST \"https://uploads.pinata.cloud/v3/vectorize/files/{file_id}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n### Delete File Vectors\n\n```bash\nDELETE https://uploads.pinata.cloud/v3/vectorize/files/{file_id}\n```\n\n### Query Vectors (Semantic Search)\n\n```bash\nPOST https://uploads.pinata.cloud/v3/vectorize/groups/{group_id}/query\n```\n\n```bash\ncurl -s -X POST \"https://uploads.pinata.cloud/v3/vectorize/groups/{group_id}/query\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\": \"search query here\"}'\n```\n\n## Notes\n\n- All JSON endpoints require `Content-Type: application/json`\n- File uploads use `multipart/form-data` — do not set Content-Type manually\n- Pagination: use `pageToken` from the previous response to get the next page\n- Network defaults to `public` if not specified\n- Gateway URLs follow the pattern `https://{GATEWAY_URL}/files/{cid}`\n\n## Resources\n\n- [Pinata Documentation](https://docs.pinata.cloud)\n- [API Keys](https://app.pinata.cloud/developers/api-keys)\n- [Gateway Setup](https://docs.pinata.cloud/gateways)\n- [x402 Protocol](https://docs.pinata.cloud/x402)\n- [Source (GitHub)](https://github.com/PinataCloud/pinata-api-skill)\n\nFile v1.0.7:_meta.json\n\n{\n  \"ownerId\": \"kn75pszqsdbzq42x925mcdpc9d812x85\",\n  \"slug\": \"pinata-api\",\n  \"version\": \"1.0.7\",\n  \"publishedAt\": 1771433788462\n}\n\nArchive v1.0.6: 2 files, 3479 bytes\n\nFiles: SKILL.md (10433b), _meta.json (129b)\n\nFile v1.0.6:SKILL.md\n\n---\nname: pinata-api\ndescription: Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and AI-powered vector search.\nhomepage: https://pinata.cloud\nmetadata: {\"openclaw\": {\"emoji\": \"📌\", \"requires\": {\"env\": [\"PINATA_JWT\", \"GATEWAY_URL\"]}, \"primaryEnv\": \"PINATA_JWT\"}}\n---\n\n# Pinata API\n\nAccess the Pinata IPFS storage API. Upload files, manage groups, create gateways, add signatures, set up x402 payments, and perform AI-powered vector search.\n\nRepo: https://github.com/PinataCloud/pinata-api-skill\n\n## Authentication\n\nAll requests require a Pinata JWT in the Authorization header:\n\n```\nAuthorization: Bearer $PINATA_JWT\n```\n\n**Environment Variables:**\n\n- `PINATA_JWT` (required) - Your Pinata API JWT token. Get one at [app.pinata.cloud/developers/api-keys](https://app.pinata.cloud/developers/api-keys)\n- `GATEWAY_URL` (required) - Your Pinata gateway domain (e.g., `your-gateway.mypinata.cloud`). Find yours at [app.pinata.cloud/gateway](https://app.pinata.cloud/gateway)\n- `GATEWAY_KEY` (optional) - Gateway key for accessing public IPFS content not tied to your Pinata account. See [Gateway Access Controls](https://docs.pinata.cloud/gateways/gateway-access-controls#gateway-keys)\n\n### Test Authentication\n\n```bash\ncurl -s https://api.pinata.cloud/data/testAuthentication \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n## Base URLs\n\n- **API:** `https://api.pinata.cloud`\n- **Uploads:** `https://uploads.pinata.cloud`\n\n## Common Parameters\n\n- `network` - IPFS network: `public` (default) or `private`\n- Pagination uses `limit` and `pageToken` query parameters\n\n## Files\n\n### Search Files\n\n```bash\nGET /v3/files/{network}?name=...&cid=...&mimeType=...&limit=...&pageToken=...\n```\n\n```bash\ncurl -s \"https://api.pinata.cloud/v3/files/public?limit=10\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\nQuery parameters (all optional): `name`, `cid`, `mimeType`, `limit`, `pageToken`\n\n### Get File by ID\n\n```bash\nGET /v3/files/{network}/{id}\n```\n\n```bash\ncurl -s \"https://api.pinata.cloud/v3/files/public/{id}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n### Update File Metadata\n\n```bash\nPUT /v3/files/{network}/{id}\n```\n\n```bash\ncurl -s -X PUT \"https://api.pinata.cloud/v3/files/public/{id}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"new-name\", \"keyvalues\": {\"key\": \"value\"}}'\n```\n\n### Delete File\n\n```bash\nDELETE /v3/files/{network}/{id}\n```\n\n```bash\ncurl -s -X DELETE \"https://api.pinata.cloud/v3/files/public/{id}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n### Upload File\n\n```bash\nPOST https://uploads.pinata.cloud/v3/files\n```\n\nUses `multipart/form-data`. Do **not** set `Content-Type` manually — let the HTTP client set the boundary.\n\n```bash\ncurl -s -X POST \"https://uploads.pinata.cloud/v3/files\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -F \"file=@/path/to/file.png\" \\\n  -F \"network=public\" \\\n  -F \"group_id={group_id}\" \\\n  -F 'keyvalues={\"key\":\"value\"}'\n```\n\n```javascript\nconst fs = require('fs');\nconst FormData = require('form-data');\n\nconst form = new FormData();\nform.append('file', fs.createReadStream('/path/to/file.png'));\nform.append('network', 'public');\n\nconst response = await fetch('https://uploads.pinata.cloud/v3/files', {\n  method: 'POST',\n  headers: { 'Authorization': `Bearer ${process.env.PINATA_JWT}` },\n  body: form,\n});\n```\n\n```python\nimport os, requests\n\nresponse = requests.post(\n    'https://uploads.pinata.cloud/v3/files',\n    headers={'Authorization': f'Bearer {os.environ[\"PINATA_JWT\"]}'},\n    files={'file': open('/path/to/file.png', 'rb')},\n    data={'network': 'public'},\n)\n```\n\nOptional form fields: `network`, `group_id`, `keyvalues` (JSON string)\n\n## Groups\n\n### List Groups\n\n```bash\nGET /v3/groups/{network}?name=...&limit=...&pageToken=...\n```\n\n```bash\ncurl -s \"https://api.pinata.cloud/v3/groups/public?limit=10\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n### Create Group\n\n```bash\nPOST /v3/groups/{network}\n```\n\n```bash\ncurl -s -X POST \"https://api.pinata.cloud/v3/groups/public\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"my-group\"}'\n```\n\n### Get Group\n\n```bash\nGET /v3/groups/{network}/{id}\n```\n\n### Update Group\n\n```bash\nPUT /v3/groups/{network}/{id}\n```\n\n```bash\ncurl -s -X PUT \"https://api.pinata.cloud/v3/groups/public/{id}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"updated-name\"}'\n```\n\n### Delete Group\n\n```bash\nDELETE /v3/groups/{network}/{id}\n```\n\n### Add File to Group\n\n```bash\nPUT /v3/groups/{network}/{groupId}/ids/{fileId}\n```\n\n```bash\ncurl -s -X PUT \"https://api.pinata.cloud/v3/groups/public/{groupId}/ids/{fileId}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n### Remove File from Group\n\n```bash\nDELETE /v3/groups/{network}/{groupId}/ids/{fileId}\n```\n\n## Gateway & Downloads\n\n### Create Private Download Link\n\n```bash\nPOST /v3/files/private/download_link\n```\n\nCreates a temporary signed URL for accessing private files.\n\n```bash\ncurl -s -X POST \"https://api.pinata.cloud/v3/files/private/download_link\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"url\": \"https://'\"$GATEWAY_URL\"'/files/{cid}\",\n    \"expires\": 600,\n    \"date\": '\"$(date +%s)\"',\n    \"method\": \"GET\"\n  }'\n```\n\n- `url` (required) - Full gateway URL: `https://{GATEWAY_URL}/files/{cid}`\n- `expires` (optional) - Seconds until expiry (default: 600)\n- `date` (required) - Current Unix timestamp in seconds\n- `method` (required) - HTTP method, typically `\"GET\"`\n\n### Create Signed Upload URL\n\n```bash\nPOST https://uploads.pinata.cloud/v3/files/sign\n```\n\nCreates a pre-signed URL for client-side uploads (no JWT needed on the client).\n\n```bash\ncurl -s -X POST \"https://uploads.pinata.cloud/v3/files/sign\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"date\": '\"$(date +%s)\"',\n    \"expires\": 3600\n  }'\n```\n\nOptional fields: `max_file_size` (bytes), `allow_mime_types` (array), `group_id`, `filename`, `keyvalues`\n\n## Signatures\n\nEIP-712 signatures for verifying content authenticity.\n\n### Add Signature\n\n```bash\nPOST /v3/files/{network}/signature/{cid}\n```\n\n```bash\ncurl -s -X POST \"https://api.pinata.cloud/v3/files/public/signature/{cid}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"signature\": \"0x...\", \"address\": \"0x...\"}'\n```\n\n### Get Signature\n\n```bash\nGET /v3/files/{network}/signature/{cid}\n```\n\n### Delete Signature\n\n```bash\nDELETE /v3/files/{network}/signature/{cid}\n```\n\n## Pin By CID\n\nPin existing IPFS content by its CID (public network only).\n\n### Pin a CID\n\n```bash\nPOST /v3/files/public/pin_by_cid\n```\n\n```bash\ncurl -s -X POST \"https://api.pinata.cloud/v3/files/public/pin_by_cid\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"cid\": \"bafybeig...\"}'\n```\n\nOptional fields: `name`, `group_id`, `keyvalues`, `host_nodes` (array of multiaddrs)\n\n### Query Pin Requests\n\n```bash\nGET /v3/files/public/pin_by_cid?order=ASC&status=...&cid=...&limit=...&pageToken=...\n```\n\n### Cancel Pin Request\n\n```bash\nDELETE /v3/files/public/pin_by_cid/{id}\n```\n\n## x402 Payment Instructions\n\nCreate payment instructions for monetizing IPFS content using the x402 protocol with USDC on Base.\n\n**USDC Contract Addresses:**\n- Base mainnet: `0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913`\n- Base Sepolia (testnet): `0x036CbD53842c5426634e7929541eC2318f3dCF7e`\n\n**Important:** The `amount` field uses the smallest USDC unit (6 decimals). For example, $1.50 = `\"1500000\"`.\n\n### Create Payment Instruction\n\n```bash\nPOST /v3/x402/payment_instructions\n```\n\n```bash\ncurl -s -X POST \"https://api.pinata.cloud/v3/x402/payment_instructions\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"name\": \"My Payment\",\n    \"description\": \"Pay to access this content\",\n    \"payment_requirements\": [{\n      \"asset\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n      \"pay_to\": \"0xYOUR_WALLET_ADDRESS\",\n      \"network\": \"base\",\n      \"amount\": \"1500000\"\n    }]\n  }'\n```\n\n- `name` (required) - Display name\n- `description` (optional) - Description\n- `payment_requirements` (required) - Array with `asset` (USDC address), `pay_to` (wallet), `network` (`\"base\"` or `\"base-sepolia\"`), `amount` (smallest unit string)\n\n### List Payment Instructions\n\n```bash\nGET /v3/x402/payment_instructions?limit=...&pageToken=...&cid=...&name=...&id=...\n```\n\n### Get Payment Instruction\n\n```bash\nGET /v3/x402/payment_instructions/{id}\n```\n\n### Delete Payment Instruction\n\n```bash\nDELETE /v3/x402/payment_instructions/{id}\n```\n\n### Associate CID with Payment\n\n```bash\nPUT /v3/x402/payment_instructions/{id}/cids/{cid}\n```\n\n```bash\ncurl -s -X PUT \"https://api.pinata.cloud/v3/x402/payment_instructions/{id}/cids/{cid}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n### Remove CID from Payment\n\n```bash\nDELETE /v3/x402/payment_instructions/{id}/cids/{cid}\n```\n\n## Vectorize (AI Search)\n\nGenerate vector embeddings for files and perform semantic search across groups.\n\n### Vectorize a File\n\n```bash\nPOST https://uploads.pinata.cloud/v3/vectorize/files/{file_id}\n```\n\n```bash\ncurl -s -X POST \"https://uploads.pinata.cloud/v3/vectorize/files/{file_id}\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\"\n```\n\n### Delete File Vectors\n\n```bash\nDELETE https://uploads.pinata.cloud/v3/vectorize/files/{file_id}\n```\n\n### Query Vectors (Semantic Search)\n\n```bash\nPOST https://uploads.pinata.cloud/v3/vectorize/groups/{group_id}/query\n```\n\n```bash\ncurl -s -X POST \"https://uploads.pinata.cloud/v3/vectorize/groups/{group_id}/query\" \\\n  -H \"Authorization: Bearer $PINATA_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"text\": \"search query here\"}'\n```\n\n## Notes\n\n- All JSON endpoints require `Content-Type: application/json`\n- File uploads use `multipart/form-data` — do not set Content-Type manually\n- Pagination: use `pageToken` from the previous response to get the next page\n- Network defaults to `public` if not specified\n- Gateway URLs follow the pattern `https://{GATEWAY_URL}/files/{cid}`\n\n## Resources\n\n- [Pinata Documentation](https://docs.pinata.cloud)\n- [API Keys](https://app.pinata.cloud/developers/api-keys)\n- [Gateway Setup](https://docs.pinata.cloud/gateways)\n- [x402 Protocol](https://docs.pinata.cloud/x402)\n- [Source (GitHub)](https://github.com/PinataCloud/pinata-api-skill)\n\nFile v1.0.6:_meta.json\n\n{\n  \"ownerId\": \"kn75pszqsdbzq42x925mcdpc9d812x85\",\n  \"slug\": \"pinata-api\",\n  \"version\": \"1.0.6\",\n  \"publishedAt\": 1771371217488\n}\n\nArchive v1.0.5: 5 files, 5085 bytes\n\nFiles: index.ts (17825b), package.json (121b), skill.json (752b), SKILL.md (3308b), _meta.json (129b)\n\nFile v1.0.5:SKILL.md\n\n# Pinata API Skill\n\nInteract with Pinata's IPFS storage services for file management, groups, gateways, signatures, payments, and AI-powered vector search.\n\nRepo: https://github.com/PinataCloud/pinata-api-skill\n\n## Setup\n\nSet the following environment variables:\n\n- `PINATA_JWT` (required) - Your Pinata API JWT token\n- `GATEWAY_URL` (required) - Your Pinata gateway domain (e.g., `your-gateway.mypinata.cloud`)\n- `GATEWAY_KEY` (optional) - Gateway key for accessing public IPFS content not tied to your Pinata account. Required when fetching content from the broader IPFS network. See [Gateway Access Controls](https://docs.pinata.cloud/gateways/gateway-access-controls#gateway-keys)\n\n## Available Functions\n\n### Authentication\n\n- `testAuthentication()` - Verify your Pinata JWT is valid\n\n### Files\n\n- `searchFiles({ network?, name?, cid?, mimeType?, limit?, pageToken? })` - Search files\n- `getFileById({ network?, id })` - Get file by ID\n- `updateFile({ network?, id, name?, keyvalues? })` - Update file metadata\n- `deleteFile({ network?, id })` - Delete a file\n- `uploadFile({ file, fileName, network?, group_id?, keyvalues? })` - Upload a file\n\n### Groups\n\n- `listGroups({ network?, name?, limit?, pageToken? })` - List groups\n- `createGroup({ network?, name })` - Create a group\n- `getGroup({ network?, id })` - Get group by ID\n- `updateGroup({ network?, id, name })` - Update group\n- `deleteGroup({ network?, id })` - Delete a group\n- `addFileToGroup({ network?, groupId, fileId })` - Add file to group\n- `removeFileFromGroup({ network?, groupId, fileId })` - Remove file from group\n\n### Gateway & Downloads\n\n- `createPrivateDownloadLink({ cid, expires? })` - Create temporary download link\n- `createSignedUploadUrl({ expires, max_file_size?, allow_mime_types?, group_id?, filename?, keyvalues? })` - Create signed upload URL for client-side uploads\n\n### Signatures\n\n- `addSignature({ network?, cid, signature, address })` - Add EIP-712 signature\n- `getSignature({ network?, cid })` - Get signature for CID\n- `deleteSignature({ network?, cid })` - Delete signature\n\n### Pin By CID\n\n- `pinByCid({ cid, name?, group_id?, keyvalues?, host_nodes? })` - Pin existing IPFS content\n- `queryPinRequests({ order?, status?, cid?, limit?, pageToken? })` - Query pin request status\n- `cancelPinRequest({ id })` - Cancel pending pin request\n\n### x402 Payment Instructions\n\n- `createPaymentInstruction({ name, pay_to, amount_usdc, network?, description? })` - Create payment instruction\n- `listPaymentInstructions({ limit?, pageToken?, cid?, name?, id? })` - List payment instructions\n- `getPaymentInstruction({ id })` - Get payment instruction\n- `deletePaymentInstruction({ id })` - Delete payment instruction\n- `addCidToPaymentInstruction({ id, cid })` - Associate CID with payment\n- `removeCidFromPaymentInstruction({ id, cid })` - Remove CID from payment\n\n### Vectorize (AI Search)\n\n- `vectorizeFile({ file_id })` - Generate vector embeddings for a file\n- `deleteFileVectors({ file_id })` - Delete vectors for a file\n- `queryVectors({ group_id, text })` - Semantic search within a group\n\n## Parameters\n\n- `network` - IPFS network: `\"public\"` (default) or `\"private\"`\n- `amount_usdc` - USD amount as string (e.g., `\"1.50\"` for $1.50)\n- `blockchain network` - For payments: `\"base\"` (default) or `\"base-sepolia\"`\n\nFile v1.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn75pszqsdbzq42x925mcdpc9d812x85\",\n  \"slug\": \"pinata-api\",\n  \"version\": \"1.0.5\",\n  \"publishedAt\": 1771022763419\n}\n\nFile v1.0.5:package.json\n\n{\n  \"name\": \"pinata-api-skill\",\n  \"version\": \"1.0.1\",\n  \"type\": \"module\",\n  \"dependencies\": {\n    \"zod\": \"^3.24.2\"\n  }\n}\n\nFile v1.0.5:skill.json\n\n{\n  \"name\": \"pinata-api\",\n  \"version\": \"1.0.5\",\n  \"description\": \"Pinata IPFS API skill for file storage, groups, gateways, and more\",\n  \"entrypoint\": \"index.ts\",\n  \"source\": \"https://github.com/PinataCloud/pinata-mcp\",\n  \"homepage\": \"https://pinata.cloud\",\n  \"env\": {\n    \"PINATA_JWT\": {\n      \"description\": \"Pinata API JWT token for authentication\",\n      \"required\": true\n    },\n    \"GATEWAY_URL\": {\n      \"description\": \"Pinata gateway domain (e.g., your-gateway.mypinata.cloud)\",\n      \"required\": true\n    },\n    \"GATEWAY_KEY\": {\n      \"description\": \"Gateway key for accessing public IPFS content not tied to your Pinata account. See https://docs.pinata.cloud/gateways/gateway-access-controls#gateway-keys\",\n      \"required\": false\n    }\n  }\n}\n\nArchive v1.0.4: 5 files, 5055 bytes\n\nFiles: index.ts (17825b), package.json (121b), skill.json (752b), SKILL.md (3253b), _meta.json (129b)\n\nFile v1.0.4:SKILL.md\n\n# Pinata API Skill\n\nInteract with Pinata's IPFS storage services for file management, groups, gateways, signatures, payments, and AI-powered vector search.\n\n## Setup\n\nSet the following environment variables:\n\n- `PINATA_JWT` (required) - Your Pinata API JWT token\n- `GATEWAY_URL` (required) - Your Pinata gateway domain (e.g., `your-gateway.mypinata.cloud`)\n- `GATEWAY_KEY` (optional) - Gateway key for accessing public IPFS content not tied to your Pinata account. Required when fetching content from the broader IPFS network. See [Gateway Access Controls](https://docs.pinata.cloud/gateways/gateway-access-controls#gateway-keys)\n\n## Available Functions\n\n### Authentication\n\n- `testAuthentication()` - Verify your Pinata JWT is valid\n\n### Files\n\n- `searchFiles({ network?, name?, cid?, mimeType?, limit?, pageToken? })` - Search files\n- `getFileById({ network?, id })` - Get file by ID\n- `updateFile({ network?, id, name?, keyvalues? })` - Update file metadata\n- `deleteFile({ network?, id })` - Delete a file\n- `uploadFile({ file, fileName, network?, group_id?, keyvalues? })` - Upload a file\n\n### Groups\n\n- `listGroups({ network?, name?, limit?, pageToken? })` - List groups\n- `createGroup({ network?, name })` - Create a group\n- `getGroup({ network?, id })` - Get group by ID\n- `updateGroup({ network?, id, name })` - Update group\n- `deleteGroup({ network?, id })` - Delete a group\n- `addFileToGroup({ network?, groupId, fileId })` - Add file to group\n- `removeFileFromGroup({ network?, groupId, fileId })` - Remove file from group\n\n### Gateway & Downloads\n\n- `createPrivateDownloadLink({ cid, expires? })` - Create temporary download link\n- `createSignedUploadUrl({ expires, max_file_size?, allow_mime_types?, group_id?, filename?, keyvalues? })` - Create signed upload URL for client-side uploads\n\n### Signatures\n\n- `addSignature({ network?, cid, signature, address })` - Add EIP-712 signature\n- `getSignature({ network?, cid })` - Get signature for CID\n- `deleteSignature({ network?, cid })` - Delete signature\n\n### Pin By CID\n\n- `pinByCid({ cid, name?, group_id?, keyvalues?, host_nodes? })` - Pin existing IPFS content\n- `queryPinRequests({ order?, status?, cid?, limit?, pageToken? })` - Query pin request status\n- `cancelPinRequest({ id })` - Cancel pending pin request\n\n### x402 Payment Instructions\n\n- `createPaymentInstruction({ name, pay_to, amount_usdc, network?, description? })` - Create payment instruction\n- `listPaymentInstructions({ limit?, pageToken?, cid?, name?, id? })` - List payment instructions\n- `getPaymentInstruction({ id })` - Get payment instruction\n- `deletePaymentInstruction({ id })` - Delete payment instruction\n- `addCidToPaymentInstruction({ id, cid })` - Associate CID with payment\n- `removeCidFromPaymentInstruction({ id, cid })` - Remove CID from payment\n\n### Vectorize (AI Search)\n\n- `vectorizeFile({ file_id })` - Generate vector embeddings for a file\n- `deleteFileVectors({ file_id })` - Delete vectors for a file\n- `queryVectors({ group_id, text })` - Semantic search within a group\n\n## Parameters\n\n- `network` - IPFS network: `\"public\"` (default) or `\"private\"`\n- `amount_usdc` - USD amount as string (e.g., `\"1.50\"` for $1.50)\n- `blockchain network` - For payments: `\"base\"` (default) or `\"base-sepolia\"`\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn75pszqsdbzq42x925mcdpc9d812x85\",\n  \"slug\": \"pinata-api\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1771020361744\n}\n\nFile v1.0.4:package.json\n\n{\n  \"name\": \"pinata-api-skill\",\n  \"version\": \"1.0.1\",\n  \"type\": \"module\",\n  \"dependencies\": {\n    \"zod\": \"^3.24.2\"\n  }\n}\n\nFile v1.0.4:skill.json\n\n{\n  \"name\": \"pinata-api\",\n  \"version\": \"1.0.4\",\n  \"description\": \"Pinata IPFS API skill for file storage, groups, gateways, and more\",\n  \"entrypoint\": \"index.ts\",\n  \"source\": \"https://github.com/PinataCloud/pinata-mcp\",\n  \"homepage\": \"https://pinata.cloud\",\n  \"env\": {\n    \"PINATA_JWT\": {\n      \"description\": \"Pinata API JWT token for authentication\",\n      \"required\": true\n    },\n    \"GATEWAY_URL\": {\n      \"description\": \"Pinata gateway domain (e.g., your-gateway.mypinata.cloud)\",\n      \"required\": true\n    },\n    \"GATEWAY_KEY\": {\n      \"description\": \"Gateway key for accessing public IPFS content not tied to your Pinata account. See https://docs.pinata.cloud/gateways/gateway-access-controls#gateway-keys\",\n      \"required\": false\n    }\n  }\n}\n\nArchive v1.0.2: 5 files, 4859 bytes\n\nFiles: index.ts (17825b), package.json (121b), skill.json (522b), SKILL.md (2980b), _meta.json (129b)\n\nFile v1.0.2:SKILL.md\n\n# Pinata API Skill\n\nInteract with Pinata's IPFS storage services for file management, groups, gateways, signatures, payments, and AI-powered vector search.\n\n## Setup\n\nSet the following environment variables:\n\n- `PINATA_JWT` (required) - Your Pinata API JWT token\n- `GATEWAY_URL` (optional) - Your Pinata gateway domain (e.g., `your-gateway.mypinata.cloud`)\n\n## Available Functions\n\n### Authentication\n\n- `testAuthentication()` - Verify your Pinata JWT is valid\n\n### Files\n\n- `searchFiles({ network?, name?, cid?, mimeType?, limit?, pageToken? })` - Search files\n- `getFileById({ network?, id })` - Get file by ID\n- `updateFile({ network?, id, name?, keyvalues? })` - Update file metadata\n- `deleteFile({ network?, id })` - Delete a file\n- `uploadFile({ file, fileName, network?, group_id?, keyvalues? })` - Upload a file\n\n### Groups\n\n- `listGroups({ network?, name?, limit?, pageToken? })` - List groups\n- `createGroup({ network?, name })` - Create a group\n- `getGroup({ network?, id })` - Get group by ID\n- `updateGroup({ network?, id, name })` - Update group\n- `deleteGroup({ network?, id })` - Delete a group\n- `addFileToGroup({ network?, groupId, fileId })` - Add file to group\n- `removeFileFromGroup({ network?, groupId, fileId })` - Remove file from group\n\n### Gateway & Downloads\n\n- `createPrivateDownloadLink({ cid, expires? })` - Create temporary download link\n- `createSignedUploadUrl({ expires, max_file_size?, allow_mime_types?, group_id?, filename?, keyvalues? })` - Create signed upload URL for client-side uploads\n\n### Signatures\n\n- `addSignature({ network?, cid, signature, address })` - Add EIP-712 signature\n- `getSignature({ network?, cid })` - Get signature for CID\n- `deleteSignature({ network?, cid })` - Delete signature\n\n### Pin By CID\n\n- `pinByCid({ cid, name?, group_id?, keyvalues?, host_nodes? })` - Pin existing IPFS content\n- `queryPinRequests({ order?, status?, cid?, limit?, pageToken? })` - Query pin request status\n- `cancelPinRequest({ id })` - Cancel pending pin request\n\n### x402 Payment Instructions\n\n- `createPaymentInstruction({ name, pay_to, amount_usdc, network?, description? })` - Create payment instruction\n- `listPaymentInstructions({ limit?, pageToken?, cid?, name?, id? })` - List payment instructions\n- `getPaymentInstruction({ id })` - Get payment instruction\n- `deletePaymentInstruction({ id })` - Delete payment instruction\n- `addCidToPaymentInstruction({ id, cid })` - Associate CID with payment\n- `removeCidFromPaymentInstruction({ id, cid })` - Remove CID from payment\n\n### Vectorize (AI Search)\n\n- `vectorizeFile({ file_id })` - Generate vector embeddings for a file\n- `deleteFileVectors({ file_id })` - Delete vectors for a file\n- `queryVectors({ group_id, text })` - Semantic search within a group\n\n## Parameters\n\n- `network` - IPFS network: `\"public\"` (default) or `\"private\"`\n- `amount_usdc` - USD amount as string (e.g., `\"1.50\"` for $1.50)\n- `blockchain network` - For payments: `\"base\"` (default) or `\"base-sepolia\"`\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn75pszqsdbzq42x925mcdpc9d812x85\",\n  \"slug\": \"pinata-api\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1771020170197\n}\n\nFile v1.0.2:package.json\n\n{\n  \"name\": \"pinata-api-skill\",\n  \"version\": \"1.0.1\",\n  \"type\": \"module\",\n  \"dependencies\": {\n    \"zod\": \"^3.24.2\"\n  }\n}\n\nFile v1.0.2:skill.json\n\n{\n  \"name\": \"pinata-api\",\n  \"version\": \"1.0.2\",\n  \"description\": \"Pinata IPFS API skill for file storage, groups, gateways, and more\",\n  \"entrypoint\": \"index.ts\",\n  \"source\": \"https://github.com/PinataCloud/pinata-mcp\",\n  \"homepage\": \"https://pinata.cloud\",\n  \"env\": {\n    \"PINATA_JWT\": {\n      \"description\": \"Pinata API JWT token for authentication\",\n      \"required\": true\n    },\n    \"GATEWAY_URL\": {\n      \"description\": \"Pinata gateway domain (e.g., your-gateway.mypinata.cloud)\",\n      \"required\": false\n    }\n  }\n}\n\nArchive v1.0.1: 4 files, 4647 bytes\n\nFiles: index.ts (17825b), skill.json (522b), SKILL.md (2980b), _meta.json (129b)\n\nFile v1.0.1:SKILL.md\n\n# Pinata API Skill\n\nInteract with Pinata's IPFS storage services for file management, groups, gateways, signatures, payments, and AI-powered vector search.\n\n## Setup\n\nSet the following environment variables:\n\n- `PINATA_JWT` (required) - Your Pinata API JWT token\n- `GATEWAY_URL` (optional) - Your Pinata gateway domain (e.g., `your-gateway.mypinata.cloud`)\n\n## Available Functions\n\n### Authentication\n\n- `testAuthentication()` - Verify your Pinata JWT is valid\n\n### Files\n\n- `searchFiles({ network?, name?, cid?, mimeType?, limit?, pageToken? })` - Search files\n- `getFileById({ network?, id })` - Get file by ID\n- `updateFile({ network?, id, name?, keyvalues? })` - Update file metadata\n- `deleteFile({ network?, id })` - Delete a file\n- `uploadFile({ file, fileName, network?, group_id?, keyvalues? })` - Upload a file\n\n### Groups\n\n- `listGroups({ network?, name?, limit?, pageToken? })` - List groups\n- `createGroup({ network?, name })` - Create a group\n- `getGroup({ network?, id })` - Get group by ID\n- `updateGroup({ network?, id, name })` - Update group\n- `deleteGroup({ network?, id })` - Delete a group\n- `addFileToGroup({ network?, groupId, fileId })` - Add file to group\n- `removeFileFromGroup({ network?, groupId, fileId })` - Remove file from group\n\n### Gateway & Downloads\n\n- `createPrivateDownloadLink({ cid, expires? })` - Create temporary download link\n- `createSignedUploadUrl({ expires, max_file_size?, allow_mime_types?, group_id?, filename?, keyvalues? })` - Create signed upload URL for client-side uploads\n\n### Signatures\n\n- `addSignature({ network?, cid, signature, address })` - Add EIP-712 signature\n- `getSignature({ network?, cid })` - Get signature for CID\n- `deleteSignature({ network?, cid })` - Delete signature\n\n### Pin By CID\n\n- `pinByCid({ cid, name?, group_id?, keyvalues?, host_nodes? })` - Pin existing IPFS content\n- `queryPinRequests({ order?, status?, cid?, limit?, pageToken? })` - Query pin request status\n- `cancelPinRequest({ id })` - Cancel pending pin request\n\n### x402 Payment Instructions\n\n- `createPaymentInstruction({ name, pay_to, amount_usdc, network?, description? })` - Create payment instruction\n- `listPaymentInstructions({ limit?, pageToken?, cid?, name?, id? })` - List payment instructions\n- `getPaymentInstruction({ id })` - Get payment instruction\n- `deletePaymentInstruction({ id })` - Delete payment instruction\n- `addCidToPaymentInstruction({ id, cid })` - Associate CID with payment\n- `removeCidFromPaymentInstruction({ id, cid })` - Remove CID from payment\n\n### Vectorize (AI Search)\n\n- `vectorizeFile({ file_id })` - Generate vector embeddings for a file\n- `deleteFileVectors({ file_id })` - Delete vectors for a file\n- `queryVectors({ group_id, text })` - Semantic search within a group\n\n## Parameters\n\n- `network` - IPFS network: `\"public\"` (default) or `\"private\"`\n- `amount_usdc` - USD amount as string (e.g., `\"1.50\"` for $1.50)\n- `blockchain network` - For payments: `\"base\"` (default) or `\"base-sepolia\"`\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn75pszqsdbzq42x925mcdpc9d812x85\",\n  \"slug\": \"pinata-api\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1771019952534\n}\n\nFile v1.0.1:skill.json\n\n{\n  \"name\": \"pinata-api\",\n  \"version\": \"1.0.1\",\n  \"description\": \"Pinata IPFS API skill for file storage, groups, gateways, and more\",\n  \"entrypoint\": \"index.ts\",\n  \"source\": \"https://github.com/PinataCloud/pinata-mcp\",\n  \"homepage\": \"https://pinata.cloud\",\n  \"env\": {\n    \"PINATA_JWT\": {\n      \"description\": \"Pinata API JWT token for authentication\",\n      \"required\": true\n    },\n    \"GATEWAY_URL\": {\n      \"description\": \"Pinata gateway domain (e.g., your-gateway.mypinata.cloud)\",\n      \"required\": false\n    }\n  }\n}\n\nArchive v1.0.0: 4 files, 4489 bytes\n\nFiles: index.ts (17825b), skill.json (164b), SKILL.md (2980b), _meta.json (129b)\n\nFile v1.0.0:SKILL.md\n\n# Pinata API Skill\n\nInteract with Pinata's IPFS storage services for file management, groups, gateways, signatures, payments, and AI-powered vector search.\n\n## Setup\n\nSet the following environment variables:\n\n- `PINATA_JWT` (required) - Your Pinata API JWT token\n- `GATEWAY_URL` (optional) - Your Pinata gateway domain (e.g., `your-gateway.mypinata.cloud`)\n\n## Available Functions\n\n### Authentication\n\n- `testAuthentication()` - Verify your Pinata JWT is valid\n\n### Files\n\n- `searchFiles({ network?, name?, cid?, mimeType?, limit?, pageToken? })` - Search files\n- `getFileById({ network?, id })` - Get file by ID\n- `updateFile({ network?, id, name?, keyvalues? })` - Update file metadata\n- `deleteFile({ network?, id })` - Delete a file\n- `uploadFile({ file, fileName, network?, group_id?, keyvalues? })` - Upload a file\n\n### Groups\n\n- `listGroups({ network?, name?, limit?, pageToken? })` - List groups\n- `createGroup({ network?, name })` - Create a group\n- `getGroup({ network?, id })` - Get group by ID\n- `updateGroup({ network?, id, name })` - Update group\n- `deleteGroup({ network?, id })` - Delete a group\n- `addFileToGroup({ network?, groupId, fileId })` - Add file to group\n- `removeFileFromGroup({ network?, groupId, fileId })` - Remove file from group\n\n### Gateway & Downloads\n\n- `createPrivateDownloadLink({ cid, expires? })` - Create temporary download link\n- `createSignedUploadUrl({ expires, max_file_size?, allow_mime_types?, group_id?, filename?, keyvalues? })` - Create signed upload URL for client-side uploads\n\n### Signatures\n\n- `addSignature({ network?, cid, signature, address })` - Add EIP-712 signature\n- `getSignature({ network?, cid })` - Get signature for CID\n- `deleteSignature({ network?, cid })` - Delete signature\n\n### Pin By CID\n\n- `pinByCid({ cid, name?, group_id?, keyvalues?, host_nodes? })` - Pin existing IPFS content\n- `queryPinRequests({ order?, status?, cid?, limit?, pageToken? })` - Query pin request status\n- `cancelPinRequest({ id })` - Cancel pending pin request\n\n### x402 Payment Instructions\n\n- `createPaymentInstruction({ name, pay_to, amount_usdc, network?, description? })` - Create payment instruction\n- `listPaymentInstructions({ limit?, pageToken?, cid?, name?, id? })` - List payment instructions\n- `getPaymentInstruction({ id })` - Get payment instruction\n- `deletePaymentInstruction({ id })` - Delete payment instruction\n- `addCidToPaymentInstruction({ id, cid })` - Associate CID with payment\n- `removeCidFromPaymentInstruction({ id, cid })` - Remove CID from payment\n\n### Vectorize (AI Search)\n\n- `vectorizeFile({ file_id })` - Generate vector embeddings for a file\n- `deleteFileVectors({ file_id })` - Delete vectors for a file\n- `queryVectors({ group_id, text })` - Semantic search within a group\n\n## Parameters\n\n- `network` - IPFS network: `\"public\"` (default) or `\"private\"`\n- `amount_usdc` - USD amount as string (e.g., `\"1.50\"` for $1.50)\n- `blockchain network` - For payments: `\"base\"` (default) or `\"base-sepolia\"`\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn75pszqsdbzq42x925mcdpc9d812x85\",\n  \"slug\": \"pinata-api\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1771019069351\n}\n\nFile v1.0.0:skill.json\n\n{\n  \"name\": \"pinata-api\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Pinata IPFS API skill for file storage, groups, gateways, and more\",\n  \"entrypoint\": \"index.ts\"\n}","readmeExcerpt":"Skill: Pinata API Owner: pinata Summary: Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization. Tags: latest:1.0.10 Version history: v1.0.10 | 2026-04-22T16:52:31.191Z | user No user-facing changes in this release. Transferring ownership to the Pinata org. - Version bumped to 1.0.10. - No file changes detected. v1.0.9 | 2026-02-20T15:31:47.591Z | user - Environment vari","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"Authorization: Bearer $PINATA_JWT"},{"language":"text","snippet":"GET https://api.pinata.cloud/data/testAuthentication"},{"language":"text","snippet":"GET https://api.pinata.cloud/v3/files/{network}"},{"language":"text","snippet":"GET https://api.pinata.cloud/v3/files/{network}/{id}"},{"language":"text","snippet":"PUT https://api.pinata.cloud/v3/files/{network}/{id}\nContent-Type: application/json"},{"language":"json","snippet":"{\n  \"name\": \"new-name\",\n  \"keyvalues\": {\"key\": \"value\"}\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: pinata-api\ndescription: Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization.\nhomepage: https://pinata.cloud\nmetadata: {\"openclaw\": {\"emoji\": \"📌\", \"requires\": {\"env\": [\"PINATA_JWT\", \"PINATA_GATEWAY_URL\"]}, \"primaryEnv\": \"PINATA_JWT\"}}\n---\n\n# Pinata API\n\nAccess the Pinata IPFS storage API. Upload files, manage groups, create gateways, add signatures, set up x402 payments, and perform AI-powered vector search.\n\nRepo: https://github.com/PinataCloud/pinata-api-skill\n\n## Authentication\n\nAll requests require the header:\n\n```\nAuthorization: Bearer $PINATA_JWT\n```\n\n**Environment Variables:**\n\n- `PINATA_JWT` (required) - Your Pinata API JWT token. Get one at [app.pinata.cloud/developers/api-keys](https://app.pinata.cloud/developers/api-keys)\n- `PINATA_GATEWAY_URL` (required) - Your Pinata gateway domain (e.g., `your-gateway.mypinata.cloud`). Find yours at [app.pinata.cloud/gateway](https://app.pinata.cloud/gateway)\n- `PINATA_GATEWAY_KEY` (optional) - Gateway key for accessing public IPFS content not tied to your Pinata account. See [Gateway Access Controls](https://docs.pinata.cloud/gateways/gateway-access-controls#gateway-keys)\n\n### Test Authentication\n\n```\nGET https://api.pinata.cloud/data/testAuthentication\n```\n\n## Base URLs\n\n- **API:** `https://api.pinata.cloud`\n- **Uploads:** `https://uploads.pinata.cloud`\n\n## Common Parameters\n\n- `{network}` - IPFS network: `public` (default) or `private`\n- Pagination uses `limit` and `pageToken` query parameters\n\n## Files\n\n### Search Files\n\n```\nGET https://api.pinata.cloud/v3/files/{network}\n```\n\nQuery parameters (all optional): `name`, `cid`, `mimeType`, `limit`, `pageToken`\n\n### Get File by ID\n\n```\nGET https://api.pinata.cloud/v3/files/{network}/{id}\n```\n\n### Update File Metadata\n\n```\nPUT https://api.pinata.cloud/v3/files/{network}/{id}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"new-name\",\n  \"keyvalues\": {\"key\": \"value\"}\n}\n```\n\nBoth fields are optional.\n\n### Delete File\n\n```\nDELETE https://api.pinata.cloud/v3/files/{network}/{id}\n```\n\n### Upload File\n\n```\nPOST https://uploads.pinata.cloud/v3/files\nContent-Type: multipart/form-data\n```\n\nForm fields:\n- `file` (required) - The file to upload\n- `network` (optional) - `public` or `private`\n- `group_id` (optional) - Group to add the file to\n- `keyvalues` (optional) - JSON string of key-value metadata\n\n## Groups\n\n### List Groups\n\n```\nGET https://api.pinata.cloud/v3/groups/{network}\n```\n\nQuery parameters (all optional): `name`, `limit`, `pageToken`\n\n### Create Group\n\n```\nPOST https://api.pinata.cloud/v3/groups/{network}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"my-group\"\n}\n```\n\n### Get Group\n\n```\nGET https://api.pinata.cloud/v3/groups/{network}/{id}\n```\n\n### Update Group\n\n```\nPUT https://api.pinata.cloud/v3/groups/{network}/{id}\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"name\": \"updated-name\"\n}\n```\n\n### Delete Group\n\n```\nDELETE https://api.pinata.cloud/v3/g"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75pszqsdbzq42x925mcdpc9d812x85\",\n  \"slug\": \"pinata-api\",\n  \"version\": \"1.0.10\",\n  \"publishedAt\": 1776876751191\n}"},{"path":"skill-card.md","content":"## Description:\n\nPinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[pinata](https://clawhub.ai/user/pinata)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to call the Pinata IPFS API for file storage, metadata and group management, gateway links, signed uploads/downloads, x402 payment instructions, and vector search.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill uses a Pinata JWT that can manage Pinata/IPFS resources in the user's account.\n\nMitigation: Use a scoped Pinata API token where possible and install the skill only when account-level Pinata API access is intended.\n\nRisk: API requests can delete files or groups, create signed links, vectorize private content, or configure x402 payment instructions.\n\nMitigation: Review agent-proposed requests before execution, especially destructive operations, signed upload or download links, private-content vectorization, and payment-related changes.\n\n## Reference(s):\n\n- [Pinata Skill Page](https://clawhub.ai/pinata/skills/pinata-api)\n- [Pinata Documentation](https://docs.pinata.cloud)\n- [Pinata API Keys](https://app.pinata.cloud/developers/api-keys)\n- [Gateway Setup](https://docs.pinata.cloud/gateways)\n- [Gateway Access Controls](https://docs.pinata.cloud/gateways/gateway-access-controls#gateway-keys)\n- [x402 Protocol](https://docs.pinata.cloud/x402)\n- [Source (GitHub, artifact-listed resource; not server-resolved provenance)](https://github.com/PinataCloud/pinata-api-skill)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with HTTP examples, JSON request bodies, and configuration guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Uses PINATA_JWT and PINATA_GATEWAY_URL environment variables; outputs may include authenticated Pinata API requests for account resources.]\n\n## Skill Version(s):\n\n1.0.10 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization. Skill: Pinata API Owner: pinata Summary: Pinata IPFS API for file storage, groups, gateways, signatures, x402 payments, and file vectorization. Tags: latest:1.0.10 Version history: v1.0.10 | 2026-04-22T16:52:31.191Z | user No user-facing changes in this release. Transferring ownership to the Pinata org. - Version bumped to 1.0.10. - No file changes detected. v1.0.9 | 2026-02-20T15:31:47.591Z | user - Environment vari","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1153,"uniquenessScore":45,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T23:08:18.529Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T23:08:18.529Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T03:52:33.684Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}