MCP App Store
by KeenEthics
GoodPostal icon

GoodPostal

By Good Postal

Get New App Alerts

Overview

GoodPostal helps GoodPostal customers build email campaigns in chat. Connect your GoodPostal workspace, describe the email you want, and GoodPostal creates an on-brand template, organizes your contacts, and prepares a campaign draft for your review. What you can do in chat: - Design email templates from a plain-language brief, matched to your brand colors, logo, and footer. Every template stays fully editable in the GoodPostal visual builder. - Organize contacts into groups, including filtering by status or location. - Create and update campaign drafts and connect them to a template, a sender, and a contact group. - Review campaign performance: opens, clicks, deliveries, bounces, and unsubscribes. - Send a test email to yourself or a teammate before launch. Campaigns are reviewed and sent from the GoodPostal dashboard. The app never sends or schedules a campaign on its own. Requires a GoodPostal account.

Tools

add_contacts_to_group

ChatGPT
Use this when the user wants to add contacts to an existing list group. It adds the contacts in contact_ids, every contact matching a filter, or both in one call, e.g. filter { state: "NY" } adds ALL New York contacts without listing individual IDs. Contacts already in the group stay in it and nobody is removed. A smart group fills itself from its rules and refuses this tool. Do not use to take contacts out of a group (use remove_contacts_from_group), to put an excluded person back into a smart group (use include_contacts_in_smart_group), to create new contacts (use create_contact), or to create the group itself (use create_contact_group).

analyze_brand_from_url

ChatGPT
Use this FIRST whenever the user gives you a website and wants an email that looks like their brand. Loads the page in a real browser and returns measured brand notes (logo, colors, spacing, radii, fonts, tone, dividers), exact hex tokens, optional screenshots of the page (off by default), and the real logo and imagery already imported into the image library. Prefer this over fetch_webpage for anything design-related; fetch_webpage returns text only and cannot measure a color or a corner radius.

choose_design_direction

ChatGPT
Use only when the user explicitly asks to compare visual directions; do not call during ordinary email creation. Describe the campaign intent in plain language (e.g. "year-end donation appeal", "monthly product changelog"); saves up to 3 design-direction offers in the workspace and returns a design_contract_id for each. Each repeat call saves fresh offers in a new batch; earlier offers keep their current status and are not expired by this call. Selecting an offer with select_design_scaffold expires only its batch siblings. Pass the chosen card's design_contract_id into select_design_scaffold together with showcase_id "scaffold:<family_id>" (e.g. "scaffold:narrative_appeal_single_ask") to fetch that direction's tokenized skeleton. Skip this tool entirely when the user already specified a look and feel — go straight to get_showcase_example/create_template instead. Call again with a higher attempt to get alternative directions if none of the offered cards fit.

create_campaign

ChatGPT
Use this when the user wants to create a new email campaign, or duplicate an existing one. New campaigns require a template, a sender identity, and at least one contact group; to duplicate, pass duplicate_from with the source campaign UUID. For A/B tests, set type to "ab_test" and provide a variants array. Campaigns are always created as drafts. Do not use to edit an existing campaign (use update_campaign) or to send one (use prepare_campaign_review). If the chosen template, or a variant's template, is still a draft, creating the campaign changes that template's status to published.

create_contact

ChatGPT
Use this when the user wants to add one or many contacts. Pass a single email for one contact, or a contacts array (max 100) for bulk creation; group_ids works for both modes. Do not use to edit an existing contact (use update_contact) or to add already-existing contacts to a group (use add_contacts_to_group). Anyone who previously unsubscribed or hard bounced stays opted out permanently: their address is still added, but as unsubscribed, and no campaign will reach it. This applies in both single and bulk mode, and the result tells you how many landed that way. Adding the address again does not undo the opt-out, and neither does removing and re-adding the contact.

create_contact_group

ChatGPT
Use this when the user wants to create a new audience list for targeting campaigns. Can auto-populate with contacts matching filter criteria. Set type to "smart" with rules to create a group that fills itself from those rules every time it is read, instead of holding a fixed set of contacts. Custom fields: filter.metadata is a list of {key, op, value} with op in eq, neq, contains, gt, gte, lt, lte, exists, not_exists, within_days, older_than_days, since_fiscal_year_start, before_fiscal_year_start (e.g. sponsor_count gt 3). The last four read a date field against the workspace calendar: within_days and older_than_days take a whole number of days, and since_fiscal_year_start and before_fiscal_year_start take no value.

create_gradient_image

ChatGPT
Create a lossless linear, radial, or four-corner mesh gradient PNG in the tenant image library. Linear and radial gradients support 2-5 ordered stops; legacy stop A/B fields remain supported. CSS radial and mesh gradients are not email-safe, so use their generated PNGs. Fade transparent edges into a section-owned solid color, keep the design acceptable when images are blocked, and generate a dark companion image for dark-mode designs.

create_icon_image

ChatGPT
Create a transparent or solid-background PNG from the built-in icon catalog and store it in the tenant Icons library folder. Use search_icons first to discover names. Pass dark to also render the same glyph in a dark-mode color and get a light/dark pair back in one call. For F2 feature-digest scaffold slots, prefer icon:<name> tokens so the scaffold applies the brand accent automatically.

create_image_folder

ChatGPT
Use this when the user wants a new folder in their image library. It creates one empty folder with the given name and places it last in the folder order. A name already in use gets a numbered slug, and the existing folder is left unchanged. Do not use to move images into a folder (use move_images_to_folder), to change the folder order (use reorder_image_folders), to delete a folder (use delete_image_folder), or to browse folders (use list_image_folders).

create_subscription_form

ChatGPT
Use this when the user wants a signup form so visitors can join their list from a website. Call list_subscription_forms first so an existing form is reused rather than duplicated. The form is created live and starts accepting submissions; use update_subscription_form to pause it. A form collecting a name and an email address needs this fields value: [{"name":"email","label":"Email","type":"email","required":true},{"name":"first_name","label":"First name","type":"text","required":false}]. Exactly one email field is required, and every field name must be one of email, first_name, last_name, phone, address_line_1, address_line_2, city, state, zip_code. Use type "email" for email, "select" for state, and "text" for the rest. Choose opt_in_type "single" unless the user asks for a confirmation step; "double" sends a confirmation email the visitor must click before they are subscribed, and needs confirmation_subject and confirmation_message. Setting allowed_domains restricts the form to those website hostnames and makes its embed code require a signed token, so leave it empty unless the user asks for that. After creating the form, call get_form_embed_code to give the user the code for their site.

create_template

ChatGPT
Create a template from design_json, duplicate_from, or clone a brand-recolored starter with from_showcase. Prefer design_json so the first call is the finished email; use from_showcase only when the user asks to clone that starter. Raw html_content is not accepted. Call get_showcase_example before your first create_template in a conversation and build from a showcase's styled blocks; blocks sent without styles get a plain default look. External image URLs in design_json are copied into the workspace image library where possible, up to 20 per call, and the saved template uses the stored copies; the response warnings list any image left at its original URL or removed as unsafe; icon:<name> tokens become stored icon images. scaffold_instance is the server-assembled alternative to design_json and is preferred the same way. Building from a scaffold_instance marks its design direction as chosen and expires the other directions offered with it.

create_transition_image

ChatGPT
Create a retina PNG strip for a wave, diagonal, torn, zigzag, or scallop container edge. Store the returned URL in data-transition-top-src or data-transition-bottom-src together with the matching shape@depth token. The strip is saved to the workspace image library, in a Transitions folder; an identical strip already in the library is reused instead of saved again.

define_custom_field

ChatGPT
Use this when the user wants to give a contact custom field a friendly name and type, or to describe a key their website already sends. Calling it again for the same key updates the existing definition. This only describes the key; it never changes any contact data and never restricts what the API accepts.

delete_image_folder

ChatGPT
Use this when the user wants to delete a folder from their image library. It deletes the folder; the images inside are not deleted and move to uncategorized. It needs an owner or admin role. The first call changes nothing and returns a confirmation request with the number of images that will move; the folder is deleted only when you call again with confirm: true. Do not use to take images out of a folder you want to keep (use move_images_to_folder), to create a folder (use create_image_folder), or to change the folder order (use reorder_image_folders).

exclude_contacts_from_smart_group

ChatGPT
Use this when the user wants to take people out of a smart group without changing its rules. It records an exclusion for each contact in contact_ids, so they stop counting as members even while the rules still match them; the contacts themselves are not changed or deleted. It takes effect on the first call, with no confirmation step. Do not use on a list group (use remove_contacts_from_group), to put an excluded person back (use include_contacts_in_smart_group), or to change who the rules select (use update_contact_group).

fetch_webpage

ChatGPT
Use this when the user shares a page (an article, blog post, event page, product page) to read or make an email about. Fetches the page and returns its text, its images, and any video embeds with a thumbnail, so you can import the images and add the video without relying on your own browsing. Use analyze_brand_from_url instead when the email should look like that site's brand. The result is complete after one call; do not fetch the same URL again in the same reply. This tool only reads pages. Use import_image to save any returned image URL to the workspace library.

get_app_guide

ChatGPT
Use only when the user asks what GoodPostal can do or wants the full reference (block types, merge tags, workflows). Never call just because a conversation started, and do not call for a direct email-creation request. Returns the complete reference guide with all available tools, workflows, and best practices.

get_brand_guidelines

ChatGPT
Use this when you need the workspace brand colors, logo URL, fonts, social links, or footer info before designing a template or setting up branding.

get_campaign

ChatGPT
Use this when the user wants to view the full setup and details of a campaign including its template, sender, contact groups, readiness to send, and headline delivery stats (sent, delivered, opens, clicks, bounces, unsubscribes, complaints, open rate, click rate). Engagement numbers follow the contract described in get_campaign_analytics. Do not use for a full performance breakdown with top links or A/B variant results (use get_campaign_analytics) or to send the campaign (use prepare_campaign_review).

get_campaign_analytics

ChatGPT
Use this when the user asks how a campaign performed: its open, click, bounce, unsubscribe, and complaint numbers and rates (including unique vs total opens/clicks), which links got the most clicks, or which A/B variant won and whether the result is statistically significant. Returns aggregate metrics only, never per-recipient data. When engagement.classification is "classified", open_count and click_count are people whose activity GoodPostal could stand behind. engagement.opens also carries privacy (Apple Mail auto-downloads), automated (bots), unverified, and raw (every request). Report the people figures as opened and clicked and name the other buckets by those words; raw is never a count of people. Do not use to check whether a campaign is ready to send or to view its setup (use get_campaign for that), and do not expect data before a campaign has started sending.

get_component

ChatGPT
Use this when you need the full block data for one specific pre-built component to drop into a template. Returns blocks with fresh IDs ready to use in design_json.blocks. Components are reusable building blocks; combine them with your own custom containers, columns, and blocks to compose professional emails. Do not use to browse the library (use list_components).

get_form_embed_code

ChatGPT
Use this when the user wants to put a signup form on their website, or asks how to connect a form they already have. Use list_subscription_forms to find the form_id. Pick the kind that fits the site. "widget" (the default) is one script tag that draws the form and handles the submission, and is the right answer for most people. "simple" is a plain HTML form with class names to style yourself. "styled" is the same form with the colors and spacing already inline. "headless" is for a site that already has its own form or checkbox (for example a newsletter opt-in on an order page): the site posts name and email to GoodPostal's endpoint and GoodPostal applies the form's opt-in mode, groups, and confirmation email. A form that makes visitors pass a bot check only works as the widget, which runs the check; the other three kinds are refused for such a form because anything submitted through them is rejected. The code is safe to hand to the user as is. Do not rewrite the endpoint URLs or the hidden form id in it. Getting the code also brings the form's embed signing key in line with its allowed websites: it creates a key when the form is limited to certain websites and has none, and deletes the key when the form is no longer limited.

get_showcase_example

ChatGPT
Use this to study complete, annotated email examples built with GoodPostal's block system. For initial email creation call it once without an ID with the category matching the email's intent, then once more with the single closest showcase_id to load its full annotated blocks; do not call again unless the user asks to compare alternatives. Study the composition quality, container nesting, rhythm, and mechanics, then diverge in content, palette, and section details for the user's actual request. For freeform designs, the catalog response includes a server-assigned design_brief to follow unless the user supplied explicit style direction. The examples use fictional demo content. The catalog also lists scaffold compositions. Compare saved offers with choose_design_direction, then select one with select_design_scaffold using its showcase_id and design_contract_id. This retrieval never chooses or expires an offer.

get_subscription_form

ChatGPT
Use this when the user wants the full setup of one signup form: the inputs it collects, the groups subscribers join, its opt-in mode and confirmation email wording, and its bot protection. Use list_subscription_forms first to find the form_id. Do not use this to get the code for a website (use get_form_embed_code).

get_template

ChatGPT
Use this when the user wants to view, edit, or copy a specific template. Returns the template design JSON (blocks + settings) plus a dashboard URL to view or edit it. The rendered email HTML is NOT returned inline (and cannot be shown in chat) — for a full visual preview, open the dashboard URL or send a test email. To show the user the template card, call show_template_card.

get_template_guide

ChatGPT
Use only when a block type or design_json shape you need is unknown; it is not a prerequisite for create_template and does not belong in the standard email-creation flow. Called without a topic it returns the compact core guide (schema, block types, children format, settings, footer/legal requirement). Pass a topic (dark_mode, containers, components, merge_tags) for deeper on-demand reference on that subject. Do not use to browse the component library itself (use list_components).

get_workspace_info

ChatGPT
Use only when the user explicitly asks about their workspace: contact count, template count, campaign count, email provider configuration, sender identities, and branding overview.

import_image

ChatGPT
Use this when you have found a real image at a URL (e.g. from fetch_webpage, an article, or a product page) and want to use it in an email. Provide source_url — the server downloads, validates, and stores it in the image library, returning a hosted URL you can use as an image block src. Do NOT pass image bytes yourself. Do not use for external placeholder-image services (rejected) — use a real image or leave the block for the placeholder generator. Do not use for the workspace logo (use upload_email_logo).

include_contacts_in_smart_group

ChatGPT
Use this when the user wants a previously excluded contact to count in a smart group again. It deletes the saved exclusion, so the contact counts as a member again when it matches the group rules. It does not change opt-in or suppression status. Do not use for a list group (use add_contacts_to_group).

list_campaigns

ChatGPT
Use this when the user wants to see their campaigns, check campaign status, or find a specific campaign. Each campaign carries open_rate and click_rate plus an engagement block. Engagement numbers follow the contract described in get_campaign_analytics.

list_components

ChatGPT
Use this when the user wants to browse the pre-built component library. Returns 90 curated components across 13 categories (heroes, headers, footers, content, features, CTAs, ecommerce, testimonials, stats, image galleries, pricing, surveys, engagement). Components are reusable building blocks; combine them with your own custom containers, columns, and blocks to compose emails. Do not use to fetch one component's block data (use get_component).

list_contact_groups

ChatGPT
Use this when the user wants to see their contact groups, find a group for a campaign, or check group membership counts.

list_custom_fields

ChatGPT
Use this when the user asks what extra contact facts their workspace tracks, wants to know what a custom field key means, or needs the exact payload to send contacts from their website or CRM. Returns every defined field plus keys seen on contacts that nobody has described yet.

list_image_folders

ChatGPT
Use this when the user wants to see their image library folders and how many images each one holds. Returns every folder with its UUID, name, slug, sort order, and image count. Do not use for browsing the images themselves (use list_images) or for changing folders (use create_image_folder, delete_image_folder, reorder_image_folders, or move_images_to_folder).

list_images

ChatGPT
Use this when the user wants to browse their uploaded images or find a specific image for a template.

list_sender_identities

ChatGPT
Use this when the user wants to see their configured sender identities (from addresses) or find a sender for a campaign.

list_subscription_forms

ChatGPT
Use this when the user wants to see the signup forms that grow their contact list, check whether a form is live, or find a form to edit or embed. Call this before create_subscription_form so an existing form is reused rather than duplicated.

list_templates

ChatGPT
Use this when the user wants to see their templates, find a specific template by name or status, or browse available templates for a campaign.

move_images_to_folder

ChatGPT
Use this when the user wants to put images into a folder or take them out of every folder. It overwrites the folder of each image in image_ids with the destination folder_id, or moves them to uncategorized when folder_id is null. The image files themselves are not changed. Do not use to create a folder (use create_image_folder), to delete a folder (use delete_image_folder), or to browse images (use list_images).

patch_template

ChatGPT
Use this to make targeted edits to an existing template without resending the whole design. Address blocks by their id (get_template returns design_json with block ids). Use only for a user-requested targeted edit to an existing template: change one block's content, styles, or attributes; insert, replace, or remove single blocks. For full redesigns use update_template. Draft and scheduled campaigns that use this template send its edited design. External image URLs in the patched design are copied into the workspace image library where possible, up to 20 per call, and the saved template uses the stored copies; the response warnings list any image left at its original URL or removed as unsafe; icon:<name> tokens become stored icon images.

prepare_campaign_review

ChatGPT
Draws the campaign review card and returns the dashboard review URL. Call it exactly once per reply, as your last tool call, after create_campaign and after every update_campaign edit in that reply are done. Never call it after each edit. Also use it when the user asks to send, schedule, or "go live" with a campaign; it checks readiness and hands the send to a person in the dashboard. It does NOT send the campaign, queue it, or schedule it — sending always requires explicit human approval in the dashboard. Share the returned review_url and tell the user to open it to approve and send. Do not use for editing a campaign (use update_campaign) or reading campaign details (use get_campaign).

preview_template

ChatGPT
Returns a rendered screenshot of the saved email, light only by default on ChatGPT; pass mode "both" for light and dark. Call it once after create_template to check what you built. If something is clearly wrong, fix it with one patch_template call. Do not preview and patch in a loop; the user refines in the dashboard.

publish_campaign_archive

ChatGPT
Use this when the user wants to share a campaign they already sent, or wants to take a shared one back down. Publishing puts the email on a public web page on the internet: anyone who has the address can open it without signing in, it is listed on the workspace archive page, and search engines can index it. The page shows the email itself with no tracking and no personal data in it. Pass public false to take the page down, which removes it from the web and keeps the address, so publishing again restores exactly the same link. Merge tags that name a person, such as first_name, need replacement text before an issue can go public; the refusal lists which keys are still missing so you can ask the user once and call again with fallbacks.

purge_custom_field_data

ChatGPT
Use only when the user explicitly asks to permanently erase a custom field value from every contact in the workspace. Keeps the field definition. Requires an owner or admin. The first call changes nothing and requests confirmation; repeat with confirm: true to delete the values. More than 2,000 affected contacts are processed by a background job. Repeating a confirmed call can queue another purge and can erase values added since the earlier call. Use remove_custom_field_definition to remove only the definition.

remove_contacts_from_group

ChatGPT
Use this when the user wants to take specific contacts out of a list group. It removes each contact in contact_ids from the group; the contacts themselves are not deleted and stay in the workspace and in their other groups. The first call changes nothing and returns a confirmation request; the contacts are removed only when you call again with confirm: true. A smart group fills itself from its rules and refuses this tool. Do not use on a smart group (use exclude_contacts_from_smart_group) or to add contacts (use add_contacts_to_group).

remove_custom_field_definition

ChatGPT
Use this when the user wants to remove a custom field definition. Deletes its label and type and removes the key from the engagement signal whitelist if present. Contacts keep their stored values and filters keep working. Use purge_custom_field_data separately to permanently erase the values across the workspace.

reorder_image_folders

ChatGPT
Use this when the user wants to change the order of their image library folders. It overwrites the stored position of each folder in folder_ids with its place in that list, first to last; folders left out keep their current position. Folders and images are not otherwise changed. Do not use to create or delete a folder (use create_image_folder or delete_image_folder) or to move images between folders (use move_images_to_folder).

request_image_upload

ChatGPT
Use this for LOCAL files only, when the image exists on the machine you are running on and has no public URL. If you have a URL, use upload_image with image_url instead. Returns a one-time signed URL; POST the file to it as multipart field file. The URL expires in 15 minutes and works exactly once.

search_contacts

ChatGPT
Use this when the user wants to find contacts by name, email, location, or subscription status. Supports geographic filters, e.g. state "NY" for New York, city "Portland", zip_code "902" for a prefix match, country "US"; combine filters to narrow results, such as state plus subscribed for all subscribed contacts in a state. Filters run against the full contact record, but results only show a privacy-safe display name and a masked email; full names, phone numbers, and street addresses are never returned. Do not use to list contact groups (use list_contact_groups) or to view a campaign's audience (use get_campaign). Custom fields: metadata is a list of {key, op, value} with op in eq, neq, contains, gt, gte, lt, lte, exists, not_exists, within_days, older_than_days, since_fiscal_year_start, before_fiscal_year_start (e.g. sponsor_count gt 3). The last four read a date field against the workspace calendar: within_days and older_than_days take a whole number of days, and since_fiscal_year_start and before_fiscal_year_start take no value.

search_docs

ChatGPT
Use this when the user asks how to do something that may live in the GoodPostal dashboard rather than this chat: connecting an email sending service (ESP like SendGrid, Mailgun, Postmark, Amazon SES, SMTP2GO, Mailtrap, or generic SMTP), adding or verifying a sender identity, or setting up a custom tracking domain. Returns matching help articles with concise steps and a link to the full guide so you can walk the user through the dashboard. Connecting an email sending service is a dashboard task on every client. Do not use this tool for email design and template help (use get_template_guide for that). get_app_guide covers the same ground.

search_icons

ChatGPT
Search the built-in icon catalog by icon name or keyword tags. Use this before filling F2 feature-digest icon slots with icon:<name> tokens or creating a standalone icon image.

select_design_scaffold

ChatGPT
Use this when the user chooses one of the saved design directions returned by choose_design_direction. Selects its scaffold, marks that offer as chosen, expires the other offers in the same batch, and records the scaffold assignment. Returns the resolved skeleton and slot instructions for create_template. Repeating the same selection reuses its recorded assignment. Use get_showcase_example to browse examples without changing saved directions.

send_test_email

ChatGPT
Use this when the user wants to preview how a template looks in a real inbox before sending a campaign. The test can only be sent to an address at the user's own email domain or to an address on the workspace's test list. Do not use to send a campaign to its real audience (use prepare_campaign_review). Each successful call sends one email and counts as one send in the workspace's usage; calling it again sends another.

show_template_card

ChatGPT
Draws the finished template card for the user. Call it exactly once per reply, as your last tool call, after all creates, patches, and updates to that template are done. Never call it after each edit. It only displays the template; it changes nothing.

update_campaign

ChatGPT
Use this when the user wants to modify a campaign that has not been sent yet. Only draft and scheduled campaigns can be updated. For A/B test campaigns, you can update ab_test_mode, ab_split_method, ab_results_at, conversion_url, and variants. Pointing the campaign, or a variant, at a template that is still a draft changes that template's status to published.

update_contact

ChatGPT
Use this when the user wants to change a contact's name, email, address, or other details. You can unsubscribe a contact by setting subscribed to false, but you cannot resubscribe someone who previously unsubscribed or hard bounced: that request is refused, and the only ways back are the recipient opting in again through a confirmed subscription form or an administrator re-enabling them in the dashboard. Changing a contact's email to an address that previously opted out is refused for the same reason.

update_contact_group

ChatGPT
Use this when the user wants to rename a contact group, change its description, or update its display color. On a smart group, send rules to change who belongs in it. A group stays a list or a smart group for its whole life, so there is no way to convert one into the other.

update_email_branding

ChatGPT
Use this when the user wants to set or change their email brand colors, fonts, social links, footer info, or button styles.

update_subscription_form

ChatGPT
Use this when the user wants to change a signup form: rename it, change the inputs it collects, reword the confirmation email, or pause and resume it with is_active. Use list_subscription_forms to find the form_id. Only send what is changing. Anything left out keeps its current value. Two exceptions: sending fields replaces the whole field list, and sending contact_group_ids replaces the whole set of groups new subscribers join, so include every group that should stay. Setting allowed_domains restricts the form to those website hostnames and makes its embed code require a signed token; sending an empty list removes that restriction.

update_template

ChatGPT
Use this when the user wants to modify an existing template. Provide template_id and the fields to change; for design changes use design_json with components (get_component) and your own custom blocks. Templates with more than 5 blocks must include at least one container or columns block. Set settings.emailBg and outerBg for theming. Raw html_content is not accepted. Do not use to create a new template (use create_template). Use it to change the template the user named; to make a new edition or version of a template, duplicate it with create_template and duplicate_from instead. Draft and scheduled campaigns that use this template send its edited design. External image URLs in design_json are copied into the workspace image library where possible, up to 20 per call, and the saved template uses the stored copies; the response warnings list any image left at its original URL or removed as unsafe; icon:<name> tokens become stored icon images.

upload_image

ChatGPT
Use this when the user wants to add a new image to their image library for use in email templates. Provide image_url (easiest — the server downloads the image for you) OR image_base64 plus filename (manual). Supports PNG, JPG, GIF, WebP, and SVG, up to 5MB. Do not use for the workspace logo or icon (use upload_email_logo).

Capabilities

InteractiveWrites

Example Prompts

Click any prompt to copy it.

Similar Apps