{"version":1,"resources":["https://stablestudio.dev/api/generate/sora-2/generate","https://stablestudio.dev/api/generate/sora-2-pro/generate","https://stablestudio.dev/api/generate/veo-3.1/generate","https://stablestudio.dev/api/generate/veo-3.1-fast/generate","https://stablestudio.dev/api/generate/wan-2.6/t2v","https://stablestudio.dev/api/generate/wan-2.6/i2v","https://stablestudio.dev/api/generate/gpt-image-1/generate","https://stablestudio.dev/api/generate/gpt-image-1/edit","https://stablestudio.dev/api/generate/gpt-image-1.5/generate","https://stablestudio.dev/api/generate/gpt-image-1.5/edit","https://stablestudio.dev/api/generate/nano-banana/generate","https://stablestudio.dev/api/generate/nano-banana/edit","https://stablestudio.dev/api/generate/nano-banana-pro/generate","https://stablestudio.dev/api/generate/nano-banana-pro/edit","https://stablestudio.dev/api/generate/flux-2-pro/generate","https://stablestudio.dev/api/generate/flux-2-pro/edit","https://stablestudio.dev/api/generate/grok/generate","https://stablestudio.dev/api/generate/grok/edit","https://stablestudio.dev/api/generate/grok-video/generate","https://stablestudio.dev/api/generate/seedance/t2v","https://stablestudio.dev/api/generate/seedance/i2v","https://stablestudio.dev/api/generate/seedance-fast/t2v","https://stablestudio.dev/api/generate/seedance-fast/i2v","https://stablestudio.dev/api/jobs","https://stablestudio.dev/api/jobs/{jobId}","DELETE https://stablestudio.dev/api/jobs/{jobId}","https://stablestudio.dev/api/upload","https://stablestudio.dev/api/upload/confirm"],"mppResources":["https://stablestudio.dev/api/generate/sora-2/generate","https://stablestudio.dev/api/generate/sora-2-pro/generate","https://stablestudio.dev/api/generate/veo-3.1/generate","https://stablestudio.dev/api/generate/veo-3.1-fast/generate","https://stablestudio.dev/api/generate/wan-2.6/t2v","https://stablestudio.dev/api/generate/wan-2.6/i2v","https://stablestudio.dev/api/generate/gpt-image-1/generate","https://stablestudio.dev/api/generate/gpt-image-1/edit","https://stablestudio.dev/api/generate/gpt-image-1.5/generate","https://stablestudio.dev/api/generate/gpt-image-1.5/edit","https://stablestudio.dev/api/generate/nano-banana/generate","https://stablestudio.dev/api/generate/nano-banana/edit","https://stablestudio.dev/api/generate/nano-banana-pro/generate","https://stablestudio.dev/api/generate/nano-banana-pro/edit","https://stablestudio.dev/api/generate/flux-2-pro/generate","https://stablestudio.dev/api/generate/flux-2-pro/edit","https://stablestudio.dev/api/generate/grok/generate","https://stablestudio.dev/api/generate/grok/edit","https://stablestudio.dev/api/generate/grok-video/generate","https://stablestudio.dev/api/generate/seedance/t2v","https://stablestudio.dev/api/generate/seedance/i2v","https://stablestudio.dev/api/generate/seedance-fast/t2v","https://stablestudio.dev/api/generate/seedance-fast/i2v","https://stablestudio.dev/api/upload"],"description":"Pay-per-generation AI image and video creation. No subscriptions ever.","ownershipProofs":["0xe0cee2e160542a97298bb30716ba38f917003404eb7f2c84a72344bccf8abb0f439e43c858bed768a3c0b2ca0246c9c745a6a18c98b83c6919289170c4c607f11b"],"instructions":"# StableStudio API\n\n> AI image/video generation via micropayments. USDC on Base, Solana, or Tempo. No API keys.\n\nBase URL: `https://stablestudio.dev`\n\n## Recommended Defaults\n\n- **Image generation:** `nano-banana-pro` - Best quality/cost ratio, supports up to 4K resolution\n- **Video generation:** `veo-3.1` - Best quality/cost ratio, supports up to 1080p resolution\n\n## Payment Flow\n\n1. `POST /api/generate/{model}/{operation}` without payment header\n   - Returns `402` with `PAYMENT-REQUIRED` header (base64 JSON)\n\n2. Decode requirements, sign USDC authorization, POST with `PAYMENT-SIGNATURE` header\n   - Returns `200` with `{jobId, status:\"pending\"}` and `PAYMENT-RESPONSE` header\n\n3. Poll `GET /api/jobs/{jobId}` with `SIGN-IN-WITH-X` header until complete\n\n## 402 Response Format\n\nResponse body is empty `{}`. Requirements in header:\n\n```\nPAYMENT-REQUIRED: <base64>\n```\n\nDecoded:\n```json\n{\n  \"x402Version\": 2,\n  \"accepts\": [{\n    \"scheme\": \"exact\",\n    \"network\": \"eip155:8453\",\n    \"amount\": \"39000\",\n    \"asset\": \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n    \"payTo\": \"0xfbd7b7Ed48146aD9bEfF956212c77cE056815ad0\"\n  }],\n  \"resource\": {\n    \"url\": \"https://stablestudio.dev/api/generate/nano-banana/generate\",\n    \"description\": \"Nano Banana - generate\"\n  }\n}\n```\n\n`amount` is USDC micro-units (6 decimals). 39000 = $0.039.\n\n## Routes\n\n| Endpoint | Cost | Time |\n|----------|------|------|\n| `/api/generate/nano-banana/generate` | $0.039 | ~5s |\n| `/api/generate/nano-banana/edit` | $0.039 | ~5s |\n| `/api/generate/nano-banana-pro/generate` | $0.13-0.24 | ~10s |\n| `/api/generate/nano-banana-pro/edit` | $0.13-0.24 | ~10s |\n| `/api/generate/grok/generate` | $0.07 | ~3s |\n| `/api/generate/grok/edit` | $0.022 | ~3s |\n| `/api/generate/grok-video/generate` | $0.15-0.75 | ~17s |\n| `/api/generate/gpt-image-1/generate` | $0.011-0.25 | ~10s |\n| `/api/generate/gpt-image-1/edit` | $0.011-0.25 | ~10s |\n| `/api/generate/gpt-image-1.5/generate` | $0.009-0.20 | ~3s |\n| `/api/generate/gpt-image-1.5/edit` | $0.009-0.20 | ~3s |\n| `/api/generate/flux-2-pro/generate` | $0.05-0.06 | ~5s |\n| `/api/generate/flux-2-pro/edit` | $0.05-0.06 | ~5s |\n| `/api/generate/seedance/t2v` | $0.33-0.99 | ~1min |\n| `/api/generate/seedance/i2v` | $0.33-0.99 | ~1min |\n| `/api/generate/seedance-fast/t2v` | $0.04-0.12 | ~40s |\n| `/api/generate/seedance-fast/i2v` | $0.04-0.12 | ~40s |\n| `/api/generate/wan-2.6/t2v` | $0.34-1.02 | 2-5min |\n| `/api/generate/wan-2.6/i2v` | $0.34-1.02 | 2-5min |\n| `/api/generate/sora-2/generate` | $0.40-1.20 | 1-3min |\n| `/api/generate/sora-2-pro/generate` | $3.00-12.50 | 2-5min |\n| `/api/generate/veo-3.1/generate` | $1.60-3.20 | 1-2min |\n| `/api/generate/veo-3.1-fast/generate` | $0.40-0.80 | ~30s |\n| `/api/upload` | $0.01 | instant |\n\n## Input Schemas\n\n**Image generation:**\n```json\n{\"prompt\": \"string\", \"aspectRatio\": \"1:1|16:9|9:16\"}\n```\n\n**Image editing** (requires upload first):\n```json\n{\"prompt\": \"string\", \"images\": [\"https://blob-url...\"]}\n```\n- `gpt-image` edit adds `input_fidelity: \"high\"|\"low\"` (default: high)\n- `nano-banana-pro` edit supports up to 14 images\n\n**nano-banana-pro** (adds resolution):\n```json\n{\"prompt\": \"string\", \"aspectRatio\": \"...\", \"imageSize\": \"1K|2K|4K\"}\n```\n\n**grok** (13 aspect ratios including ultra-wide):\n```json\n{\"prompt\": \"string\", \"aspect_ratio\": \"1:1|16:9|9:16|4:3|3:4|3:2|2:3|2:1|1:2|19.5:9|9:19.5|20:9|9:20\"}\n```\n\n**grok edit** (requires upload first):\n```json\n{\"prompt\": \"string\", \"images\": [\"https://blob-url...\"], \"aspect_ratio\": \"...same as above\"}\n```\n\n**grok-video:**\n```json\n{\"prompt\": \"string\", \"duration\": \"3|6|9|12|15\", \"resolution\": \"480p|720p\", \"aspect_ratio\": \"1:1|16:9|9:16|4:3|3:4|3:2|2:3\"}\n```\n\n**grok-video i2v** (with image):\n```json\n{\"prompt\": \"string\", \"image\": \"https://blob-url...\", \"duration\": \"3|6|9|12|15\", \"resolution\": \"480p|720p\"}\n```\n\n**gpt-image** (adds quality):\n```json\n{\"prompt\": \"string\", \"quality\": \"low|medium|high\", \"size\": \"1024x1024|1536x1024|1024x1536\"}\n```\n\n**flux-2-pro:**\n```json\n{\"prompt\": \"string\", \"aspect_ratio\": \"1:1|16:9|9:16|3:2|2:3|4:5|5:4|4:3|3:4\", \"resolution\": \"0.5 MP|1 MP|2 MP\"}\n```\n\n**flux-2-pro edit** (requires upload first):\n```json\n{\"prompt\": \"string\", \"images\": [\"https://blob-url...\"], \"aspect_ratio\": \"...same as above\", \"resolution\": \"0.5 MP|1 MP|2 MP\"}\n```\n\n**seedance/t2v:**\n```json\n{\"prompt\": \"string\", \"duration\": \"4|5|6|7|8|9|10|11|12\", \"resolution\": \"480p|720p|1080p\", \"aspect_ratio\": \"16:9|9:16|4:3|3:4|1:1|21:9\", \"generate_audio\": false, \"camera_fixed\": false}\n```\n\n**seedance/i2v:**\n```json\n{\"prompt\": \"string\", \"image\": \"https://blob-url...\", \"duration\": \"4|5|6|7|8|9|10|11|12\", \"resolution\": \"480p|720p|1080p\", \"aspect_ratio\": \"16:9|9:16|4:3|3:4|1:1|21:9\"}\n```\n\n**seedance-fast** uses same schemas as seedance but at lower cost.\n\n**wan-2.6/t2v:**\n```json\n{\"prompt\": \"string\", \"duration\": \"5|10|15\", \"size\": \"1280*720|720*1280|1920*1080|1080*1920\", \"enablePromptExpansion\": true, \"multiShots\": false}\n```\n\n**wan-2.6/i2v:**\n```json\n{\"prompt\": \"string\", \"image\": \"https://blob-url...\", \"duration\": \"5|10|15\", \"resolution\": \"720p|1080p\", \"enablePromptExpansion\": true, \"multiShots\": false}\n```\n\n**sora-2:**\n```json\n{\"prompt\": \"string\", \"seconds\": \"4|8|12\", \"size\": \"1280x720|720x1280\"}\n```\n\n**sora-2-pro:**\n```json\n{\"prompt\": \"string\", \"seconds\": \"10|15|25\", \"size\": \"1280x720|720x1280|1792x1024|1024x1792\"}\n```\n\n**veo-3.1:**\n```json\n{\"prompt\": \"string\", \"durationSeconds\": \"4|6|8\", \"aspectRatio\": \"16:9|9:16\"}\n```\n\n**veo-3.1 interpolation** (animate between frames):\n```json\n{\"prompt\": \"string\", \"image\": \"https://first...\", \"lastFrame\": \"https://last...\"}\n```\n\n## File Upload\n\nUpload images for editing or image-to-video. Three-step flow:\n\n**Step 1: Get upload token** (payment, $0.01)\n```\nPOST /api/upload\nPAYMENT-SIGNATURE: <signed payment>\nContent-Type: application/json\n\n{\"filename\": \"image.png\", \"contentType\": \"image/png\"}\n```\n\nReturns:\n```json\n{\"uploadId\": \"uuid\", \"clientToken\": \"vercel_blob_...\", \"pathname\": \"uploads/uuid/image.png\", \"expiresAt\": \"...\"}\n```\n\n**Step 2: Upload file directly to Vercel Blob**\n```bash\ncurl -X PUT \"https://vercel.com/api/blob/?pathname=uploads/uuid/image.png\" \\\n  -H \"authorization: Bearer $clientToken\" \\\n  -H \"x-content-type: image/png\" \\\n  -H \"x-api-version: 11\" \\\n  --data-binary @image.png\n```\n\nReturns `{\"url\": \"https://....blob.vercel-storage.com/...\"}`.\n\n**Step 3: Confirm upload** (SIGN-IN-WITH-X auth, no payment)\n```\nPOST /api/upload/confirm\nSIGN-IN-WITH-X: <base64>\nContent-Type: application/json\n\n{\"uploadId\": \"uuid\", \"blobUrl\": \"https://....blob.vercel-storage.com/...\"}\n```\n\nReturns `{\"success\": true, \"upload\": {\"id\": \"...\", \"blobUrl\": \"...\"}}`.\n\nUse the `blobUrl` in edit/i2v requests.\n\n## Job Polling (SIGN-IN-WITH-X)\n\nJob routes require wallet signature authentication (no payment):\n\n```\nGET /api/jobs/{jobId}\nSIGN-IN-WITH-X: <base64>\n```\n\nHeader contains base64-encoded CAIP-122 message:\n```json\n{\n  \"domain\": \"stablestudio.dev\",\n  \"address\": \"0x...\",\n  \"uri\": \"https://stablestudio.dev/api/jobs/{jobId}\",\n  \"version\": \"1\",\n  \"chainId\": \"eip155:8453\",\n  \"nonce\": \"<random>\",\n  \"issuedAt\": \"<ISO8601>\",\n  \"expirationTime\": \"<ISO8601>\",\n  \"signature\": \"0x...\"\n}\n```\n\nIf auth missing/invalid, returns 402 with SIWX extension:\n```json\n{\n  \"x402Version\": 2,\n  \"accepts\": [],\n  \"extensions\": {\n    \"sign-in-with-x\": {\n      \"info\": {\n        \"domain\": \"stablestudio.dev\",\n        \"uri\": \"https://stablestudio.dev/api/jobs/{jobId}\",\n        \"version\": \"1\",\n        \"nonce\": \"<server-generated>\",\n        \"issuedAt\": \"<ISO8601>\",\n        \"expirationTime\": \"<ISO8601>\"\n      },\n      \"supportedChains\": [{ \"chainId\": \"eip155:8453\", \"type\": \"eip191\" }],\n      \"schema\": { \"...\" : \"...\" }\n    }\n  }\n}\n```\n\n**Routes:**\n- `GET /api/jobs/{jobId}` - Get job status\n- `GET /api/jobs` - List jobs (`?limit=20&status=complete`)\n- `DELETE /api/jobs/{jobId}` - Delete failed job\n\n**Response:**\n```json\n{\"status\": \"complete\", \"result\": {\"imageUrl\": \"https://...\"}}\n```\nVideos return `{videoUrl, thumbnailUrl}`.\n\n**Polling intervals:** Images every 3s (2min timeout), Videos every 10s (10min timeout)\n"}