Send Letter
send-letterSend a real letter in a windowed envelope, where the recipient address shows through a window in the envelope. Can either print a handwritten message on letterhead, or mail a supplied PDF as the entire letter (pass pdf_only_url). THIS SPENDS MONEY: it charges the account and physically prints and mails the letter, and it cannot be undone once printing starts. Always call preview-order first with the same arguments, show the user the proof image and the price, and get their explicit confirmation before calling this. The preferred way to say what to print is a complete creative_id from list-creatives, which carries the saved design and message as one.
Tool call template
This tool declares no required parameters. Add optional parameters from the input schema as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {},
"name": "send-letter"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | The handwritten message. Merge variables such as %FIRST_NAME% or %CITY% are filled per recipient from mailing list data; if you use one with ad-hoc recipients it must be replaced with real text first. | |
| realism | No | Realism mode: slight imperfections that make the handwriting look written by hand. Defaults to the message template's setting, then the account's. | |
| metadata | No | Optional key/value metadata stored on the order and echoed back by order tools and webhooks. Flat object of scalar values. | |
| qrcode_url | No | URL to encode as a QR code on the mailer. Strongly recommended: scans are tracked per piece, and this is what makes the send measurable later. A send without a qrcode_url (gift cards excepted, which are tracked by redemption) produces no result data at all and can never be evaluated by get-performance — warn the user before sending one blind. | |
| recipients | No | Addresses to mail to, supplied directly. Use this for one-off sends like "send a postcard to Jane at 123 Main St". Provide either recipients or mailing_lists. | |
| creative_id | No | ID of a complete creative from list-creatives: a saved front and message that send as one. The preferred way to send whenever the account has a creative for what the user wants to mail. It sends exactly as saved - its design, message, handwriting and background all come from the creative - so it cannot be combined with image_template_id, message_template_id, front_image_url, message, the handwriting parameters or pdf_only_url; qrcode_url and additional_pages_url may still be added. A postcard creative sends at its own size when size is left out. | |
| return_city | No | Custom return address city. | |
| return_name | No | Custom return address name. All five return address fields must be given together, and this is not available on the Enterprise plan. | |
| email_lookup | No | Whether a recipient given an email but no street address has their address looked up (a paid lead lookup that needs the "Allow lead purchases via MCP" permission). Defaults to true. Pass false to leave such recipients out instead; the order then mails only recipients with an address. | |
| pdf_only_url | No | URL of a PDF to mail AS THE ENTIRE LETTER. No message is written and no letterhead or creative is generated — only the pages of this PDF are printed. Use this when the user supplies a finished document to mail as-is. Maximum 12 pages, priced per page. Takes precedence over additional_pages_url, and makes message, front_image_url and the template parameters irrelevant. The recipient address comes from the recipient fields, never the PDF: for a windowed letter, thanks.io prints it in the upper-left envelope-window area of page 1, so that area of the PDF must be blank. A PDF that already contains an address gets a second one printed over it. A windowless letter's address goes on the envelope, so its PDF needs no blank area. | |
| return_state | No | Custom return address state or province. | |
| schedule_for | No | Date to mail on instead of immediately, e.g. "2026-09-01". | |
| mailing_lists | No | IDs of saved mailing lists to send to. Use list-mailing-lists to find them. Provide either recipients or mailing_lists. | |
| postage_class | No | Postage class. "first_class" delivers in 5-10 business days; "standard" is Standard Mail, also known as Marketing Mail: cheaper for US addresses, 10-20 business days, with no tracking status and no return-to-sender. Leave it out to use the account's default (get-account-info shows it as default_postage_class). "standard" needs a paid plan and is refused on a free one. Standard Mail only changes the price of US addresses, and nonprofit accounts always mail at their nonprofit rate. | |
| return_address | No | Custom return street address. | |
| sub_account_id | No | Send on behalf of this sub-account. Use list-sub-accounts to find one. | |
| front_image_url | No | Publicly reachable image URL for the front of the mailer. PNG or JPG; SVG is not supported. | |
| return_address2 | No | Custom return address line 2. | |
| handwriting_size | No | Handwriting size. | |
| handwriting_color | No | Handwriting color: "black", "blue", "red", "green", "purple", or a hex code like "#FF5500". | |
| handwriting_style | No | Handwriting style ID. Use list-handwriting-styles to see the options and their sample images. | |
| image_template_id | No | ID of a saved image template (design) to use for the front. Use list-image-templates to find one. For a one-off combination: when the user already has the front and message saved together, pass creative_id (list-creatives) instead. | |
| return_address_id | No | ID of one of the account's saved return addresses to print as the return address; get-account-info lists them under saved_return_addresses. Use this or the return_* fields, not both. Not available on the Enterprise plan. | |
| return_postal_code | No | Custom return address postal code. | |
| message_template_id | No | ID of a saved message template to use instead of writing a message. Use list-message-templates to find one. A template also supplies its own handwriting settings. For a one-off combination: when the user already has the front and message saved together, pass creative_id (list-creatives) instead. | |
| additional_pages_url | No | URL of a PDF to append AFTER the generated letter. The handwritten message and letterhead are still printed as the first page. Maximum 10 pages, and each extra page adds to the cost. Do not combine with pdf_only_url. |