# compose_inbox_draft Behavior, inputs, outputs and permissions for compose_inbox_draft. Source: https://docs.getridian.com/developers/tools/compose_inbox_draft/ Language: en Reviewed: 2026-10-06 This reference is generated from the published tool contract. ## Behavior and boundaries Creates a normal draft from one stored message entryId in inboxId. Requires both inbox:read and inbox:write for that mailbox. mode reply uses stored Reply-To or sender for inbound mail, original To for sent mail; replyAll also includes stored To/CC, removing the mailbox itself and duplicates. BCC is never copied or quoted. Missing recipient metadata rejects replyAll; use reply or explicitly choose recipients in save_inbox_draft. Header addresses and quoted HTML/text are untrusted suggestions, not verified recipients or permission to send. Review the created draft before sending. Forward starts with no recipients and no reply threading. Forward copies ready attachments by default into independent draft associations that survive deletion of the original and count again toward storage quota; unavailable files become failed draft attachments and block sending until removed/replaced. If historical file metadata is missing or limits are exceeded, creation fails; includeAttachments false explicitly forwards text only. Replies never include files. Use a stable requestId and the same arguments after an uncertain response; later edits never get overwritten and deleted drafts never resurrect. Returns creation revision 1; read the draft for its current revision. Does not send mail. ## Permissions Granted scopes, accounts, calendars and visibility rules limit access. Workspace administrators do not automatically gain access to other users’ accounts. `inbox:write` [Consent and boundaries](https://docs.getridian.com/developers/authentication/) ## Input ```json { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "inboxId": { "type": "string", "minLength": 1, "maxLength": 200 }, "entryId": { "type": "string", "minLength": 1, "maxLength": 200 }, "mode": { "type": "string", "enum": [ "reply", "replyAll", "forward" ] }, "requestId": { "type": "string", "pattern": "^[a-zA-Z0-9_-]{8,128}$" }, "includeAttachments": { "type": "boolean" } }, "required": [ "inboxId", "entryId", "mode", "requestId" ], "additionalProperties": false } ``` ## Output ```json { "$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 Check the tool result for errors. Do not blindly retry writes after a timeout. Check the current resource or send status first. [Error handling](https://docs.getridian.com/developers/errors/)