{"components":{"schemas":{"ApiError":{"properties":{"code":{"type":"string"},"docs_url":{"type":["string","null"]},"error":{"type":"string"},"message":{"type":"string"},"retry_after":{"type":["integer","null"]}},"required":["error","code","message"],"type":"object"},"PublishCreateRequest":{"properties":{"authMode":{"enum":["anonymous","api_key"],"type":"string"},"files":{"items":{"$ref":"#/components/schemas/PublishFileManifest"},"type":"array"},"mode":{"enum":["create"],"type":"string"},"slug":{"description":"Allowed only with authMode api_key and a valid Bearer API key.","type":"string"}},"required":["mode","authMode","files"],"type":"object"},"PublishCreateResponse":{"properties":{"claimToken":{"description":"One-time token returned only for anonymous publishing.","type":"string"},"expiresAt":{"description":"Anonymous Sites expire after 24 hours; authenticated Sites are permanent and return null.","type":["string","null"]},"publishSessionId":{"type":"string"},"siteId":{"type":"string"},"uploadTargets":{"items":{"type":"object"},"type":"array"}},"required":["siteId","publishSessionId","expiresAt","uploadTargets"],"type":"object"},"PublishFileManifest":{"properties":{"contentType":{"type":"string"},"path":{"type":"string"},"sha256":{"type":"string"},"sizeBytes":{"type":"integer"}},"required":["path","contentType","sizeBytes","sha256"],"type":"object"},"PublishFinalizeRequest":{"properties":{"files":{"items":{"type":"object"},"type":"array"},"publishSessionId":{"type":"string"}},"required":["publishSessionId","files"],"type":"object"},"PublishFinalizeResponse":{"properties":{"siteId":{"type":"string"},"url":{"type":"string"},"versionId":{"type":"string"},"versionNumber":{"type":"integer"}},"type":"object"},"UploadCompleteRequest":{"properties":{"objectKey":{"type":"string"},"path":{"type":"string"},"publishSessionId":{"type":"string"},"sha256":{"type":"string"},"sizeBytes":{"type":"integer"}},"required":["publishSessionId","path","objectKey","sha256","sizeBytes"],"type":"object"}}},"info":{"title":"pubthis.net API","version":"0.1.0-rust"},"openapi":"3.1.0","paths":{"/api/publish":{"post":{"description":"Public agent-facing publish entrypoint. Anonymous publishing must omit slug and receives a generated slug plus a one-time claimToken. Chosen slugs require authMode api_key and Bearer API key.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishCreateRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishCreateResponse"}}},"description":"Publish session created"}},"summary":"Create a publish session"}},"/api/publish/{publishSessionId}/finalize":{"post":{"description":"Finalize returns the canonical share URL. In subdomain deployments, published files are rooted at that returned host.","parameters":[{"in":"path","name":"publishSessionId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishFinalizeRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishFinalizeResponse"}}},"description":"Finalized"}},"summary":"Finalize a publish session"}},"/api/publish/{publishSessionId}/uploads":{"post":{"parameters":[{"in":"path","name":"publishSessionId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadCompleteRequest"}}},"required":true},"responses":{"204":{"description":"Recorded"}},"summary":"Record an uploaded file"}},"/api/uploads/{publishSessionId}/{path}":{"put":{"parameters":[{"in":"path","name":"publishSessionId","required":true,"schema":{"type":"string"}},{"in":"path","name":"path","required":true,"schema":{"type":"string"}},{"in":"query","name":"sha256","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/octet-stream":{"schema":{"format":"binary","type":"string"}}},"required":true},"responses":{"204":{"description":"Uploaded"}},"summary":"Upload one file for a publish session"}}},"servers":[{"url":"https://pubthis.net"}]}