{"openapi":"3.1.0","info":{"title":"Shiplet API","version":"0.1.0","description":"Account-scoped publishing and review feedback API for Shiplet."},"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Use an organization API key generated in Shiplet."}},"schemas":{"AssetFile":{"type":"object","required":["path","content"],"description":"Static artifact file. Shiplet accepts browser-safe static asset extensions only; executables, archives, server-side scripts, hidden files, absolute paths, and traversal paths are rejected.","properties":{"path":{"type":"string","maxLength":512,"description":"Relative path inside the artifact, for example index.html or assets/app.js."},"content":{"type":"string","description":"Base64-encoded file content. Each decoded file must be 10 MB or less."},"size":{"type":"number"}}}}},"paths":{"/api/shiplets":{"get":{"operationId":"listShiplets","tags":["Shiplets"],"summary":"List shiplets visible to the current API key."},"post":{"operationId":"publishShiplet","tags":["Shiplets"],"summary":"Publish a static shiplet or Worker script.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","subdomain"],"properties":{"name":{"type":"string"},"organization_id":{"type":"string","description":"Optional for organization API keys, required for browser sessions."},"subdomain":{"type":"string"},"visibility":{"type":"string","enum":["private","organization","unlisted","public"]},"assets":{"type":"array","maxItems":200,"description":"Static files to publish. Total decoded upload size is limited to 50 MB.","items":{"$ref":"#/components/schemas/AssetFile"}},"script_content":{"type":"string"}}}}}}}},"/api/projects/{projectId}/review-feedback":{"get":{"operationId":"listFeedback","tags":["Review feedback"],"summary":"List review feedback for one shiplet.","parameters":[{"name":"projectId","in":"path","required":true,"schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"pageUrl","in":"query","schema":{"type":"string"}},{"name":"includeClosed","in":"query","schema":{"type":"boolean"}}]},"post":{"operationId":"createFeedback","tags":["Review feedback"],"summary":"Create review feedback for one shiplet."}},"/api/projects/{projectId}/review-feedback/{feedbackId}":{"get":{"operationId":"getFeedback","tags":["Review feedback"],"summary":"Get one review feedback ticket."}},"/api/projects/{projectId}/review-feedback/{feedbackId}/replies":{"post":{"operationId":"replyToFeedback","tags":["Review feedback"],"summary":"Add a reply to a feedback ticket."}},"/api/projects/{projectId}/review-feedback/{feedbackId}/status":{"post":{"operationId":"updateFeedbackStatus","tags":["Review feedback"],"summary":"Update a feedback ticket status."}}}}