{"components":{"responses":{},"schemas":{"ApiErrorResponse":{"properties":{"error":{"type":"string"}},"title":"ApiErrorResponse","type":"object"},"CategoryIndexResponse":{"properties":{"data":{"items":{"properties":{"description":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"slug":{"type":"string"},"sort_order":{"type":"integer"}},"type":"object"},"type":"array"}},"title":"CategoryIndexResponse","type":"object"},"ScenePackIndexResponse":{"properties":{"data":{"items":{"properties":{"categories":{"items":{"properties":{"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"type":"object"},"type":"array"},"custom_category":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"properties":{"image_url":{"type":"string"},"index":{"nullable":true,"type":"integer"}},"type":"object"},"type":"array"},"product_data":{"nullable":true,"properties":{"attributes":{"nullable":true,"type":"object"},"bullet_points":{"items":{"type":"string"},"type":"array"},"categories":{"items":{"type":"string"},"type":"array"},"collections":{"items":{"type":"string"},"type":"array"},"language":{"nullable":true,"type":"string"},"long_description":{"nullable":true,"type":"string"},"options":{"nullable":true,"type":"object"},"price":{"nullable":true,"type":"string"},"product_title":{"nullable":true,"type":"string"},"short_description":{"nullable":true,"type":"string"},"status":{"nullable":true,"type":"string"},"tags":{"items":{"type":"string"},"type":"array"}},"type":"object"},"visibility":{"enum":["public","private"],"type":"string"}},"type":"object"},"type":"array"},"meta":{"properties":{"limit":{"description":"Free plan cap","nullable":true,"type":"integer"},"page":{"description":"Current page (pro plan)","nullable":true,"type":"integer"},"per_page":{"nullable":true,"type":"integer"},"plan":{"type":"string"},"total":{"type":"integer"},"total_pages":{"nullable":true,"type":"integer"}},"type":"object"}},"title":"ScenePackIndexResponse","type":"object"},"ScenePackShowResponse":{"properties":{"data":{"properties":{"categories":{"items":{"properties":{"id":{"format":"uuid","type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"type":"object"},"type":"array"},"custom_category":{"nullable":true,"type":"string"},"id":{"format":"uuid","type":"string"},"images":{"items":{"properties":{"image_url":{"type":"string"},"index":{"nullable":true,"type":"integer"}},"type":"object"},"type":"array"},"product_data":{"nullable":true,"properties":{"attributes":{"nullable":true,"type":"object"},"bullet_points":{"items":{"type":"string"},"type":"array"},"categories":{"items":{"type":"string"},"type":"array"},"collections":{"items":{"type":"string"},"type":"array"},"language":{"nullable":true,"type":"string"},"long_description":{"nullable":true,"type":"string"},"options":{"nullable":true,"type":"object"},"price":{"nullable":true,"type":"string"},"product_title":{"nullable":true,"type":"string"},"short_description":{"nullable":true,"type":"string"},"status":{"nullable":true,"type":"string"},"tags":{"items":{"type":"string"},"type":"array"}},"type":"object"},"visibility":{"enum":["public","private"],"type":"string"}},"type":"object"}},"title":"ScenePackShowResponse","type":"object"}},"securitySchemes":{"bearerAuth":{"description":"API key from your Scene SKU dashboard","scheme":"bearer","type":"http"}}},"info":{"description":"REST API for Scene SKU — AI-generated scene pack marketplace.\n\nAuthenticate all requests using your API key as a Bearer token in the\n`Authorization` header:\n\n    Authorization: Bearer scenesku_...\n\nGenerate and manage API keys from your [dashboard](/dashboard/api-keys).\n","title":"Scene SKU API","version":"1.0"},"openapi":"3.0.0","paths":{"/api/v1/categories":{"get":{"callbacks":{},"description":"Returns all active categories sorted by sort_order then name.","operationId":"SceneSkuWeb.Api.CategoryController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryIndexResponse"}}},"description":"Categories list"}},"security":[{"bearerAuth":[]}],"summary":"List active categories","tags":["Categories"]}},"/api/v1/categories/{slug}/scene-packs":{"get":{"callbacks":{},"description":"Returns published scene packs tagged with the given category slug.\n\n**Free plan**: returns up to the plan's download limit (no pagination).\n\n**Pro plan**: returns all packs with offset pagination via `page` and `per_page`.\n","operationId":"SceneSkuWeb.Api.CategoryController.scene_packs","parameters":[{"description":"Category slug (e.g. `electronics`)","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"Page number (pro plan only, default: 1)","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Results per page, max 100 (pro plan only, default: 20)","in":"query","name":"per_page","required":false,"schema":{"maximum":100,"minimum":1,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenePackIndexResponse"}}},"description":"Scene packs list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Category not found"}},"security":[{"bearerAuth":[]}],"summary":"List scene packs by category","tags":["Categories"]}},"/api/v1/scene-packs":{"get":{"callbacks":{},"description":"Returns public published scene packs and the authenticated user's own private packs.\n\n**Free plan**: returns up to the plan's download limit (no pagination).\n\n**Pro plan**: returns all packs with cursor-style offset pagination via `page` and `per_page`.\n\nFilter by admin-managed category using `category` (slug) or by custom free-text using `custom_category`.\n","operationId":"SceneSkuWeb.Api.ScenePackController.index","parameters":[{"description":"Page number (pro plan only, default: 1)","in":"query","name":"page","required":false,"schema":{"minimum":1,"type":"integer"}},{"description":"Results per page, max 100 (pro plan only, default: 20)","in":"query","name":"per_page","required":false,"schema":{"maximum":100,"minimum":1,"type":"integer"}},{"description":"Filter by category slug (e.g. `apparel`)","in":"query","name":"category","required":false,"schema":{"type":"string"}},{"description":"Filter by custom category text (case-insensitive substring match)","in":"query","name":"custom_category","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenePackIndexResponse"}}},"description":"Scene packs list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Unauthorized"}},"security":[{"bearerAuth":[]}],"summary":"List scene packs","tags":["Scene Packs"]}},"/api/v1/scene-packs/{id}":{"get":{"callbacks":{},"description":"Returns a single public, published scene pack including its images and product data.","operationId":"SceneSkuWeb.Api.ScenePackController.show","parameters":[{"description":"Scene pack UUID","in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenePackShowResponse"}}},"description":"Scene pack"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorResponse"}}},"description":"Not found"}},"security":[{"bearerAuth":[]}],"summary":"Get a scene pack by ID","tags":["Scene Packs"]}}},"security":[{"bearerAuth":[]}],"servers":[{"url":"https://scenesku.com","variables":{}}],"tags":[]}