{"openapi":"3.1.0","info":{"title":"Marke. Agent Studio","version":"1.0.0","description":"Create and review custom branded 12 oz aluminum or transparent can concepts with water, sparkling water, cold brew, matcha or hibiscus tea. Transparent cans are limited to 100 total per review request. Invitation access. Review submission is an explicit action and does not authorize production or payment."},"servers":[{"url":"https://www.marke.company"}],"paths":{"/api/design-studio/agent":{"get":{"operationId":"getMarkeStudioCapabilities","summary":"Public design options and schemas","responses":{"200":{"description":"Supported tools, design settings, limits and access status."}}},"post":{"operationId":"executeMarkeStudioTool","summary":"Call an invited agent design tool","security":[{"studioInvitation":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["tool","input"],"additionalProperties":false,"description":"Read supported can geometry, label finishes, color format and limits. This operation does not create a project or contact the team.","properties":{"tool":{"type":"string","const":"get_options"},"input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false}}},{"type":"object","required":["tool","input"],"additionalProperties":false,"description":"Create a saved quote draft and its first can design using truthful contact details supplied by the user. Reuse the same requestId and input on retry. Returns a private edit token and review URL; keep both private. Does not email the team.","properties":{"tool":{"type":"string","const":"create_project"},"input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"requestId":{"type":"string","allOf":[{"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)$"},{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}]},"contact":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":120},"email":{"type":"string","maxLength":180,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"company":{"type":"string","maxLength":160},"deliveryLocation":{"type":"string","minLength":2,"maxLength":200},"deliveryDate":{"anyOf":[{"type":"string","const":""},{"type":"string","format":"date","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])))$"}]},"notes":{"type":"string","maxLength":3000}},"required":["name","email","company","deliveryLocation","deliveryDate","notes"]},"name":{"default":"Design 01","type":"string","minLength":1,"maxLength":100},"settings":{"type":"object","properties":{"container":{"type":"string","enum":["aluminum","transparent"]},"beverage":{"type":"string","minLength":1,"maxLength":120},"label":{"type":"string","enum":["full-wrap","clear"]},"finish":{"type":"string","enum":["matte","gloss"]},"color":{"type":"string","pattern":"^#[0-9a-f]{6}$"},"logoAssetId":{"anyOf":[{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"logoScale":{"type":"number","minimum":0.5,"maximum":1.6},"orientation":{"type":"string","enum":["horizontal","vertical"]},"text":{"type":"string","maxLength":300}},"additionalProperties":false}},"required":["requestId","contact"],"additionalProperties":false}}},{"type":"object","required":["tool","input"],"additionalProperties":false,"description":"Read a project using its private edit token. Returns client-visible designs, immutable versions, contact details and review status; no internal order or financial records.","properties":{"tool":{"type":"string","const":"get_project"},"input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","pattern":"^[0-9a-f-]{36}\\.[a-f0-9]{64}$"}},"required":["token"],"additionalProperties":false}}},{"type":"object","required":["tool","input"],"additionalProperties":false,"description":"Add an independent design to a project using its latest version. Reuse requestId on retry. Does not submit any design for review.","properties":{"tool":{"type":"string","const":"create_design"},"input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","pattern":"^[0-9a-f-]{36}\\.[a-f0-9]{64}$"},"expectedVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","allOf":[{"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)$"},{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}]},"name":{"type":"string","minLength":1,"maxLength":100},"settings":{"type":"object","properties":{"container":{"type":"string","enum":["aluminum","transparent"]},"beverage":{"type":"string","minLength":1,"maxLength":120},"label":{"type":"string","enum":["full-wrap","clear"]},"finish":{"type":"string","enum":["matte","gloss"]},"color":{"type":"string","pattern":"^#[0-9a-f]{6}$"},"logoAssetId":{"anyOf":[{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"logoScale":{"type":"number","minimum":0.5,"maximum":1.6},"orientation":{"type":"string","enum":["horizontal","vertical"]},"text":{"type":"string","maxLength":300}},"additionalProperties":false}},"required":["token","expectedVersion","requestId","name"],"additionalProperties":false}}},{"type":"object","required":["tool","input"],"additionalProperties":false,"description":"Append a new immutable design version from the current baseVersionId. Apply precise settings; never alter an uploaded logo. Reuse the same requestId on retry. Returns conflict if another editor has changed the project.","properties":{"tool":{"type":"string","const":"update_design"},"input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","pattern":"^[0-9a-f-]{36}\\.[a-f0-9]{64}$"},"expectedVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","allOf":[{"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)$"},{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}]},"designId":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9_-]+$"},"baseVersionId":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9_-]+$"},"patch":{"type":"object","properties":{"container":{"type":"string","enum":["aluminum","transparent"]},"beverage":{"type":"string","minLength":1,"maxLength":120},"label":{"type":"string","enum":["full-wrap","clear"]},"finish":{"type":"string","enum":["matte","gloss"]},"color":{"type":"string","pattern":"^#[0-9a-f]{6}$"},"logoAssetId":{"anyOf":[{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9_-]+$"},{"type":"null"}]},"logoScale":{"type":"number","minimum":0.5,"maximum":1.6},"orientation":{"type":"string","enum":["horizontal","vertical"]},"text":{"type":"string","maxLength":300}},"additionalProperties":false}},"required":["token","expectedVersion","requestId","designId","baseVersionId","patch"],"additionalProperties":false}}},{"type":"object","required":["tool","input"],"additionalProperties":false,"description":"Save a user-supplied PNG, JPEG, WebP or simple SVG, up to 3 MiB, as canonical base64 bytes without a data URL prefix. Never fetch arbitrary URLs. Reuse assetId and identical bytes on retry; then use its id as logoAssetId in update_design.","properties":{"tool":{"type":"string","const":"upload_logo"},"input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","pattern":"^[0-9a-f-]{36}\\.[a-f0-9]{64}$"},"expectedVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"assetId":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9_-]+$"},"filename":{"type":"string","minLength":1,"maxLength":200},"mimeType":{"type":"string","enum":["image/png","image/jpeg","image/webp","image/svg+xml"]},"dataBase64":{"type":"string","minLength":4,"maxLength":4194304}},"required":["token","expectedVersion","assetId","filename","mimeType","dataBase64"],"additionalProperties":false}}},{"type":"object","required":["tool","input"],"additionalProperties":false,"description":"Render the selected immutable design version on its 12 oz sleek aluminum or transparent can, white background and Marke. branding as the website. Returns a PNG; show it to the user before requesting approval.","properties":{"tool":{"type":"string","const":"get_preview"},"input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","pattern":"^[0-9a-f-]{36}\\.[a-f0-9]{64}$"},"designId":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9_-]+$"},"versionId":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9_-]+$"}},"required":["token","designId","versionId"],"additionalProperties":false}}},{"type":"object","required":["tool","input"],"additionalProperties":false,"description":"External action: emails the Marke team. Call only after the user explicitly approves the exact rendered design version(s), quantities and contact details and asks to send them. userApproved must be true. The combined quantity of transparent cans across all selected designs must not exceed 100 per request. This is design review, not production approval, purchase or payment. Reuse requestId and exact input on retry; only deliveryStatus=sent confirms delivery.","properties":{"tool":{"type":"string","const":"submit_review"},"input":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"token":{"type":"string","pattern":"^[0-9a-f-]{36}\\.[a-f0-9]{64}$"},"expectedVersion":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"requestId":{"type":"string","allOf":[{"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)$"},{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"}]},"selectedDesigns":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"object","properties":{"designId":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9_-]+$"},"versionId":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9_-]+$"},"quantity":{"type":"integer","minimum":1,"maximum":10000000}},"required":["designId","versionId","quantity"]}},"contact":{"type":"object","properties":{"name":{"type":"string","minLength":2,"maxLength":120},"email":{"type":"string","maxLength":180,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"company":{"type":"string","maxLength":160},"deliveryLocation":{"type":"string","minLength":2,"maxLength":200},"deliveryDate":{"anyOf":[{"type":"string","const":""},{"type":"string","format":"date","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])))$"}]},"notes":{"type":"string","maxLength":3000}},"required":["name","email","company","deliveryLocation","deliveryDate","notes"]},"userApproved":{"type":"boolean","const":true}},"required":["token","expectedVersion","requestId","selectedDesigns","contact","userApproved"],"additionalProperties":false}}}]}}}},"responses":{"200":{"description":"Tool result. Private token and URLs grant project editing; keep them private. get_preview includes PNG base64 bytes in preview.data."},"202":{"description":"Review persisted, but team notification is not yet confirmed. Preserve the requestId and retry the same approved selection."},"400":{"description":"Invalid input."},"401":{"description":"Invitation key required."},"409":{"description":"Version or idempotency conflict. Read current state before changing the request."},"413":{"description":"Payload exceeds the documented limit."},"429":{"description":"Rate limited; retry later."},"503":{"description":"The required integration or agent access is not configured or available."}}}}},"components":{"securitySchemes":{"studioInvitation":{"type":"http","scheme":"bearer","description":"Marke-issued invitation key. Never put it in a URL or design content."}}}}