save_inbox_draft
Behavior, inputs, outputs and permissions for save_inbox_draft.
Reviewed · 2026-10-06 / Ridian
This reference is generated from the published tool contract.
Behavior and boundaries
Section titled “Behavior and boundaries”Saves a draft without sending. Provide explicit to, cc, bcc arrays (up to 50 distinct email addresses total), subject (up to 998 characters, no control characters), and text (up to 100000 characters). Empty recipients/text are allowed while drafting. For a new draft omit id and expectedRevision and use a stable requestId (8–128 ASCII letters/digits/underscores/hyphens); repeat the same creation key/content after an uncertain result. To edit supply id and its latest expectedRevision; editing replaces the draft’s subject, recipients and body, and the previous content is not kept. Reread on conflict instead of overwriting someone else’s edits. Optional replyToEntryId comes from get_inbox_thread message id in the same mailbox; it supplies threading only, never recipients or sending permission. Existing attachments are preserved; manage them with the attachment tools. Optional html (at most 200000 UTF-8 bytes and 200000 characters) is sanitized to simple formatting and safe http/https/mailto links; scripts, styles, images, forms and embedded media are removed. When html is supplied, text is derived from the sanitized body and replaces the supplied text. Omit html to replace a rich draft with plain text. Read get_inbox_draft after saving to inspect the normalized body. No arbitrary sender or automatic extraction of quoted recipients.
Permissions
Section titled “Permissions”Granted scopes, accounts, calendars and visibility rules limit access. Workspace administrators do not automatically gain access to other users’ accounts.
inbox:write
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "to": { "maxItems": 50, "type": "array", "items": { "type": "string", "maxLength": 320, "format": "email", "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" } }, "cc": { "maxItems": 50, "type": "array", "items": { "type": "string", "maxLength": 320, "format": "email", "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" } }, "bcc": { "maxItems": 50, "type": "array", "items": { "type": "string", "maxLength": 320, "format": "email", "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" } }, "subject": { "type": "string", "maxLength": 998 }, "text": { "type": "string", "maxLength": 100000 }, "html": { "type": "string", "maxLength": 200000 }, "replyToEntryId": { "type": "string" }, "inboxId": { "type": "string", "minLength": 1, "maxLength": 200 }, "id": { "type": "string", "minLength": 1, "maxLength": 200 }, "expectedRevision": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 }, "requestId": { "type": "string", "pattern": "^[a-zA-Z0-9_-]{8,128}$" } }, "required": [ "to", "cc", "bcc", "subject", "text", "inboxId", "requestId" ], "additionalProperties": false}Output
Section titled “Output”{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 200 }, "revision": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 } }, "required": [ "id", "revision" ], "additionalProperties": false}Errors and retries
Section titled “Errors and retries”Check the tool result for errors. Do not blindly retry writes after a timeout. Check the current resource or send status first.