{"openapi":"3.1.0","info":{"title":"Email Love Builder API","version":"1.0.0","description":"Build emails from your design system: brand styles and components, campaigns, emails and their sections, previews and checks, comments, translations, images, export and push to your sending platform, and the Assistant. The same operations are MCP tools at /api/mcp, and at https://chat.emaillove.com/mcp as builder_<name> for people who sign in there with their Email Love account. Authenticate with a workspace API key from Settings › API keys: Authorization: Bearer ef_…. A key works in its own workspace, with its person's role, and its access level (Read only, Draft, Full) decides which operations it may call. Every edit takes the revision you read (baseRevision): edits by others to other parts of the email are merged; an edit to the same part answers 409 with what changed."},"servers":[{"url":"https://app.emaillove.com"}],"security":[{"apiKey":[]}],"tags":[{"name":"Brand and library"},{"name":"Campaigns"},{"name":"Emails"},{"name":"Sections"},{"name":"Preview and checks"},{"name":"Review"},{"name":"Translations"},{"name":"Export and send"},{"name":"Assistant"}],"paths":{"/api/v1/workspaces":{"get":{"operationId":"list_workspaces","summary":"List workspaces","tags":["Brand and library"],"description":"The workspaces this connection can work in: id and name. The other tools use the current one unless you pass a workspaceId.\n\nNeeds a Read only key (or better). MCP tool: `list_workspaces`.","x-access":"read","x-mcp-tool":"list_workspaces","responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/design-systems":{"get":{"operationId":"list_design_systems","summary":"List design systems","tags":["Brand and library"],"description":"The workspace's design systems (brands): id, name and how many components, templates and emails each has. Every email belongs to one design system.\n\nNeeds a Read only key (or better). MCP tool: `list_design_systems`.","x-access":"read","x-mcp-tool":"list_design_systems","parameters":[{"name":"workspaceId","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"From list_workspaces. Leave out for the connection's own workspace."},"description":"From list_workspaces. Leave out for the connection's own workspace."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/design-systems/{designSystemId}":{"get":{"operationId":"get_design_system","summary":"Get a design system","tags":["Brand and library"],"description":"One design system in full: its brand tokens and every component with its fields. For something smaller use get_brand_styles, list_components and get_component.\n\nNeeds a Read only key (or better). MCP tool: `get_design_system`.","x-access":"read","x-mcp-tool":"get_design_system","parameters":[{"name":"designSystemId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_design_systems."},"description":"From list_design_systems."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/design-systems/{designSystemId}/brand-styles":{"get":{"operationId":"get_brand_styles","summary":"Get brand styles","tags":["Brand and library"],"description":"A design system's brand styles: colours (by name, as color fields take them), fonts, type scale, button styles, email width and logos. Use the colour names and button style keys in set_section_fields and set_section_style.\n\nNeeds a Read only key (or better). MCP tool: `get_brand_styles`.","x-access":"read","x-mcp-tool":"get_brand_styles","parameters":[{"name":"designSystemId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_design_systems."},"description":"From list_design_systems."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/design-systems/{designSystemId}/components":{"get":{"operationId":"list_components","summary":"List components","tags":["Brand and library"],"description":"The components (section types) a design system offers, in the order the editor shows them: key, name, category and a one-line description. Use get_component for a component's fields before adding it with add_section.\n\nNeeds a Read only key (or better). MCP tool: `list_components`.","x-access":"read","x-mcp-tool":"list_components","parameters":[{"name":"designSystemId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_design_systems."},"description":"From list_design_systems."},{"name":"category","in":"query","required":false,"schema":{"type":"string","description":"Only this category, such as header, hero, content, conversion, ecommerce, structure or footer."},"description":"Only this category, such as header, hero, content, conversion, ecommerce, structure or footer."},{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Only components whose name, key or description has these words."},"description":"Only components whose name, key or description has these words."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/design-systems/{designSystemId}/components/{componentKey}":{"get":{"operationId":"get_component","summary":"Get a component","tags":["Brand and library"],"description":"One component in detail: its fields (key, type, options, limits, default), the parts an email can switch on or off, its show/hide switches, how its sections can be styled, and the design system's guidance for it. Field keys are what set_section_fields and add_section take.\n\nNeeds a Read only key (or better). MCP tool: `get_component`.","x-access":"read","x-mcp-tool":"get_component","parameters":[{"name":"designSystemId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_design_systems."},"description":"From list_design_systems."},{"name":"componentKey","in":"path","required":true,"schema":{"type":"string","description":"From list_components."},"description":"From list_components."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/design-systems/{designSystemId}/templates":{"get":{"operationId":"list_templates","summary":"List templates","tags":["Brand and library"],"description":"A design system's templates: ready-made emails to start from with create_email (templateId). A fixed template keeps its sections; a flexible one lets you add, move and remove them.\n\nNeeds a Read only key (or better). MCP tool: `list_templates`.","x-access":"read","x-mcp-tool":"list_templates","parameters":[{"name":"designSystemId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_design_systems."},"description":"From list_design_systems."},{"name":"includeUnavailable","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Also templates the design system hasn't made available for new emails."},"description":"Also templates the design system hasn't made available for new emails."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/merge-tags":{"get":{"operationId":"list_merge_tags","summary":"List merge tags","tags":["Brand and library"],"description":"The workspace's merge tags (personalisation). Put a tag's placeholder, such as {{@First name@}}, in any text or link field: each sending platform gets its own syntax on export. Special links (unsubscribe, preferences, view online) work the same way.\n\nNeeds a Read only key (or better). MCP tool: `list_merge_tags`.","x-access":"read","x-mcp-tool":"list_merge_tags","parameters":[{"name":"workspaceId","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"From list_workspaces. Leave out for the connection's own workspace."},"description":"From list_workspaces. Leave out for the connection's own workspace."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/conditions":{"get":{"operationId":"list_conditions","summary":"List saved conditions","tags":["Brand and library"],"description":"The workspace's saved conditions (dynamic content) and their versions, such as \"Membership tier: Gold\". set_section_condition shows a section only to one version.\n\nNeeds a Read only key (or better). MCP tool: `list_conditions`.","x-access":"read","x-mcp-tool":"list_conditions","parameters":[{"name":"workspaceId","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"From list_workspaces. Leave out for the connection's own workspace."},"description":"From list_workspaces. Leave out for the connection's own workspace."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/images":{"get":{"operationId":"list_images","summary":"List images","tags":["Brand and library"],"description":"Pictures in the workspace's image library, newest first. Use an image's url in an image field ({ \"src\": url, \"alt\": \"…\" }).\n\nNeeds a Read only key (or better). MCP tool: `list_images`.","x-access":"read","x-mcp-tool":"list_images","parameters":[{"name":"workspaceId","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"From list_workspaces. Leave out for the connection's own workspace."},"description":"From list_workspaces. Leave out for the connection's own workspace."},{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Words in the file name or alt text."},"description":"Words in the file name or alt text."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":30}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"upload_image_from_url","summary":"Add an image from a URL","tags":["Brand and library"],"description":"Copy a public https picture (JPEG, PNG, GIF or WebP, up to 5 MB) into the workspace's image library and get its hosted url, ready for an image field: { \"src\": url, \"alt\": \"…\" }. A picture already in the library comes back as it is (duplicate: true).\n\nNeeds a Draft key (or better). MCP tool: `upload_image_from_url`.","x-access":"draft","x-mcp-tool":"upload_image_from_url","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"workspaceId":{"type":"integer","minimum":1,"description":"From list_workspaces. Leave out for the connection's own workspace."},"url":{"type":"string","description":"https address of the picture"},"name":{"type":"string","maxLength":180},"altText":{"type":"string","maxLength":500}},"required":["url"],"additionalProperties":false}}}},"responses":{"201":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/campaigns":{"get":{"operationId":"list_campaigns","summary":"List campaigns","tags":["Campaigns"],"description":"The workspace's campaigns (groups of emails), newest first, with how many emails each has, and the folders they sit in.\n\nNeeds a Read only key (or better). MCP tool: `list_campaigns`.","x-access":"read","x-mcp-tool":"list_campaigns","parameters":[{"name":"workspaceId","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"From list_workspaces. Leave out for the connection's own workspace."},"description":"From list_workspaces. Leave out for the connection's own workspace."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"create_campaign","summary":"Create a campaign","tags":["Campaigns"],"description":"A new, empty campaign to put emails in (create_email with campaignId, or move_email_to_campaign). Optionally inside a folder.\n\nNeeds a Draft key (or better). MCP tool: `create_campaign`.","x-access":"draft","x-mcp-tool":"create_campaign","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"workspaceId":{"type":"integer","minimum":1,"description":"From list_workspaces. Leave out for the connection's own workspace."},"name":{"type":"string","maxLength":255},"description":{"type":"string","maxLength":4000},"folderId":{"type":"integer","minimum":1,"description":"A folder from list_campaigns."}},"required":["name"],"additionalProperties":false}}}},"responses":{"201":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/context":{"get":{"operationId":"open_email","summary":"Open an email to work on","tags":["Emails"],"description":"Everything needed to pick up work on one email, by its id or its Builder address (https://app.emaillove.com/eds/12/emails/345): its sections and current content with the revision to edit from, its template, its review status, its design system's brand styles and components, and its link in the Builder. Start here when someone hands you an email. The Builder doesn't keep Assistant chats, so a hand-over brings its own summary of the conversation.\n\nNeeds a Read only key (or better). MCP tool: `open_email`.","x-access":"read","x-mcp-tool":"open_email","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"url","in":"query","required":false,"schema":{"type":"string","description":"The email's address in the Builder, instead of emailId"},"description":"The email's address in the Builder, instead of emailId"}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails":{"get":{"operationId":"list_emails","summary":"List emails","tags":["Emails"],"description":"Emails in a campaign or a design system. With neither, the ten most recently edited emails in the workspace. kind \"template\" lists a design system's templates (or use list_templates).\n\nNeeds a Read only key (or better). MCP tool: `list_emails`.","x-access":"read","x-mcp-tool":"list_emails","parameters":[{"name":"campaignId","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"designSystemId","in":"query","required":false,"schema":{"type":"integer","minimum":1}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["email","template"]}},{"name":"workspaceId","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"From list_workspaces. Leave out for the connection's own workspace."},"description":"From list_workspaces. Leave out for the connection's own workspace."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"create_email","summary":"Create an email","tags":["Emails"],"description":"A new draft email in a design system: from a template (templateId, from list_templates), or from sections you list (each a component key with field values), or empty. Optionally in a campaign. Returns its id and revision.\n\nNeeds a Draft key (or better). MCP tool: `create_email`.","x-access":"draft","x-mcp-tool":"create_email","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"designSystemId":{"type":"integer","minimum":1},"name":{"type":"string","maxLength":255},"campaignId":{"type":"integer","minimum":1},"templateId":{"type":"integer","minimum":1,"description":"Start from this template; sections are then ignored."},"subject":{"type":"string","maxLength":300},"preheader":{"type":"string","maxLength":300},"sections":{"type":"array","maxItems":60,"items":{"type":"object","properties":{"component":{"type":"string","description":"A component key from list_components."},"fields":{"type":"object","description":"Field key to value (get_component). Fields left out use the component's defaults."}},"required":["component"]}},"blocks":{"type":"array","maxItems":60,"items":{"type":"object","properties":{"component":{"type":"string","description":"A component key from list_components."},"fields":{"type":"object","description":"Field key to value (get_component). Fields left out use the component's defaults."}},"required":["component"]},"description":"The older name for sections."}},"required":["designSystemId"],"additionalProperties":false}}}},"responses":{"201":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}":{"get":{"operationId":"get_email","summary":"Get an email","tags":["Emails"],"description":"One email: name, subject, preheader, status, its revision (pass it as baseRevision when you edit) and its sections in order, each with its component and field values. outline: true gives one line per section instead. includeHtml: true adds the rendered preview HTML (large; preview_email is the same).\n\nNeeds a Read only key (or better). MCP tool: `get_email`.","x-access":"read","x-mcp-tool":"get_email","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"outline","in":"query","required":false,"schema":{"type":"boolean","default":false}},{"name":"includeHtml","in":"query","required":false,"schema":{"type":"boolean","default":false}},{"name":"locale","in":"query","required":false,"schema":{"type":"string","description":"With includeHtml: a language on the email, for its translated preview."},"description":"With includeHtml: a language on the email, for its translated preview."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"patch":{"operationId":"set_email_details","summary":"Rename an email, set its subject and preheader","tags":["Emails"],"description":"Change an email's name, subject line or preheader (preview text). Merge tag placeholders such as {{@First name@}} work in the subject and preheader.\n\nNeeds a Draft key (or better). MCP tool: `set_email_details`.","x-access":"draft","x-mcp-tool":"set_email_details","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"baseRevision":{"type":"integer","minimum":1,"description":"The email revision you last read (get_email, or the revision a previous edit returned). Edits made since by someone else are merged when they touch other parts of the email; overlapping ones are refused, never overwritten."},"name":{"type":"string","maxLength":255},"subject":{"type":"string","maxLength":300},"preheader":{"type":"string","maxLength":300}},"required":["baseRevision"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/review":{"get":{"operationId":"get_review","summary":"Get comments and review status","tags":["Review"],"description":"An email's review: its status (draft, in_review, changes_requested, approved), the approval steps and who they wait on, sign-off decisions and comments (open ones unless includeResolved).\n\nNeeds a Read only key (or better). MCP tool: `get_review`.","x-access":"read","x-mcp-tool":"get_review","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"includeResolved","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/translations":{"get":{"operationId":"list_languages","summary":"List an email's languages","tags":["Translations"],"description":"The languages added to an email, each with its status (draft, in_progress, translated, approved), progress and its own revision.\n\nNeeds a Read only key (or better). MCP tool: `list_languages`.","x-access":"read","x-mcp-tool":"list_languages","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"add_language","summary":"Add a language to an email","tags":["Translations"],"description":"Add a language to translate the email into. Then translate it with translate_with_ai or write it with set_translation_strings.\n\nNeeds a Full key (or better). MCP tool: `add_language`.","x-access":"full","x-mcp-tool":"add_language","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"locale":{"type":"string","description":"A language code such as fr, de or pt-BR"}},"required":["locale"],"additionalProperties":false}}}},"responses":{"201":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/translations/{locale}":{"get":{"operationId":"get_translation","summary":"Get a translation","tags":["Translations"],"description":"One language of an email: every piece of text to translate (key, the section it's in, the original, the translation and whether it's missing, outdated or current), and the language's revision for set_translation_strings.\n\nNeeds a Read only key (or better). MCP tool: `get_translation`.","x-access":"read","x-mcp-tool":"get_translation","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"locale","in":"path","required":true,"schema":{"type":"string","description":"A language code such as fr, de or pt-BR"},"description":"A language code such as fr, de or pt-BR"},{"name":"pendingOnly","in":"query","required":false,"schema":{"type":"boolean","default":false,"description":"Only text that is missing or outdated"},"description":"Only text that is missing or outdated"}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/preview":{"get":{"operationId":"preview_email","summary":"Preview an email","tags":["Preview and checks"],"description":"The saved email's rendered HTML, as the editor's preview shows it, in light or dark mode and in one of its languages. Merge tags show their example values. For the HTML a sending platform gets, use export_email.\n\nNeeds a Read only key (or better). MCP tool: `preview_email`.","x-access":"read","x-mcp-tool":"preview_email","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"appearance","in":"query","required":false,"schema":{"type":"string","enum":["light","dark"],"default":"light"}},{"name":"locale","in":"query","required":false,"schema":{"type":"string","description":"A language on the email (list_languages)"},"description":"A language on the email (list_languages)"}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/checks":{"get":{"operationId":"check_email","summary":"Check an email","tags":["Preview and checks"],"description":"The checks the editor runs on the saved email: required fields, links, placeholder images, merge tags, unsubscribe link, size (Gmail clips at 102 KB), tracking, outdated sections and the team's own rules, each with the section it's about. ok: false means export would be refused until the errors are fixed.\n\nNeeds a Read only key (or better). MCP tool: `check_email`.","x-access":"read","x-mcp-tool":"check_email","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"locale","in":"query","required":false,"schema":{"type":"string","description":"Check this language's version"},"description":"Check this language's version"}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/destinations":{"get":{"operationId":"list_destinations","summary":"List sending platforms","tags":["Export and send"],"description":"Where this email can go: the sending platforms (ESPs) the workspace has connected, each with its accounts (pass an account's id to push_to_esp when there is more than one), and the last pushes of this email.\n\nNeeds a Read only key (or better). MCP tool: `list_destinations`.","x-access":"read","x-mcp-tool":"list_destinations","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/campaigns/{campaignId}":{"patch":{"operationId":"update_campaign","summary":"Rename a campaign","tags":["Campaigns"],"description":"Change a campaign's name or description.\n\nNeeds a Draft key (or better). MCP tool: `update_campaign`.","x-access":"draft","x-mcp-tool":"update_campaign","parameters":[{"name":"campaignId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_campaigns."},"description":"From list_campaigns."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":255},"description":{"type":"string","maxLength":4000}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/campaign-folders":{"post":{"operationId":"create_campaign_folder","summary":"Create a campaign folder","tags":["Campaigns"],"description":"A folder to group campaigns, optionally moving campaigns into it.\n\nNeeds a Draft key (or better). MCP tool: `create_campaign_folder`.","x-access":"draft","x-mcp-tool":"create_campaign_folder","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"workspaceId":{"type":"integer","minimum":1,"description":"From list_workspaces. Leave out for the connection's own workspace."},"name":{"type":"string","maxLength":255},"campaignIds":{"type":"array","items":{"type":"integer","minimum":1},"maxItems":200}},"required":["name"],"additionalProperties":false}}}},"responses":{"201":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/campaigns/{campaignId}/folder":{"put":{"operationId":"move_campaign_to_folder","summary":"Move a campaign to a folder","tags":["Campaigns"],"description":"Put a campaign in a folder, or take it out of its folder with folderId null.\n\nNeeds a Draft key (or better). MCP tool: `move_campaign_to_folder`.","x-access":"draft","x-mcp-tool":"move_campaign_to_folder","parameters":[{"name":"campaignId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_campaigns."},"description":"From list_campaigns."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"folderId":{"type":["integer","null"],"minimum":1}},"required":["folderId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/duplicate":{"post":{"operationId":"duplicate_email","summary":"Duplicate an email","tags":["Emails"],"description":"A copy of an email, named \"Copy of …\", in the same campaign. Returns the copy's id.\n\nNeeds a Draft key (or better). MCP tool: `duplicate_email`.","x-access":"draft","x-mcp-tool":"duplicate_email","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"201":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/campaign":{"put":{"operationId":"move_email_to_campaign","summary":"Move an email to a campaign","tags":["Emails"],"description":"Put an email in another campaign of the same workspace (at the end). Its content and approval don't change.\n\nNeeds a Draft key (or better). MCP tool: `move_email_to_campaign`.","x-access":"draft","x-mcp-tool":"move_email_to_campaign","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"campaignId":{"type":"integer","minimum":1}},"required":["campaignId"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/edits":{"post":{"operationId":"apply_email_edits","summary":"Apply edits to an email","tags":["Sections"],"description":"Several edits as one save (up to 50): set a field, insert, move, remove or duplicate a section, set the name/subject/preheader, set who sees a section (showWhen). It is also how you accept the edits ask_assistant proposes: pass them back as they came. Each edit is { type, … }: set { sectionId, path, value } · insert { section: { component, fields }, afterSectionId | index } · move { sectionId, afterSectionId | index } · remove { sectionId } · duplicate { sectionId } · setMeta { name?, subject?, preheader? } · showWhen { sectionId, value }.\n\nNeeds a Draft key (or better). MCP tool: `apply_email_edits`.","x-access":"draft","x-mcp-tool":"apply_email_edits","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"baseRevision":{"type":"integer","minimum":1,"description":"The email revision you last read (get_email, or the revision a previous edit returned). Edits made since by someone else are merged when they touch other parts of the email; overlapping ones are refused, never overwritten."},"edits":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","properties":{"type":{"type":"string","enum":["set","insert","move","remove","duplicate","setMeta","showWhen","layout"]},"sectionId":{"type":"string"},"path":{"type":"string","description":"set: a field key, or a path into it such as items[0].title"},"value":{"description":"set / showWhen: the new value"},"section":{"type":"object","description":"insert: { component, fields, id? }"},"afterSectionId":{"type":["string","null"]},"index":{"type":"integer"},"name":{"type":"string"},"subject":{"type":"string"},"preheader":{"type":"string"},"operation":{"type":"object","description":"layout: a row content edit"}},"required":["type"]}}},"required":["baseRevision","edits"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/sections":{"post":{"operationId":"add_section","summary":"Add a section","tags":["Sections"],"description":"Add a section (one component) to an email, with any field values you give; the rest use the component's defaults. Returns the new section's id. A fixed template, or a role without structure rights, refuses this.\n\nNeeds a Draft key (or better). MCP tool: `add_section`.","x-access":"draft","x-mcp-tool":"add_section","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"baseRevision":{"type":"integer","minimum":1,"description":"The email revision you last read (get_email, or the revision a previous edit returned). Edits made since by someone else are merged when they touch other parts of the email; overlapping ones are refused, never overwritten."},"component":{"type":"string","description":"A component key from list_components."},"fields":{"type":"object","description":"Field key to value, from get_component."},"afterSectionId":{"type":["string","null"],"description":"Put it after this section; null puts it first. Leave out (and index) to put it last."},"index":{"type":"integer","minimum":0,"maximum":60,"description":"Or a position from 0 (first). afterSectionId is safer when others are editing."}},"required":["baseRevision","component"],"additionalProperties":false}}}},"responses":{"201":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/sections/{sectionId}/move":{"post":{"operationId":"move_section","summary":"Move a section","tags":["Sections"],"description":"Move a section to another place in the email: after another section (afterSectionId; null for first) or to a position (index).\n\nNeeds a Draft key (or better). MCP tool: `move_section`.","x-access":"draft","x-mcp-tool":"move_section","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"sectionId","in":"path","required":true,"schema":{"type":"string","description":"A section's id from get_email (its \"id\")."},"description":"A section's id from get_email (its \"id\")."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"baseRevision":{"type":"integer","minimum":1,"description":"The email revision you last read (get_email, or the revision a previous edit returned). Edits made since by someone else are merged when they touch other parts of the email; overlapping ones are refused, never overwritten."},"afterSectionId":{"type":["string","null"],"description":"Put it after this section; null puts it first. Leave out (and index) to put it last."},"index":{"type":"integer","minimum":0,"maximum":60,"description":"Or a position from 0 (first). afterSectionId is safer when others are editing."}},"required":["baseRevision"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/sections/{sectionId}":{"delete":{"operationId":"remove_section","summary":"Remove a section","tags":["Sections"],"description":"Take a section out of the email. The email's history keeps the earlier revision.\n\nNeeds a Draft key (or better). MCP tool: `remove_section`.","x-access":"draft","x-mcp-tool":"remove_section","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"sectionId","in":"path","required":true,"schema":{"type":"string","description":"A section's id from get_email (its \"id\")."},"description":"A section's id from get_email (its \"id\")."},{"name":"baseRevision","in":"query","required":true,"schema":{"type":"integer","minimum":1,"description":"The email revision you last read (get_email, or the revision a previous edit returned). Edits made since by someone else are merged when they touch other parts of the email; overlapping ones are refused, never overwritten."},"description":"The email revision you last read (get_email, or the revision a previous edit returned). Edits made since by someone else are merged when they touch other parts of the email; overlapping ones are refused, never overwritten."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/sections/{sectionId}/duplicate":{"post":{"operationId":"duplicate_section","summary":"Duplicate a section","tags":["Sections"],"description":"A copy of a section, straight after it. Returns the copy's id.\n\nNeeds a Draft key (or better). MCP tool: `duplicate_section`.","x-access":"draft","x-mcp-tool":"duplicate_section","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"sectionId","in":"path","required":true,"schema":{"type":"string","description":"A section's id from get_email (its \"id\")."},"description":"A section's id from get_email (its \"id\")."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"baseRevision":{"type":"integer","minimum":1,"description":"The email revision you last read (get_email, or the revision a previous edit returned). Edits made since by someone else are merged when they touch other parts of the email; overlapping ones are refused, never overwritten."}},"required":["baseRevision"],"additionalProperties":false}}}},"responses":{"201":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/sections/{sectionId}/fields":{"patch":{"operationId":"set_section_fields","summary":"Set a section's field values","tags":["Sections"],"description":"Change field values in one section: text, rich text (HTML), links, images ({ \"src\", \"alt\" }), colours (a brand colour name), options and show/hide switches. Keys are the component's field keys (get_component); a path such as items[0].title reaches inside a list. Merge tag placeholders such as {{@First name@}} work in text and links.\n\nNeeds a Draft key (or better). MCP tool: `set_section_fields`.","x-access":"draft","x-mcp-tool":"set_section_fields","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"sectionId","in":"path","required":true,"schema":{"type":"string","description":"A section's id from get_email (its \"id\")."},"description":"A section's id from get_email (its \"id\")."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"baseRevision":{"type":"integer","minimum":1,"description":"The email revision you last read (get_email, or the revision a previous edit returned). Edits made since by someone else are merged when they touch other parts of the email; overlapping ones are refused, never overwritten."},"fields":{"type":"object","description":"Field key (or path) to its new value. Up to 50."}},"required":["baseRevision","fields"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/sections/{sectionId}/parts":{"patch":{"operationId":"set_section_parts","summary":"Show or hide parts of a section","tags":["Sections"],"description":"Switch a section's optional parts on or off in this email, such as its eyebrow, image or button (get_component lists them as optionalParts). Show/hide switches that are fields (showSwitches) are set with set_section_fields instead.\n\nNeeds a Draft key (or better). MCP tool: `set_section_parts`.","x-access":"draft","x-mcp-tool":"set_section_parts","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"sectionId","in":"path","required":true,"schema":{"type":"string","description":"A section's id from get_email (its \"id\")."},"description":"A section's id from get_email (its \"id\")."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"baseRevision":{"type":"integer","minimum":1,"description":"The email revision you last read (get_email, or the revision a previous edit returned). Edits made since by someone else are merged when they touch other parts of the email; overlapping ones are refused, never overwritten."},"parts":{"type":"object","additionalProperties":{"type":"boolean"},"description":"Part key to true (shown) or false (hidden)."}},"required":["baseRevision","parts"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/sections/{sectionId}/style":{"patch":{"operationId":"set_section_style","summary":"Style a section","tags":["Sections"],"description":"A section's own settings in this email. Rows (components whose get_component style.kind is \"row\"): background and content background colours (#RRGGBB or \"transparent\"), padding, phone padding, vertical alignment, mobile stacking, a background image and column widths. Every section: show it on desktop only, phone only or all; phone padding; its button style (a key from get_brand_styles). showOn \"all\" clears the limit.\n\nNeeds a Draft key (or better). MCP tool: `set_section_style`.","x-access":"draft","x-mcp-tool":"set_section_style","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"sectionId","in":"path","required":true,"schema":{"type":"string","description":"A section's id from get_email (its \"id\")."},"description":"A section's id from get_email (its \"id\")."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"baseRevision":{"type":"integer","minimum":1,"description":"The email revision you last read (get_email, or the revision a previous edit returned). Edits made since by someone else are merged when they touch other parts of the email; overlapping ones are refused, never overwritten."},"backgroundColor":{"type":"string","description":"#RRGGBB or transparent (rows)"},"contentBackgroundColor":{"type":"string","description":"#RRGGBB or transparent (rows)"},"padding":{"type":"object","properties":{"top":{"type":"integer"},"right":{"type":"integer"},"bottom":{"type":"integer"},"left":{"type":"integer"}},"description":"Pixels 0–100 (rows)"},"phonePadding":{"type":"object","properties":{"top":{"type":"integer"},"right":{"type":"integer"},"bottom":{"type":"integer"},"left":{"type":"integer"}},"description":"Pixels 0–100 on phones"},"showOn":{"type":"string","enum":["all","desktop","phone"]},"verticalAlign":{"type":"string","enum":["top","middle","bottom"]},"stackOnMobile":{"type":"boolean"},"reverseOnMobile":{"type":"boolean"},"backgroundImage":{"type":["object","null"],"properties":{"src":{"type":"string"},"position":{"type":"string"},"size":{"type":"string","enum":["cover","contain","auto"]}}},"columnWidths":{"type":"array","items":{"type":"number"},"description":"Percent per column, adding up to 100 (rows)"},"buttonStyle":{"type":"string","description":"A button style key from get_brand_styles"}},"required":["baseRevision"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/sections/{sectionId}/condition":{"put":{"operationId":"set_section_condition","summary":"Show a section to some people only","tags":["Sections"],"description":"Dynamic content: who sees a section. A saved condition's version (list_conditions: savedConditionId and version key), or your own platform code (code: { start, end, label? }, such as {% if customer.vip %} … {% endif %}), or null to show it to everyone. The code is written for each sending platform on export.\n\nNeeds a Draft key (or better). MCP tool: `set_section_condition`.","x-access":"draft","x-mcp-tool":"set_section_condition","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"sectionId","in":"path","required":true,"schema":{"type":"string","description":"A section's id from get_email (its \"id\")."},"description":"A section's id from get_email (its \"id\")."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"baseRevision":{"type":"integer","minimum":1,"description":"The email revision you last read (get_email, or the revision a previous edit returned). Edits made since by someone else are merged when they touch other parts of the email; overlapping ones are refused, never overwritten."},"savedConditionId":{"type":"integer","minimum":1},"version":{"type":"string","description":"A version key of that condition"},"code":{"type":["object","null"],"properties":{"start":{"type":"string","maxLength":500},"end":{"type":"string","maxLength":200},"label":{"type":"string","maxLength":120}},"description":"Your own opening and closing code; null shows the section to everyone."}},"required":["baseRevision"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/comments":{"post":{"operationId":"add_comment","summary":"Comment on an email","tags":["Review"],"description":"A comment on the email, on one of its sections (sectionId), or a reply to a comment (replyTo), as the connection's person. Teammates see it in the email's comments and @mentions notify them.\n\nNeeds a Draft key (or better). MCP tool: `add_comment`.","x-access":"draft","x-mcp-tool":"add_comment","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":4000},"sectionId":{"type":"string"},"blockId":{"type":"string","description":"The older name for sectionId."},"replyTo":{"type":"integer","minimum":1,"description":"A comment id from get_review"}},"required":["text"],"additionalProperties":false}}}},"responses":{"201":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/comments/{commentId}":{"patch":{"operationId":"resolve_comment","summary":"Resolve a comment","tags":["Review"],"description":"Mark a comment resolved, or open it again with resolved: false.\n\nNeeds a Draft key (or better). MCP tool: `resolve_comment`.","x-access":"draft","x-mcp-tool":"resolve_comment","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"commentId","in":"path","required":true,"schema":{"type":"integer","minimum":1}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"resolved":{"type":"boolean","default":true}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/signoff-request":{"post":{"operationId":"request_signoff","summary":"Ask for sign-off","tags":["Review"],"description":"Send the email for review: it goes to \"In review\" and you get the review link to share. Approving needs a person in the Builder; no tool can approve.\n\nNeeds a Draft key (or better). MCP tool: `request_signoff`.","x-access":"draft","x-mcp-tool":"request_signoff","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/translations/{locale}/strings":{"patch":{"operationId":"set_translation_strings","summary":"Write translations","tags":["Translations"],"description":"Save translated text for one language: segment key (from get_translation) to the translated text. Keep merge tags such as {{@First name@}} and any HTML tags exactly as in the original. Pass the language's revision as baseRevision.\n\nNeeds a Draft key (or better). MCP tool: `set_translation_strings`.","x-access":"draft","x-mcp-tool":"set_translation_strings","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"locale","in":"path","required":true,"schema":{"type":"string","description":"A language code such as fr, de or pt-BR"},"description":"A language code such as fr, de or pt-BR"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"baseRevision":{"type":"integer","minimum":1,"description":"The language's revision from get_translation or list_languages"},"strings":{"type":"object","additionalProperties":{"type":"string"},"description":"Segment key to translated text. Up to 500."}},"required":["baseRevision","strings"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/translations/{locale}/ai":{"post":{"operationId":"translate_with_ai","summary":"Translate with AI","tags":["Translations"],"description":"Fill in a language's missing and outdated text with AI, using the brand's translation guidance; text already translated is kept. Up to 100 pieces of text per call (call again for the rest). Uses one AI credit from the workspace's plan per call, like Translate in the app.\n\nNeeds a Full key (or better). MCP tool: `translate_with_ai`. Uses AI credits from the workspace's plan.","x-access":"full","x-mcp-tool":"translate_with_ai","x-uses-ai":true,"parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."},{"name":"locale","in":"path","required":true,"schema":{"type":"string","description":"A language code such as fr, de or pt-BR"},"description":"A language code such as fr, de or pt-BR"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"string"},"maxItems":100,"description":"Only these segment keys (get_translation). Leave out for the next 100 that need it."},"doNotTranslate":{"type":"array","items":{"type":"string","maxLength":99},"maxItems":100,"description":"Words to keep as they are, such as product names"}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/export":{"post":{"operationId":"export_email","summary":"Export an email","tags":["Export and send"],"description":"The email as it leaves the Builder. format \"html\" (default): the finished HTML and its MJML, with merge tags in the chosen platform's syntax. \"image\": a PNG of the email. \"web\": a hosted web page link. Counts as an export on the plan, like Export in the app; exporting the same version again isn't counted twice (except on the Free plan). Refused while the email needs sign-off or has blocking check failures.\n\nNeeds a Full key (or better). MCP tool: `export_email`.","x-access":"full","x-mcp-tool":"export_email","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"esp":{"type":"string","enum":["braze","iterable","sfmc","customerio","marketo","beehiiv","dotdigital","html","stripo","klaviyo","mailchimp","hubspot","sendgrid","brevo","activecampaign","moengage","mailjet","postmark","pardot","airship","sailthru","emarsys","mailerlite","mailerliteclassic","blueshift","netcore","sendx","onesignal","acoustic","zeta"],"description":"The sending platform the merge tags and links are written for; \"html\" is plain HTML"},"format":{"type":"string","enum":["html","image","web"],"default":"html"},"locale":{"type":"string","description":"Send this language (approved in the Builder) instead of the original"},"includeMjml":{"type":"boolean","default":false}},"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/push":{"post":{"operationId":"push_to_esp","summary":"Push to a sending platform","tags":["Export and send"],"description":"Send the email to a connected sending platform (list_destinations) as a template or content block there, updating the one pushed before unless mode is \"new\". Counts as an export on the plan. Pushing the same version again returns the earlier result instead of pushing twice. Refused while the email needs sign-off.\n\nNeeds a Full key (or better). MCP tool: `push_to_esp`.","x-access":"full","x-mcp-tool":"push_to_esp","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"esp":{"type":"string","enum":["braze","brazecontentblock","iterable","iterablesnippet","sfmc","marketo","beehiiv","stripo","klaviyo","mailchimp","hubspot","customerio","sendgrid","brevo","activecampaign","moengage","mailjet","postmark","pardot","airship","sailthru","emarsys","mailerlite","mailerliteclassic","blueshift","netcore","sendx","onesignal","acoustic","zeta","moengageblock"],"description":"From list_destinations"},"accountId":{"type":"string","description":"Which account, when the platform has more than one (list_destinations)"},"name":{"type":"string","maxLength":255,"description":"The template's name on the platform; the email's name if left out"},"mode":{"type":"string","enum":["update","new"],"default":"update"},"locale":{"type":"string","description":"Send this language (approved in the Builder) instead of the original"}},"required":["esp"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/test-sends":{"post":{"operationId":"send_test_email","summary":"Send a test email","tags":["Export and send"],"description":"Send the saved email to up to 10 inboxes as a test (\"[Test]\" in the subject), with merge tags showing their example values and every conditional section shown. Real email: only send it to people who expect it. 20 recipients an hour per person.\n\nNeeds a Full key (or better). MCP tool: `send_test_email`.","x-access":"full","x-mcp-tool":"send_test_email","parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"to":{"type":"array","items":{"type":"string","format":"email"},"minItems":1,"maxItems":10},"locale":{"type":"string","description":"Send this language (approved in the Builder) instead of the original"}},"required":["to"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/assistant":{"post":{"operationId":"ask_assistant","summary":"Ask the Assistant to change an email","tags":["Assistant"],"description":"Ask the Builder's Assistant to change an email in words (\"make the hero about the autumn sale\", \"shorten the copy\", \"add a product grid\"), optionally about one section. It answers with a short message and proposed edits; nothing is saved. Accept them with apply_email_edits (all, or the ones you want) and the baseRevision it gives, or pass apply: true to save them now. Uses AI credits from the plan, like the Assistant in the app; it can take a minute or two.\n\nNeeds a Full key (or better). MCP tool: `ask_assistant`. Uses AI credits from the workspace's plan.","x-access":"full","x-mcp-tool":"ask_assistant","x-uses-ai":true,"parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"request":{"type":"string","maxLength":4000,"description":"What to change"},"sectionId":{"type":"string","description":"Focus on this section"},"apply":{"type":"boolean","default":false}},"required":["request"],"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/from-brief":{"post":{"operationId":"create_email_from_brief","summary":"Create an email from a brief","tags":["Assistant"],"description":"A new draft email written by the Builder's Assistant from a brief (the campaign, audience, offer, tone, links), using the design system's components and brand guidance, optionally starting from a template. The draft is saved; review it with get_email or check_email and change it with the other tools. Uses AI credits from the plan; it can take a few minutes.\n\nNeeds a Full key (or better). MCP tool: `create_email_from_brief`. Uses AI credits from the workspace's plan.","x-access":"full","x-mcp-tool":"create_email_from_brief","x-uses-ai":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"designSystemId":{"type":"integer","minimum":1},"brief":{"type":"string","maxLength":30000},"name":{"type":"string","maxLength":255},"campaignId":{"type":"integer","minimum":1},"templateId":{"type":"integer","minimum":1,"description":"Start from this template (list_templates)"}},"required":["designSystemId","brief"],"additionalProperties":false}}}},"responses":{"201":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/emails/{emailId}/subject-ideas":{"post":{"operationId":"suggest_subject_lines","summary":"Suggest subject lines","tags":["Assistant"],"description":"Up to three subject line and preheader pairs for the email, each with the approach it takes. Nothing is saved; use set_email_details to pick one. Uses AI credits from the plan.\n\nNeeds a Full key (or better). MCP tool: `suggest_subject_lines`. Uses AI credits from the workspace's plan.","x-access":"full","x-mcp-tool":"suggest_subject_lines","x-uses-ai":true,"parameters":[{"name":"emailId","in":"path","required":true,"schema":{"type":"integer","minimum":1,"description":"From list_emails or create_email."},"description":"From list_emails or create_email."}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/chats/{chatId}":{"get":{"operationId":"open_chat","summary":"Open a Builder chat","tags":["Assistant"],"description":"A saved conversation from the Builder's AI chat panel, to carry on where the person left off. \"Use in your agent\" in the Builder gives you its chatId. Returns the messages in order (each request, each reply, and what each reply did: the emails it created or changed, their status and \"Before you send\"), the campaign the chat is on, and the ids of every email it made or changed. Load an email with get_email before changing it. Only the person who started the chat can open it.\n\nNeeds a Read only key (or better). MCP tool: `open_chat`.","x-access":"read","x-mcp-tool":"open_chat","parameters":[{"name":"chatId","in":"path","required":true,"schema":{"type":"string","description":"The chat's id, from \"Use in your agent\" in the Builder."},"description":"The chat's id, from \"Use in your agent\" in the Builder."}],"responses":{"200":{"description":"Done","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"ef_ API key","description":"A workspace API key from Settings › API keys"}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"What went wrong, in words a person can act on"},"code":{"type":"string","description":"A stable code, such as API_KEY_SCOPE, ROLE_FORBIDDEN, EMAIL_OPS_CONFLICT, LIMIT_REACHED or SIGNOFF_REQUIRED"},"conflicts":{"type":"array","items":{"type":"object"},"description":"For 409 edit conflicts: what changed since your revision"},"currentRevision":{"type":"integer"},"problems":{"type":"array","items":{}}}}},"responses":{"Error":{"description":"Refused, with the reason","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}