{"openapi":"3.1.0","info":{"title":"Live.link publishing API","version":"0.1.0","description":"External-agent API for private drafts, immutable versions, isolated previews and explicit publishing. A standalone Melade product. Bearer credentials do not authorize dashboard-only account settings, reader tickets or owner response exports. All successful and failed responses are JSON. Request field defaults apply only when omitted; publishing never happens as a side effect of draft creation."},"servers":[{"url":"https://app.live.link/api/v1"}],"externalDocs":{"description":"Agent setup and implemented capabilities","url":"https://live.link/start"},"x-live-link-capabilities":["artifact.create","artifact.read","version.validate-and-save","version.read","preview.create","publication.publish","publication.restore","publication.revoke","operation.read","operation.cancel"],"security":[{"agentToken":[]}],"components":{"securitySchemes":{"agentToken":{"type":"http","scheme":"bearer","description":"Create a revocable credential in Settings → AI connections. Send it only in Authorization: Bearer <credential>. Each operation names its required scope in x-required-scopes. Never put credentials in URLs or published files."}},"schemas":{"ArtifactManifest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"schemaVersion":{"type":"number","const":1},"kind":{"type":"string","enum":["document","app","file"]},"title":{"type":"string","minLength":1,"maxLength":120},"description":{"default":"","type":"string","maxLength":500},"entrypoint":{"default":"index.html","type":"string"},"files":{"default":[],"maxItems":30,"type":"array","items":{"type":"object","properties":{"path":{"type":"string","minLength":1,"maxLength":200},"mediaType":{"type":"string","minLength":1,"maxLength":100},"content":{"type":"string"},"encoding":{"default":"utf8","type":"string","enum":["utf8","base64"]},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["path","mediaType","content","encoding"],"additionalProperties":false}},"blocks":{"default":[],"maxItems":100,"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"markdown"},"text":{"type":"string","maxLength":100000}},"required":["type","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"metric"},"label":{"type":"string","maxLength":100},"value":{"type":"string","maxLength":100},"detail":{"type":"string","maxLength":300}},"required":["type","label","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"callout"},"title":{"type":"string","maxLength":200},"text":{"type":"string","maxLength":5000}},"required":["type","title","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"table"},"columns":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"string"}},"rows":{"maxItems":200,"type":"array","items":{"type":"array","items":{"type":"string"}}}},"required":["type","columns","rows"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"estimate"},"currency":{"default":"USD","type":"string","enum":["USD","EUR","GBP"]},"items":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"quantity":{"type":"integer","minimum":1,"maximum":10000},"unitPrice":{"type":"integer","minimum":0,"maximum":100000000},"optional":{"default":false,"type":"boolean"}},"required":["id","label","quantity","unitPrice","optional"],"additionalProperties":false}},"taxBasisPoints":{"default":0,"type":"integer","minimum":0,"maximum":10000}},"required":["type","currency","items","taxBasisPoints"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"form"},"id":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,49}$"},"title":{"type":"string","maxLength":200},"fields":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,49}$"},"label":{"type":"string","maxLength":100},"type":{"type":"string","enum":["text","email","textarea","select"]},"required":{"default":false,"type":"boolean"},"options":{"maxItems":30,"type":"array","items":{"type":"string"}}},"required":["name","label","type","required"],"additionalProperties":false}},"submitLabel":{"default":"Send response","type":"string","maxLength":80}},"required":["type","id","title","fields","submitLabel"],"additionalProperties":false}]}},"brand":{"type":"object","properties":{"name":{"type":"string","maxLength":80},"color":{"default":"#6262e8","type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"tagline":{"default":"","type":"string","maxLength":160}},"required":["name","color","tagline"],"additionalProperties":false}},"required":["schemaVersion","kind","title","description","entrypoint","files","blocks"],"additionalProperties":false},"Artifact":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"publicationGuardVersion":{"type":"number","const":1},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"workspaceId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string"},"kind":{"type":"string","enum":["document","app","file"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"latestVersionId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"publication":{"anyOf":[{"type":"object","properties":{"revision":{"type":"integer","minimum":0,"maximum":2147483647},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"artifactId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"versionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"audience":{"type":"string","enum":["owner","recipients","public"]},"recipients":{"type":"array","items":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"url":{"type":"string","format":"uri"}},"required":["id","artifactId","versionId","slug","audience","recipients","expiresAt","revokedAt","url"],"additionalProperties":false},{"type":"null"}]}},"required":["id","workspaceId","title","kind","createdAt","updatedAt","latestVersionId","publication"],"additionalProperties":false},"ArtifactVersion":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"artifactId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"manifest":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"kind":{"type":"string","enum":["document","app","file"]},"title":{"type":"string","minLength":1,"maxLength":120},"description":{"default":"","type":"string","maxLength":500},"entrypoint":{"default":"index.html","type":"string"},"files":{"default":[],"maxItems":30,"type":"array","items":{"type":"object","properties":{"path":{"type":"string","minLength":1,"maxLength":200},"mediaType":{"type":"string","minLength":1,"maxLength":100},"content":{"type":"string"},"encoding":{"default":"utf8","type":"string","enum":["utf8","base64"]},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["path","mediaType","content","encoding"],"additionalProperties":false}},"blocks":{"default":[],"maxItems":100,"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"markdown"},"text":{"type":"string","maxLength":100000}},"required":["type","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"metric"},"label":{"type":"string","maxLength":100},"value":{"type":"string","maxLength":100},"detail":{"type":"string","maxLength":300}},"required":["type","label","value"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"callout"},"title":{"type":"string","maxLength":200},"text":{"type":"string","maxLength":5000}},"required":["type","title","text"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"table"},"columns":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"string"}},"rows":{"maxItems":200,"type":"array","items":{"type":"array","items":{"type":"string"}}}},"required":["type","columns","rows"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"estimate"},"currency":{"default":"USD","type":"string","enum":["USD","EUR","GBP"]},"items":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"quantity":{"type":"integer","minimum":1,"maximum":10000},"unitPrice":{"type":"integer","minimum":0,"maximum":100000000},"optional":{"default":false,"type":"boolean"}},"required":["id","label","quantity","unitPrice","optional"],"additionalProperties":false}},"taxBasisPoints":{"default":0,"type":"integer","minimum":0,"maximum":10000}},"required":["type","currency","items","taxBasisPoints"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"form"},"id":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,49}$"},"title":{"type":"string","maxLength":200},"fields":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,49}$"},"label":{"type":"string","maxLength":100},"type":{"type":"string","enum":["text","email","textarea","select"]},"required":{"default":false,"type":"boolean"},"options":{"maxItems":30,"type":"array","items":{"type":"string"}}},"required":["name","label","type","required"],"additionalProperties":false}},"submitLabel":{"default":"Send response","type":"string","maxLength":80}},"required":["type","id","title","fields","submitLabel"],"additionalProperties":false}]}},"brand":{"type":"object","properties":{"name":{"type":"string","maxLength":80},"color":{"default":"#6262e8","type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"tagline":{"default":"","type":"string","maxLength":160}},"required":["name","color","tagline"],"additionalProperties":false}},"required":["schemaVersion","kind","title","description","entrypoint","files","blocks"],"additionalProperties":false}},"required":["id","artifactId","number","createdAt","manifest"],"additionalProperties":false},"VersionSummary":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"artifactId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"number":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","artifactId","number","createdAt"],"additionalProperties":false},"Publication":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"revision":{"type":"integer","minimum":0,"maximum":2147483647},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"artifactId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"versionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string"},"audience":{"type":"string","enum":["owner","recipients","public"]},"recipients":{"type":"array","items":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"expiresAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"revokedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"url":{"type":"string","format":"uri"}},"required":["id","artifactId","versionId","slug","audience","recipients","expiresAt","revokedAt","url"],"additionalProperties":false},"Operation":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"artifactId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"status":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"]},"prompt":{"type":"string"},"kind":{"type":"string","enum":["document","app","file"]},"error":{"type":["string","null"]},"versionId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","artifactId","status","prompt","kind","error","versionId","createdAt","updatedAt"],"additionalProperties":false},"VersionWarning":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"code":{"type":"string","enum":["EXTERNAL_RESOURCE_BLOCKED","MISSING_FILE_REFERENCED","UNSUPPORTED_FILE_REFERENCED","EMBED_BLOCKED","SCRIPT_NETWORK_BLOCKED"]},"path":{"type":"string"},"reference":{"type":"string"},"message":{"type":"string"}},"required":["code","path","message"],"additionalProperties":false},"ApiError":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"traceId":{"type":"string"},"details":{}},"required":["code","message","traceId"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}},"paths":{"/artifacts":{"get":{"operationId":"listArtifacts","summary":"List active workspace artifacts","security":[{"agentToken":[]}],"x-required-scopes":["artifact:read"],"responses":{"200":{"description":"Artifacts ordered by most recent update. Deleted items are excluded.","content":{"application/json":{"schema":{"type":"object","properties":{"artifacts":{"type":"array","items":{"$ref":"#/components/schemas/Artifact"}}},"required":["artifacts"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createArtifact","summary":"Create a private artifact","description":"An empty artifact has no version or live URL. Supply idempotencyKey to make uncertain retries safe; reuse the key only with the same title and kind. Creating a draft never publishes it.","security":[{"agentToken":[]}],"x-required-scopes":["artifact:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120},"kind":{"type":"string","enum":["document","app","file"]},"idempotencyKey":{"type":"string","minLength":8,"maxLength":100}},"required":["title","kind"]}}}},"responses":{"201":{"description":"The created artifact, or the same artifact for an identical idempotent retry.","content":{"application/json":{"schema":{"type":"object","properties":{"artifact":{"$ref":"#/components/schemas/Artifact"}},"required":["artifact"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"IDEMPOTENCY_CONFLICT: this key was used with a different title or kind.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"410":{"description":"ARTIFACT_DELETED: the artifact originally created by this idempotency key was deleted. Use a new key only to create a new artifact.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/artifacts/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"operationId":"getArtifact","summary":"Read an artifact, history summaries and the latest full version","description":"History is newest first and excludes manifest bodies. Fetch an individual version to inspect earlier content. latestVersion is null before the first save. A revoked or expired publication remains in the response; its slug and pointer are still authoritative.","security":[{"agentToken":[]}],"x-required-scopes":["artifact:read"],"responses":{"200":{"description":"Artifact state, metadata-only history and current draft.","content":{"application/json":{"schema":{"type":"object","properties":{"artifact":{"$ref":"#/components/schemas/Artifact"},"versions":{"type":"array","items":{"$ref":"#/components/schemas/VersionSummary"}},"latestVersion":{"anyOf":[{"$ref":"#/components/schemas/ArtifactVersion"},{"type":"null"}]}},"required":["artifact","versions","latestVersion"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"patch":{"operationId":"renameArtifact","summary":"Change the workspace title","description":"Changes the artifact label only. Immutable version content and the permanently assigned publication address do not change.","security":[{"agentToken":[]}],"x-required-scopes":["artifact:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":120}},"required":["title"],"additionalProperties":false}}}},"responses":{"200":{"description":"Artifact with the updated workspace title.","content":{"application/json":{"schema":{"type":"object","properties":{"artifact":{"$ref":"#/components/schemas/Artifact"}},"required":["artifact"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"delete":{"operationId":"deleteArtifact","summary":"Remove an artifact and revoke its live link","description":"Soft-deletes the artifact from workspace access and revokes reader access atomically. Saved history still counts toward storage. The old slug remains reserved and cannot be reassigned.","security":[{"agentToken":[]}],"x-required-scopes":["artifact:publish"],"responses":{"200":{"description":"Removal succeeded.","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean","const":true}},"required":["deleted"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/artifacts/{id}/versions":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"post":{"operationId":"saveVersion","summary":"Validate and save an immutable private version","description":"Send a single bounded JSON request: at most 30 files, 3 MB of decoded file bytes and a 4 MB request envelope. App files require a built HTML entrypoint. Document blocks are limited to 512 KiB of serialized UTF-8 JSON and content is schema-validated. baseVersionId must equal artifact.latestVersionId, or null for the first version. Reuse the exact body and idempotencyKey after an uncertain response. A successful save never changes the live publication. The response lists warnings for references the live origin will not load (it loads only saved files plus Google Fonts); resolve them or report them before publishing.","security":[{"agentToken":[]}],"x-required-scopes":["artifact:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"manifest":{"type":"object","properties":{"schemaVersion":{"type":"number","const":1},"kind":{"type":"string","enum":["document","app","file"]},"title":{"type":"string","minLength":1,"maxLength":120},"description":{"default":"","type":"string","maxLength":500},"entrypoint":{"default":"index.html","type":"string"},"files":{"default":[],"maxItems":30,"type":"array","items":{"type":"object","properties":{"path":{"type":"string","minLength":1,"maxLength":200},"mediaType":{"type":"string","minLength":1,"maxLength":100},"content":{"type":"string"},"encoding":{"default":"utf8","type":"string","enum":["utf8","base64"]},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["path","mediaType","content"]}},"blocks":{"default":[],"maxItems":100,"type":"array","items":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"markdown"},"text":{"type":"string","maxLength":100000}},"required":["type","text"]},{"type":"object","properties":{"type":{"type":"string","const":"metric"},"label":{"type":"string","maxLength":100},"value":{"type":"string","maxLength":100},"detail":{"type":"string","maxLength":300}},"required":["type","label","value"]},{"type":"object","properties":{"type":{"type":"string","const":"callout"},"title":{"type":"string","maxLength":200},"text":{"type":"string","maxLength":5000}},"required":["type","title","text"]},{"type":"object","properties":{"type":{"type":"string","const":"table"},"columns":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"string"}},"rows":{"maxItems":200,"type":"array","items":{"type":"array","items":{"type":"string"}}}},"required":["type","columns","rows"]},{"type":"object","properties":{"type":{"type":"string","const":"estimate"},"currency":{"default":"USD","type":"string","enum":["USD","EUR","GBP"]},"items":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"quantity":{"type":"integer","minimum":1,"maximum":10000},"unitPrice":{"type":"integer","minimum":0,"maximum":100000000},"optional":{"default":false,"type":"boolean"}},"required":["id","label","quantity","unitPrice"]}},"taxBasisPoints":{"default":0,"type":"integer","minimum":0,"maximum":10000}},"required":["type","items"]},{"type":"object","properties":{"type":{"type":"string","const":"form"},"id":{"type":"string","pattern":"^[a-z][a-z0-9-]{0,49}$"},"title":{"type":"string","maxLength":200},"fields":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,49}$"},"label":{"type":"string","maxLength":100},"type":{"type":"string","enum":["text","email","textarea","select"]},"required":{"default":false,"type":"boolean"},"options":{"maxItems":30,"type":"array","items":{"type":"string"}}},"required":["name","label","type"]}},"submitLabel":{"default":"Send response","type":"string","maxLength":80}},"required":["type","id","title","fields"]}]}},"brand":{"type":"object","properties":{"name":{"type":"string","maxLength":80},"color":{"default":"#6262e8","type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"tagline":{"default":"","type":"string","maxLength":160}},"required":["name"]}},"required":["schemaVersion","kind","title"]},"baseVersionId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"idempotencyKey":{"type":"string","minLength":8,"maxLength":100}},"required":["manifest","baseVersionId","idempotencyKey"]}}}},"responses":{"201":{"description":"Saved immutable version, updated artifact and preflight warnings.","content":{"application/json":{"schema":{"type":"object","properties":{"artifact":{"$ref":"#/components/schemas/Artifact"},"version":{"$ref":"#/components/schemas/ArtifactVersion"},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/VersionWarning"}}},"required":["artifact","version","warnings"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"VERSION_CONFLICT: the draft pointer changed, or IDEMPOTENCY_CONFLICT: this key was reused with different content.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/artifacts/{id}/versions/{versionId}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"versionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"operationId":"getVersion","summary":"Read one full immutable version","security":[{"agentToken":[]}],"x-required-scopes":["artifact:read"],"responses":{"200":{"description":"A full manifest for the selected version of this artifact.","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"$ref":"#/components/schemas/ArtifactVersion"}},"required":["version"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/artifacts/{id}/preview":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"post":{"operationId":"createPreview","summary":"Mint a short-lived, single-use private preview URL","description":"Open the URL on its isolated version-specific delivery origin. Loading it consumes the ticket; request a fresh URL for another browser tab. Do not log or persist the ticket URL. This never publishes the draft or grants workspace access.","security":[{"agentToken":[]}],"x-required-scopes":["artifact:read"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"versionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},"required":["versionId"]}}}},"responses":{"200":{"description":"A scoped delivery preview URL.","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/artifacts/{id}/publish":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"post":{"operationId":"publishVersion","x-guarded-required-scopes":["artifact:read","artifact:publish"],"summary":"Publish or restore a saved version at one permanent address","description":"Explicit publishing authority is required. Agents must require artifact.publicationGuardVersion=1 and send expectedPublicationRevision (null only for first publication; otherwise the exact reviewed artifact.publication.revision). The guarded path rechecks the originating session or credential and requires read plus publish scope. A missing guard must never fall back to unguarded publication. On first publication choose a non-reserved slug; all later publishes must reuse it, even after expiry or revocation. expectedPublishedVersionId must equal artifact.publication.versionId, or null only when no publication exists. audience=recipients requires at least one email; expiresAt must be null or in the future. A failed update leaves the prior publication untouched. Restore by supplying an earlier compatible versionId.","security":[{"agentToken":[]}],"x-required-scopes":["artifact:publish"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"versionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"slug":{"type":"string","minLength":3,"maxLength":48,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"audience":{"type":"string","enum":["owner","recipients","public"]},"recipients":{"default":[],"maxItems":50,"type":"array","items":{"type":"string","format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"expiresAt":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"expectedPublishedVersionId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"expectedPublicationRevision":{"anyOf":[{"type":"integer","minimum":0,"maximum":2147483647},{"type":"null"}]}},"required":["versionId","slug","audience","expectedPublishedVersionId"]}}}},"responses":{"200":{"description":"Live publication and updated artifact.","content":{"application/json":{"schema":{"type":"object","properties":{"artifact":{"$ref":"#/components/schemas/Artifact"},"publication":{"$ref":"#/components/schemas/Publication"}},"required":["artifact","publication"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"PUBLICATION_CONFLICT: reread the live pointer before retrying; SLUG_IMMUTABLE: reuse this artifact’s original slug, including after revocation or expiry; CONFLICT: a new slug is unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/artifacts/{id}/revoke":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"post":{"operationId":"revokePublication","summary":"Turn off reader access","description":"Preserves the artifact and saved versions. The publication record, version pointer and permanently assigned slug remain. Repeating a revoke is safe; republish at the same address when ready.","security":[{"agentToken":[]}],"x-required-scopes":["artifact:publish"],"responses":{"200":{"description":"Artifact with its publication revoked, if one exists.","content":{"application/json":{"schema":{"type":"object","properties":{"artifact":{"$ref":"#/components/schemas/Artifact"}},"required":["artifact"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/generate":{"post":{"operationId":"generateDraft","summary":"Create or revise a private app or document with AI","description":"Requires configured AI service and available quota. The JSON request must fit within 16,000 UTF-8 bytes, including prompt and metadata. Returns a durable operation, not a completed draft. Supply artifactId and its current baseVersionId to revise existing work. Poll the operation until a terminal status; succeeded identifies the new private version. AI never publishes and does not revise file-kind artifacts.","security":[{"agentToken":[]}],"x-required-scopes":["artifact:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"prompt":{"type":"string","minLength":3,"maxLength":6000},"kind":{"type":"string","enum":["app","document"]},"artifactId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"baseVersionId":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"idempotencyKey":{"type":"string","minLength":8,"maxLength":100}},"required":["prompt","kind","idempotencyKey"]}}}},"responses":{"202":{"description":"Persisted generation operation. It may remain queued while dispatch recovers.","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"$ref":"#/components/schemas/Operation"}},"required":["operation"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"409":{"description":"A draft or operation idempotency conflict occurred. Reread current state before changing the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/operations/{id}":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"get":{"operationId":"getGenerationOperation","summary":"Read persisted AI progress","security":[{"agentToken":[]}],"x-required-scopes":["artifact:read"],"responses":{"200":{"description":"Current operation state, including failure or cancellation.","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"$ref":"#/components/schemas/Operation"}},"required":["operation"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/operations/{id}/cancel":{"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"post":{"operationId":"cancelGenerationOperation","summary":"Request cancellation of queued or running generation","description":"Read the returned status. An operation that already reached a terminal status stays in that state; cancellation does not undo a completed saved version. Existing published content is unaffected.","security":[{"agentToken":[]}],"x-required-scopes":["artifact:write"],"responses":{"200":{"description":"Operation state after the cancellation attempt.","content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"$ref":"#/components/schemas/Operation"}},"required":["operation"],"additionalProperties":false}}}},"400":{"description":"INVALID_JSON or JSON_REQUIRED: provide a valid JSON request body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"description":"SIGN_IN_REQUIRED, INVALID_CREDENTIAL or AUTH_REVOKED: a valid Live.link bearer credential is required.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"403":{"description":"SCOPE_REQUIRED: this credential does not have the operation’s required scope. Browser-origin requests also require the canonical management origin.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"404":{"description":"NOT_FOUND: the artifact, version, or operation is unavailable in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"413":{"description":"Request or decoded file-size limit exceeded.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"415":{"description":"JSON_REQUIRED: use Content-Type: application/json for a JSON request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"422":{"description":"INVALID_REQUEST or content validation failed. Inspect error.details when provided, then correct the request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"A workspace, request-rate, or AI usage limit was reached. Retrying immediately does not increase the limit.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"500":{"description":"REQUEST_FAILED: an unexpected failure occurred. Keep error.traceId for support; retry writes with the original idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"503":{"description":"The database, delivery, or AI provider is temporarily unavailable or not configured. No successful publication is implied.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}}}}