برای ایجنت‌های هوش مصنوعی

سرور MCP ‏SendHQ

به یک ایجنت هوش مصنوعی کنترل کامل و امن یک فضای کاری SendHQ را بدهید: ارسال و دریافت ایمیل، تأیید دامنه‌ها، انتشار قالب‌ها و بررسی تحویل‌پذیری از طریق 59 ابزار با نوع‌دهی سخت‌گیرانه. در درجه اول برای ایجنت‌ها نوشته شده است؛ انسان‌ها هم خوش آمدند.

59 ابزارانتقال stdio، یک دستور0 ابزار مدیریت کلید
نصب و اتصال (Claude Code)
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp

این سرور چیست

سرور MCP ‏SendHQ به یک ایجنت هوش مصنوعی اجازه می‌دهد یک فضای کاری SendHQ را از طریق Model Context Protocol اداره کند: ارسال ایمیل (تکی، دسته‌ای، مبتنی بر قالب، پاسخ، پیوست، تلاش مجدد idempotent)، خواندن و جستجوی ایمیل‌های ارسالی و دریافتی (موضوع، متن و نام پیوست‌ها) و رویدادهای تحویل آن‌ها، سازمان‌دهی ایمیل‌ها در برچسب‌ها با قوانین بایگانی خودکار، مدیریت پیش‌نویس‌ها و پیوست‌های خصوصی، نوشتن و انتشار قالب‌های میزبانی‌شده، افزودن و تأیید دامنه‌ها و DNS آن‌ها، راه‌اندازی دریافت ایمیل ورودی و نشانی‌های ورودی، بررسی تحویل‌پذیری، برگشت‌ها، گزارش‌های اسپم و فهرست توقف ارسال، و خواندن میزان مصرف حساب، وضعیت صورتحساب، analytics و فراداده کلیدهای API.

این یک سرور محلی stdio است که در فایل اجرایی CLI ‏sendhq تعبیه شده است. کلاینت MCP شما sendhq mcp را به‌عنوان یک پردازه فرزند اجرا می‌کند و از طریق stdin/stdout با JSON-RPC ارتباط برقرار می‌کند. هر فراخوانی ابزار به یک درخواست مستند به REST API ‏SendHQ در https://sendhq.cc/api/v1 تبدیل می‌شود که با کلید API فضای کاری شما احراز هویت شده است؛ بنابراین سرور MCP دقیقاً مجوزهای همان کلید را دارد و نه بیشتر.

  • 59 ابزار در 8 گروه، تولیدشده از یک کاتالوگ واحد که به‌صورت tools.json نیز منتشر شده است.
  • JSON Schemaهای سخت‌گیرانه: آرگومان‌های ناشناخته، نوع‌های اشتباه و فیلدهای الزامی جاافتاده پیش از رسیدن هر چیزی به SendHQ، به‌صورت محلی رد می‌شوند.
  • خطاهای ساختاریافته با یک code پایدار، status ‏HTTP، یک explanation، یک remedy مشخص و اینکه آیا تلاش مجدد کمکی می‌کند یا نه.
  • هر ابزاری که ایمیل واقعی ارسال می‌کند یا داده‌ای را از بین می‌برد، این موضوع را در نخستین کلمات توضیح خود اعلام می‌کند و annotationهای ایمنی MCP دارد.
  • حالت --read-only همه ابزارهای ارسال و تغییردهنده را پنهان می‌کند.
  • هیچ چیزی لاگ نمی‌شود. stdout فقط پیام‌های پروتکل را حمل می‌کند؛ کلید API و محتوای پیام هرگز به هیچ لاگی نمی‌رسند.
این endpoint مستندات MCP نیست.SendHQ یک endpoint کوچک و فقط‌خواندنی MCP برای مستندات نیز در https://sendhq.cc/api/mcp میزبانی می‌کند (جستجوی قیمت‌ها و مستندات، بدون دسترسی به حساب). سروری که در این صفحه معرفی می‌شود، نسخه کامل و محدود به حساب است؛ به‌صورت محلی یا به‌عنوان connector میزبانی‌شده زیر اجرا می‌شود.

استفاده از SendHQ در Claude و ChatGPT

بدون نیاز به نصب: SendHQ این سرور را با همان ابزارها به‌عنوان یک connector میزبانی‌شده در https://mcp.sendhq.cc/mcp نیز اجرا می‌کند. به‌جای چسباندن کلید، با حساب SendHQ خود وارد می‌شوید.

Claude

  1. Settings → Connectors را باز کنید و SendHQ را در فهرست پیدا کنید، یا Add custom connector را انتخاب کنید و https://mcp.sendhq.cc/mcp را بچسبانید.
  2. روی Connect کلیک کنید، وارد SendHQ شوید، دسترسی‌ها را بازبینی کنید و روی Allow کلیک کنید.
  3. از Claude بخواهید صندوق ورودی شما را بررسی کند، از دامنه تأییدشده‌تان ایمیل بفرستد یا یک برگشت ایمیل را توضیح دهد.

ChatGPT

  1. Open Settings → Security and login and turn on Developer mode.
  2. Go to chatgpt.com/plugins, click Create MCP app, name it SendHQ and enter https://mcp.sendhq.cc/mcp.
  3. Sign in to SendHQ and click Allow, then pick SendHQ from the tools menu in a new chat.

Muse by Meta

In Muse, open Connectors and search for SendHQ. Click Connect, sign in to SendHQ and click Allow.

تأیید و قطع اتصال

  • The request_feature tool sends a feature request to the SendHQ team with your account details, so we can follow up by email.
  • ابزارهایی که ایمیل واقعی ارسال می‌کنند یا داده حذف می‌کنند به همین صورت برچسب خورده‌اند. اینکه دستیار پیش از اجرا از شما بپرسد یا نه، برای هر ابزار در خود دستیار تنظیم می‌شود: در Claude، برای این ابزارها در Settings → Connectors → SendHQ گزینه Needs approval را انتخاب کنید.
  • connector کلید API مخصوص خود را دریافت می‌کند که به نام دستیار نام‌گذاری می‌شود (برای مثال “Claude (AI connector)”). برای قطع فوری اتصال، آن را در بخش API Keys حذف کنید.
  • این connector نمی‌تواند کلید API بسازد یا باطل کند یا صورتحساب را تغییر دهد. پیوست‌ها به‌صورت base64 ارسال و بازگردانده می‌شوند؛ هیچ دسترسی‌ای به فایل‌های محلی وجود ندارد.
  • فضاهای کاری پرداخت‌نشده (دوره آزمایشی یکپارچه‌سازی) فقط می‌توانند به ایمیل حساب یا یک نشانی شبیه‌ساز AWS SES تحویل دهند.

پرسش‌ها: postmaster@sendhq.cc. حریم خصوصی: sendhq.cc/privacy.

نصب

فایل اجرایی sendhq را نصب کنید (Linux، macOS و Windows روی x86-64 و arm64). نصب‌کننده checksum نسخه را بررسی می‌کند و فایل اجرایی را به‌طور پیش‌فرض در ~/.local/bin قرار می‌دهد.

macOS و Linux
curl -fsSL https://downloads.sendhq.cc/install.sh | sh
Windows PowerShell
irm https://downloads.sendhq.cc/install.ps1 | iex
بررسی نصب
sendhq version
SENDHQ_API_KEY=re_your_key sendhq doctor

یک کلید API در داشبورد به نشانی https://sendhq.cc/app#/keys بسازید. سرور MCP نمی‌تواند کلید بسازد. تنها دستوری که سرور را اجرا می‌کند این است:

اجرای سرور stdio
SENDHQ_API_KEY=re_your_key sendhq mcp

معمولاً هرگز لازم نیست آن را دستی اجرا کنید: کلاینت MCP آن را راه‌اندازی می‌کند. اگر در ترمینال اجرا شود، منتظر JSON-RPC روی stdin می‌ماند.

پیکربندی کلاینت

Claude Code

claude mcp add
claude mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp

# read-only variant
claude mcp add sendhq-readonly --env SENDHQ_API_KEY=re_your_key -- sendhq mcp --read-only

برای در دسترس بودن در همه پروژه‌ها --scope user را اضافه کنید، یا --scope project را اضافه کنید تا در .mcp.json پروژه نوشته شود. برای یک .mcp.json مشترک، به‌جای commit کردن کلید، از متغیر محیطی به آن ارجاع دهید؛ Claude Code عبارت ${VAR} را در .mcp.json جایگذاری می‌کند.

.mcp.json
{
  "mcpServers": {
    "sendhq": {
      "command": "sendhq",
      "args": [
        "mcp"
      ],
      "env": {
        "SENDHQ_API_KEY": "${SENDHQ_API_KEY}"
      }
    }
  }
}

OpenAI Codex

~/.codex/config.toml
[mcp_servers.sendhq]
command = "sendhq"
args = ["mcp"]
env = { SENDHQ_API_KEY = "re_your_key" }

یا از خط فرمان: codex mcp add sendhq --env SENDHQ_API_KEY=re_your_key -- sendhq mcp.

Claude Desktop

فایل claude_desktop_config.json را ویرایش کنید (macOS: ~/Library/Application Support/Claude/، Windows: %APPDATA%\Claude\) و برنامه را دوباره راه‌اندازی کنید. برنامه‌های دسکتاپ PATH شل شما را به ارث نمی‌برند، پس از مسیر مطلق فایل اجرایی (which sendhq) استفاده کنید.

claude_desktop_config.json
{
  "mcpServers": {
    "sendhq": {
      "command": "/Users/you/.local/bin/sendhq",
      "args": [
        "mcp"
      ],
      "env": {
        "SENDHQ_API_KEY": "re_your_key"
      }
    }
  }
}

هر کلاینت MCP دیگر

یک سرور stdio با دستور sendhq، آرگومان‌های ["mcp"] (و به‌صورت اختیاری "--read-only") و متغیرهای محیطی زیر پیکربندی کنید. سرور از نسخه‌های پروتکل MCP ‏2024-11-05، 2025-03-26، 2025-06-18 و 2025-11-25 پشتیبانی می‌کند و initialize، ping، tools/list و tools/call را پیاده‌سازی می‌کند. نتایج ابزارها هم یک بلوک متنی JSON و هم structuredContent دارند.

smoke test خام stdio (با pipe به sendhq mcp)
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"probe","version":"1"}}}
{"jsonrpc":"2.0","method":"notifications/initialized"}
{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_service_health","arguments":{}}}

برای سرور محدود به حساب، انتقال HTTP میزبانی‌شده وجود ندارد. یک endpoint راه دور MCP با قابلیت نوشتن به OAuth برای هر کاربر نیاز دارد که SendHQ ارائه نمی‌کند؛ فایل اجرایی محلی کلید را روی همان ماشینی نگه می‌دارد که از قبل آن را در اختیار دارد.

متغیرهای محیطی و flagها

متغیر یا flagالزامیمعنا
SENDHQ_API_KEYبلهکلید API فضای کاری (re_…). همه ابزارها به‌جز get_service_health به آن نیاز دارند. بدون آن سرور همچنان اجرا می‌شود و هر فراخوانی یک auth_error ساختاریافته برمی‌گرداند که روش رفع مشکل را توضیح می‌دهد.
SENDHQ_API_BASE_URLخیرURL پایه API. پیش‌فرض https://sendhq.cc/api/v1. فقط برای استقرار محلی یا staging از آن استفاده کنید. SENDHQ_BASE_URL به‌عنوان نام مستعار قدیمی‌تر پذیرفته می‌شود.
SENDHQ_MCP_READ_ONLYخیر1، true یا yes مانند --read-only عمل می‌کند.
--read-onlyخیرفقط ابزارهایی را در اختیار بگذارید که نه ایمیل ارسال می‌کنند و نه وضعیت را تغییر می‌دهند. ابزارهای پنهان اگر با نام فراخوانی شوند نیز رد می‌شوند.
SENDHQ_PROFILE / --profileخیربه‌جای SENDHQ_API_KEY از کلیدی استفاده کنید که sendhq auth login در keyring سیستم‌عامل ذخیره کرده است. اگر هر دو وجود داشته باشند، متغیر محیطی اولویت دارد.

کلید فقط به‌صورت هدر Authorization: Bearer به URL پایه پیکربندی‌شده ارسال می‌شود. هرگز چاپ، لاگ، در خطاها تکرار یا در نتایج ابزارها گنجانده نمی‌شود.

مدل ایمنی برای ایجنت‌ها

  • ایمیل واقعی ارسال می‌کند. send_email، send_batch و send_template_test ایمیل را به افراد واقعی تحویل می‌دهند و اعتبار تحویل مصرف می‌کنند. توضیح آن‌ها با SENDS REAL EMAIL شروع می‌شود. فقط زمانی آن‌ها را فراخوانی کنید که کاربر صراحتاً ارسال همان پیام مشخص را خواسته باشد و گیرندگان، فرستنده و محتوا تأیید شده باشند.
  • مخرب. delete_email، delete_draft، delete_attachment، delete_domain، delete_inbox و remove_suppression با destructiveHint: true علامت‌گذاری شده‌اند و توضیحشان با DESTRUCTIVE شروع می‌شود. ابتدا از کاربر تأیید بگیرید. remove_suppression یک مانع ایمنی را تضعیف می‌کند و فقط زمانی مناسب است که انسانی تأیید کند آن نشانی دوباره کار می‌کند.
  • تغییر وضعیت می‌دهد. ساخت یا به‌روزرسانی پیش‌نویس‌ها، قالب‌ها، دامنه‌ها و صندوق‌های ورودی، انتشار قالب‌ها و آغاز تأیید، فضای کاری را تغییر می‌دهند اما ایمیلی ارسال نمی‌کنند.
  • فقط‌خواندنی. همه موارد دیگر readOnlyHint: true هستند و فراخوانی آزادانه آن‌ها امن است.
  • این سرور هرگز DNS را تغییر نمی‌دهد. add_domain رکوردهایی را برمی‌گرداند که یک انسان باید منتشر کند؛ get_domain_connect_link یک URL رضایت برمی‌گرداند که یک شخص باید آن را باز کند و نزد ارائه‌دهنده DNS خود تأیید کند.
  • این سرور هرگز صورتحساب را تغییر نمی‌دهد. get_account فقط پلن، میزان مصرف و وضعیت اشتراک را می‌خواند.
  • فضاهای کاری پرداخت‌نشده (دوره آزمایشی یکپارچه‌سازی) فقط می‌توانند به ایمیل مالک حساب (get_account → user.email) یا یک نشانی شبیه‌ساز AWS SES مانند success@simulator.amazonses.com تحویل دهند و نمی‌توانند پیوست ارسال کنند.
  • پذیرفته‌شده به معنای تحویل‌شده نیست. ارسال موفق یک شناسه برمی‌گرداند؛ شواهد تحویل، برگشت و گزارش اسپم بعداً در list_email_events می‌رسند. هرگز ادعا نکنید ایمیل به صندوق ورودی رسیده یا شخصی پیام را خوانده است.
  • برای دور زدن توقف 423 به نشانی From دیگری تغییر ندهید و هرگز گیرندگانی را که لغو اشتراک کرده یا گزارش اسپم داده‌اند دوباره اضافه نکنید.

کلیدهای API خارج از محدوده‌اند

طبق طراحی، هیچ ابزاری برای ساخت، تغییر، چرخش، ابطال یا حذف کلیدهای API وجود ندارد. ایجنت نباید اعتبارنامه بسازد یا از بین ببرد. list_api_keys فقط نام‌ها، پیشوندهای غیرمحرمانه و زمان آخرین استفاده را برمی‌گرداند. مدیریت کلیدها در داشبورد و توسط انسانی که وارد شده باقی می‌ماند.

گردش‌کارها

1. اولین ارسال

  1. get_service_health در دسترس بودن API را تأیید می‌کند (بدون کلید هم کار می‌کند).
  2. get_account پلن (access.tier)، سهمیه باقی‌مانده و user.email را نشان می‌دهد. در دوره آزمایشی، همین ایمیل تنها گیرنده واقعی مجاز است.
  3. list_sending_identities نشانی‌های From قابل‌استفاده را فهرست می‌کند. اگر خالی بود، ابتدا گردش‌کار دامنه را انجام دهید.
  4. فرستنده، گیرنده، موضوع و متن را با کاربر تأیید کنید، سپس send_email را با یک idempotency_key فراخوانی کنید.
  5. list_email_events با id برگشتی، پس از گزارش ارائه‌دهنده (معمولاً چند ثانیه تا چند دقیقه) delivery، bounce، complaint یا reject را نشان می‌دهد.
اولین ارسال
{
  "name": "send_email",
  "arguments": {
    "from": "Acme <hello@example.com>",
    "to": [
      "owner@example.com"
    ],
    "subject": "SendHQ is connected",
    "text": "It works.",
    "idempotency_key": "first-send-2026-09-26"
  }
}

2. تأیید دامنه از ابتدا تا انتها

  1. add_domain را با name: "example.com" فراخوانی کنید. نتیجه شامل رکوردهای DNS است (CNAMEهای DKIM، تأیید SES، SPF، DMARC پیشنهادی).
  2. get_dns_provider با domain_id ارائه‌دهنده DNS معتبر (authoritative) را تشخیص می‌دهد و host نسبی دقیقی را که باید برای هر رکورد نزد آن ارائه‌دهنده وارد شود برمی‌گرداند.
  3. اگر providers.domainConnect.available برابر true باشد، get_domain_connect_link یک URL رضایت برمی‌گرداند. آن را به انسان بدهید؛ تا زمانی که او نزد ارائه‌دهنده تأیید نکند، چیزی تغییر نمی‌کند. در غیر این صورت، رکوردها را برای انتشار به انسان بدهید. هرگز رکورد SPF دوم منتشر نکنید: include:amazonses.com را در مقدار موجود v=spf1 ادغام کنید.
  4. verify_domain دوباره DNS و SES را بررسی می‌کند. وضعیت از pending، checking و propagating به verified می‌رسد. هر 30 تا 60 ثانیه verify_domain یا get_domain را فراخوانی کنید؛ DNS ممکن است چند دقیقه تا چند ساعت طول بکشد.
  5. وقتی status برابر verified شد، نشانی‌های دامنه در list_sending_identities ظاهر می‌شوند.

3. برگشت‌ها، گزارش‌های اسپم و فهرست توقف ارسال

  1. list_blocked_recipients همه نشانی‌های مسدودشده را همراه با دلیل (bounce، complaint، unsubscribe) و یک شمارش خلاصه برمی‌گرداند.
  2. list_suppressions موارد توقف ارسال ناشی از برگشت دائمی و گزارش اسپم را برمی‌گرداند؛ deliverability_stats نرخ‌های 30 روزه تحویل، برگشت و گزارش اسپم را می‌دهد؛ list_sender_reputation نشان می‌دهد کدام نشانی‌های From محدود یا متوقف شده‌اند.
  3. ارسالی که شامل گیرنده‌ای در فهرست توقف ارسال باشد با 422 recipient_suppressed شکست می‌خورد. آن گیرنده را حذف کنید و دوباره ارسال کنید.
  4. فقط وقتی انسانی تأیید کند که صندوق ایمیلی که برگشت خورده اکنون کار می‌کند، remove_suppression را فراخوانی کنید. موارد توقف ارسال ناشی از گزارش اسپم دائمی‌اند (409 complaint_suppression_locked).

4. دریافت ایمیل ورودی

  1. دامنه (اغلب یک زیردامنه مانند inbound.example.com) باید تأیید شده باشد.
  2. setup_inbound دریافت را راه‌اندازی می‌کند و یک رکورد MX برمی‌گرداند. یک انسان آن را منتشر می‌کند.
  3. verify_inbound را تا زمانی که status برابر ready شود فراخوانی کنید.
  4. create_inbox با domain_id و local_part (برای مثال support) نشانی support@inbound.example.com را می‌سازد.
  5. list_emails را با direction: "in" و unread: true (و به‌صورت اختیاری inbox_id) به‌طور دوره‌ای فراخوانی کنید. پیام را با get_email، مکالمه آن را با get_thread و پیوست‌ها را با download_attachment بخوانید و با mark_email (read: true) آن را رسیدگی‌شده علامت بزنید.
  6. با send_email و reply_to_email_id در همان رشته گفتگو پاسخ دهید؛ SendHQ هدرهای In-Reply-To و References و رشته گفتگو را تنظیم می‌کند.

5. وب‌هوک‌ها و اعلان رویدادها

SendHQ در حال حاضر وب‌هوک قابل‌پیکربندی برای مشتری ارائه نمی‌کند، بنابراین ابزاری برای وب‌هوک وجود ندارد. اعلان‌های ارائه‌دهنده درون SendHQ پردازش و از طریق عملیات خواندن در دسترس قرار می‌گیرند. به‌جای آن به‌طور دوره‌ای پرس‌وجو کنید: list_email_events برای نتیجه یک پیام، list_emails با status (برای مثال bounced) یا after برای تغییرات اخیر، list_emails با direction: "in" و unread: true برای ایمیل‌های ورودی جدید و list_blocked_recipients برای موارد جدید توقف ارسال. برای هر پرسش بیش از حدود یک بار در دقیقه پرس‌وجو نکنید.

6. عیب‌یابی شکست تحویل

  1. پیام را پیدا کنید: list_emails با direction: "out" و to یا query، یا get_email اگر شناسه را دارید. status: failed یعنی SendHQ یا ارائه‌دهنده آن را هنگام ارسال رد کرده است؛ خطای ثبت‌شده در ایمیل دلیل آن را توضیح می‌دهد.
  2. list_email_events: bounce (دائمی یا گذرا، همراه با پیام تشخیصی ارائه‌دهنده)، complaint، reject یا delivery. نبود رویداد یعنی ارائه‌دهنده هنوز گزارشی نداده است؛ صبر کنید و دوباره بررسی کنید.
  3. اگر خود فراخوانی ارسال شکست خورده است، code خطا را بخوانید: sender_domain_unverified ← تأیید دامنه را کامل کنید؛ recipient_suppressed ← آن نشانی پیش‌تر برگشت دائمی خورده یا گزارش اسپم داده است؛ sender_paused → list_sender_reputation را بررسی کنید و منبع فهرست را اصلاح کنید؛ trial_recipient_restricted ← محدودیت‌های دوره آزمایشی؛ quota_exhausted ← میزان مصرف در get_account.
  4. get_domain بررسی می‌کند که DKIM، SPF و DMARC همچنان منتشر شده باشند؛ deliverability_stats نشان می‌دهد مشکل مربوط به یک پیام است یا یک روند.
  5. آنچه را شواهد نشان می‌دهند گزارش کنید. رویداد delivery یعنی سرور گیرنده پیام را پذیرفته است، نه اینکه به صندوق ورودی رسیده یا خوانده شده است.

7. مالکیت یک bucket کاری (برچسب‌ها)

  1. create_label را با name (برای مثال Agent/Orders) و skip_inbox: true فراخوانی کنید. این کار برچسب را به یک bucket تبدیل می‌کند: ایمیل دریافتی‌ای که این برچسب را بگیرد بایگانی می‌شود، پس فقط در آن برچسب نمایش داده می‌شود و هرگز در صندوق ورودی انسان نمی‌آید.
  2. ایمیل‌های کاری را با send_email (یا send_batch) و labels: ["Agent/Orders"] ارسال کنید. پاسخ‌ها به آن مکالمه به‌طور خودکار برچسب را به ارث می‌برند و از صندوق ورودی عبور نمی‌کنند.
  3. برای ایمیل‌هایی که خارج از مکالمه‌های شما آغاز می‌شوند، یک قانون بایگانی اضافه کنید: create_label_rule با inbox_id (یک نشانی اختصاصی مانند orders@…)، from، to یا subject. برای بایگانی ایمیل‌هایی که قبلاً دریافت شده‌اند، apply_to_existing: true را ارسال کنید.
  4. کار با bucket: list_emails با label: "Agent/Orders"، direction: "in" و unread: true؛ با get_email یا get_thread بخوانید، با send_email و reply_to_email_id پاسخ دهید و پس از رسیدگی mark_email را با read: true فراخوانی کنید.
  5. یک پیام سرگردان را با label_email (add / remove) وارد یا خارج کنید. افزودن برچسب bucket به یک پیام دریافتی، آن را بایگانی هم می‌کند.
  6. به‌صورت اختیاری، set_inbox_forwarding یک نسخه از هر چیزی را که یک نشانی دریافت می‌کند به صندوق ایمیل دیگری می‌فرستد (مقصد ابتدا از طریق ایمیل تأیید می‌کند).
ارسال در یک bucket
{
  "name": "send_email",
  "arguments": {
    "from": "Orders <orders@example.com>",
    "to": [
      "customer@example.net"
    ],
    "subject": "Order 1042: confirm delivery window",
    "text": "Reply with a time that works.",
    "labels": [
      "Agent/Orders"
    ],
    "idempotency_key": "order-1042-window"
  }
}

8. پیوست‌ها و قالب‌ها

در یک پلن پولی، حداکثر 10 فایل را با attachments در send_email پیوست کنید (هر کدام به content_base64 یا یک file_path محلی نیاز دارد؛ filename به‌طور پیش‌فرض نام پایه فایل است). برای قالب‌های میزبانی‌شده: create_template → update_template_draft → render_template برای پیش‌نمایش با داده نمونه ← send_template_test (یک ایمیل آزمایشی واقعی می‌فرستد) ← publish_template، سپس با send_email یا send_batch و با استفاده از template: {key, data} و دقیقاً یک گیرنده to ارسال کنید.

نتایج، صفحه‌بندی و خطاها

فراخوانی موفق، شیء JSON پاسخ API را به‌صورت structuredContent و به‌صورت یک بلوک متنی JSON برمی‌گرداند. همه ابزارهای list_* پارامترهای limit (1 تا 200، پیش‌فرض 50) و offset را می‌پذیرند و یک شیء pagination اضافه می‌کنند. تا زمانی که has_more برابر true است، با offset: pagination.next_offset به فراخوانی ادامه دهید.

نتیجه صفحه‌بندی‌شده
{
  "data": [
    "…"
  ],
  "count": 50,
  "pagination": {
    "offset": 0,
    "limit": 50,
    "returned": 50,
    "total": 180,
    "has_more": true,
    "next_offset": 50
  }
}

فراخوانی ناموفق isError: true را همراه با یک خطای ساختاریافته برمی‌گرداند. به‌جای تلاش مجدد کورکورانه، از remedy پیروی کنید؛ فقط وقتی retryable برابر true است دوباره تلاش کنید.

خطای ساختاریافته ابزار
{
  "error": {
    "code": "trial_recipient_restricted",
    "status": 402,
    "message": "The integration trial can deliver only to your account email or an AWS SES simulator address",
    "retryable": false,
    "explanation": "This workspace is on the unpaid integration trial. Trial sends can be delivered only to the account owner's email address or an AWS SES simulator address.",
    "remedy": "Send to the account email (get_account -> user.email) or a simulator address such as success@simulator.amazonses.com to test. To email anyone else, the account owner must activate a paid plan in the dashboard (Profile & Billing). Do not retry the same recipients."
  }
}

فیلدهای اختیاری خطا: request_id (آن را به پشتیبانی اعلام کنید)، retry_after_seconds، problems (فهرست موارد نقض schema برای invalid_arguments) و idempotent_replayed (بخش idempotency را ببینید).

idempotency

send_email و send_batch پارامتر idempotency_key (حداکثر 200 کاراکتر) را می‌پذیرند که به‌صورت هدر Idempotency-Key ارسال می‌شود. برای هر پیام منطقی یک کلید پایدار بسازید، برای مثال invoice-4812-receipt.

  • تلاش مجدد باید از همان کلید و بدنه درخواست کاملاً یکسان استفاده کند. همان کلید با هر تغییری (گیرنده، موضوع، متن، هدر، داده قالب، حتی مقادیر آرگومان‌ها) 409 idempotency_conflict برمی‌گرداند.
  • همان کلید، همان بدنه و درخواست اصلی تمام‌شده: SendHQ نتیجه ذخیره‌شده را بدون ارسال مجدد برمی‌گرداند. این روش امن تلاش مجدد پس از timeout یا network_error است.
  • همان کلید در حالی که درخواست اصلی هنوز در حال اجراست: 409 idempotency_in_progress که پس از کمی صبر قابل تلاش مجدد است.
  • یک پیام منطقی جدید به کلید جدید نیاز دارد.
  • شکست‌های ذخیره‌شده نیز بازپخش می‌شوند. اگر تلاش اول شکست خورده باشد، تلاش مجدد با همان کلید همان شکست را با idempotent_replayed: true و retryable: false برمی‌گرداند. با list_emails (direction: out) مطمئن شوید چیزی ارسال نشده، علت را برطرف کنید و سپس با یک کلید جدید ارسال کنید.
  • سرور هرگز به‌طور خودکار یک POST را دوباره تلاش نمی‌کند. فقط فراخوانی‌های فقط‌خواندنی GET به‌طور خودکار دوباره تلاش می‌شوند (حداکثر 3 تلاش در خطاهای شبکه، 429 و 5xx).
  • send_email با attachments درون‌خطی نمی‌تواند idempotency_key بگیرد، چون چند درخواست را اجرا می‌کند. برای ارسال پیوست به‌صورت امن برای تلاش مجدد: create_draft → upload_attachment → send_email با draft_id و idempotency_key.
ارسال امن برای تلاش مجدد (در صورت timeout دقیقاً تکرار کنید)
{
  "name": "send_email",
  "arguments": {
    "from": "Acme <billing@example.com>",
    "to": [
      "owner@example.com"
    ],
    "subject": "Receipt #4812",
    "text": "Thanks for your payment.",
    "idempotency_key": "receipt-4812"
  }
}

محدودیت نرخ و سهمیه‌ها

SendHQ محدودیت ثابتی برای تعداد درخواست در ثانیه API اعلام نمی‌کند. محدودیت‌هایی که ایجنت در عمل با آن‌ها روبه‌رو می‌شود، محدودیت‌های مصرف هستند که به‌صورت 429 برگردانده می‌شوند:

  • تحویل ماهانه به گیرندگان برای هر پلن. هر نشانی To، Cc و Bcc یک تحویل حساب می‌شود. get_account → usage.recipientDeliveries را در برابر usage.emailQuotaMonth ببینید.
  • تعداد گیرندگان روزانه برای هر نشانی From مشخص که وضعیت اعتبار آن فرستنده تعیین می‌کند (list_sender_reputation → dailyLimit، به‌طور پیش‌فرض 2,000 در پلن‌های پولی).
  • دوره آزمایشی یکپارچه‌سازی: در مجموع 100 گیرنده، فقط به ایمیل حساب یا نشانی‌های شبیه‌ساز SES.
  • پیوست‌ها: حداکثر 10 فایل و 10 MB برای هر پیام؛ در پلن‌های پولی 10 GB انتقال پیوست وزن‌دهی‌شده بر اساس گیرنده در ماه.
  • برای هر درخواست: To + Cc + Bcc حداکثر 100 نشانی؛ send_batch حداکثر 100 پیام.
  • قطع‌کننده مدار اعتبار: در یک بازه متحرک 7 روزه، برگشت‌ها یا گزارش‌های اسپم بیش از آستانه، یک نشانی From را محدود یا متوقف می‌کنند (423 sender_paused). پس از کاهش نرخ‌ها، به‌طور خودکار بازیابی می‌شود.

quota_exhausted تا زمان بازنشانی دوره یا تغییر پلن قابل تلاش مجدد نیست. rate_limited پس از retry_after_seconds قابل تلاش مجدد است؛ برای ارسال‌ها با همان idempotency_key و بدنه یکسان دوباره تلاش کنید.

فهرست خطاها

code پایدار است؛ منطق برنامه را بر اساس آن بنویسید، نه بر اساس message.

codeHTTPتلاش مجدد؟معنا و اقدام لازم
invalid_arguments—خیرآرگومان‌ها به‌صورت محلی از JSON Schema ابزار عبور نکردند؛ چیزی به SendHQ نرسید. فیلدهای فهرست‌شده در problems را اصلاح کنید.
auth_error401خیرکلید API وجود ندارد، باطل شده یا اشتباه است. SENDHQ_API_KEY را برای پردازه سرور تنظیم کنید؛ کلیدها را یک انسان در داشبورد می‌سازد.
trial_recipient_restricted402خیردوره آزمایشی یکپارچه‌سازی فقط می‌تواند به ایمیل حساب یا یک نشانی شبیه‌ساز SES تحویل دهد. به آنجا ارسال کنید یا مالک حساب یک پلن پولی فعال کند.
payment_required402خیراین قابلیت به پلن پولی نیاز دارد (برای مثال پیوست‌ها). بدون آن ارسال کنید یا پلن را ارتقا دهید.
sender_domain_not_owned403خیردامنه From در این فضای کاری نیست. از list_sending_identities یا add_domain استفاده کنید.
sender_domain_unverified403خیردامنه From هنوز تأیید نشده است. get_domain، انتشار رکوردهای جاافتاده، verify_domain.
domain_limit_reached403خیربه سقف تعداد دامنه پلن رسیده‌اید. یک دامنه بلااستفاده را (با تأیید) حذف کنید یا پلن را ارتقا دهید.
marketing_not_enabled403خیرکلاس marketing برای این دامنه یا پلن فعال نیست. فقط در صورتی از transactional استفاده کنید که پیام واقعاً تراکنشی باشد.
forbidden403خیرسیاست‌ها اجازه این عملیات را نمی‌دهند. درخواست را اصلاح کنید.
not_found404خیراین شناسه در این فضای کاری نیست. منبع را فهرست کنید تا شناسه درست را پیدا کنید؛ قالب‌های بایگانی‌شده را ابتدا بازیابی کنید.
idempotency_conflict409خیرکلید با بدنه متفاوتی دوباره استفاده شده است. دقیقاً درخواست اصلی را دوباره ارسال کنید یا برای پیام جدید از کلید جدید استفاده کنید.
idempotency_in_progress409بلهدرخواست اصلی هنوز در حال اجراست. صبر کنید، سپس با همان کلید و بدنه دوباره تلاش کنید.
revision_conflict409خیرپیش‌نویس قالب از زمانی که آن را خواندید تغییر کرده است. get_template، ادغام، ذخیره دوباره.
complaint_suppression_locked409خیرگیرنده گزارش اسپم داده است. هرگز دوباره به او ایمیل نزنید.
inbound_not_ready409خیردریافت ایمیل ورودی آماده نیست. setup_inbound، انتشار MX، verify_inbound.
conflict409خیرمنبع از قبل وجود دارد یا در وضعیت نادرستی است. آن را بخوانید و اصلاح کنید.
attachments_too_large413خیربیش از 10 فایل یا 10 MB. پیوست‌ها را حذف یا کوچک کنید.
recipient_suppressed422خیریک گیرنده پیش‌تر برگشت دائمی خورده یا گزارش اسپم داده است. او را حذف کنید؛ list_blocked_recipients را ببینید.
recipient_unsubscribed422خیریک گیرنده اشتراک ایمیل‌های بازاریابی را لغو کرده است. او را برای همیشه حذف کنید.
validation_failed422خیرمحتوا رد شد، برای مثال داده قالبی که قرارداد متغیرها را نقض می‌کند. ورودی را اصلاح کنید.
sender_paused423خیراین نشانی From توسط قطع‌کننده مدار 7 روزه برگشت/گزارش اسپم متوقف شده است. ارسال را متوقف کنید، فهرست را اصلاح کنید و منتظر بازیابی خودکار بمانید.
quota_exhausted429خیربه سقف ماهانه، روزانه برای هر فرستنده، پیوست یا دوره آزمایشی رسیده‌اید. get_account را بررسی کنید؛ منتظر بازنشانی بمانید یا پلن را ارتقا دهید.
rate_limited429بلهسرعت را کم کنید؛ به اندازه retry_after_seconds صبر کنید. ارسال‌ها: همان کلید، همان بدنه.
server_error5xxبلهخطای موقت SendHQ یا ارائه‌دهنده. با backoff دوباره تلاش کنید؛ ارسال‌ها با همان کلید و بدنه. اگر idempotent_replayed برابر true است، پس از اطمینان از اینکه چیزی ارسال نشده، از کلید جدید استفاده کنید.
network_error—بلهدرخواست یا پاسخ از دست رفت. دوباره تلاش کنید؛ برای ارسال‌ها، همان idempotency_key این کار را امن می‌کند.
invalid_request400خیردرخواست نادرست است. message را بخوانید و آن را اصلاح کنید.
tool_error—خیرخطای محلی درون سرور MCP (برای مثال یک file_path غیرقابل‌خواندن). message را بخوانید.

مرجع ابزارها

هر ابزار همراه با کلاس ایمنی، endpoint ‏REST که فراخوانی می‌کند، پارامترها، ساختار خروجی و یک شیء params نمونه برای tools/call. پارامترها دقیق‌اند: سرور هر چیزی را که فهرست نشده باشد رد می‌کند.

ایمیل‌ها و رشته‌های گفتگو: send_email، send_batch، list_emails، get_email، mark_email، delete_email، list_email_events، get_thread
برچسب‌ها و قوانین بایگانی خودکار: list_labels، get_label، create_label، update_label، delete_label، create_label_rule، delete_label_rule، label_email
پیش‌نویس‌ها، پیوست‌ها و هویت‌های فرستنده: list_sending_identities، create_draft، list_drafts، get_draft، update_draft، delete_draft، upload_attachment، download_attachment، delete_attachment
قالب‌های میزبانی‌شده: list_templates، create_template، get_template، update_template_draft، create_template_draft، render_template، send_template_test، publish_template، archive_template، restore_template
دامنه‌ها و DNS: list_domains، get_domain، add_domain، verify_domain، delete_domain، get_dns_provider، get_domain_connect_link
ایمیل ورودی: setup_inbound، verify_inbound، list_inboxes، get_inbox، create_inbox، update_inbox، set_inbox_forwarding، delete_inbox
تحویل‌پذیری، برگشت‌ها و فهرست توقف ارسال: deliverability_stats، list_sender_reputation، list_suppressions، remove_suppression، list_blocked_recipients
حساب، میزان مصرف، analytics و کلیدها: get_account، get_analytics، list_api_keys، get_service_health

ایمیل‌ها و رشته‌های گفتگو

ارسال ایمیل واقعیsend_email
POST /emails

ارسال یک ایمیل

SENDS REAL EMAIL (ایمیل واقعی ارسال می‌کند). یک پیام از یک دامنه تأییدشده ارسال کنید: html/text خام، یک قالب میزبانی‌شده منتشرشده، پاسخ در یک رشته گفتگوی موجود یا پیامی همراه با پیوست. idempotency_key را ارسال کنید تا تلاش مجدد نتواند دو بار ارسال کند؛ تلاش مجدد باید از همان کلید و درخواست کاملاً یکسان استفاده کند، وگرنه SendHQ کد 409 برمی‌گرداند. attachments یک میان‌بر است که یک پیش‌نویس می‌سازد، هر فایل را بارگذاری می‌کند و با همان پیش‌نویس ارسال می‌کند؛ نمی‌توان آن را با idempotency_key یا draft_id ترکیب کرد (برای ارسال پیوست به‌صورت امن برای تلاش مجدد از create_draft + upload_attachment + send_email با draft_id استفاده کنید). فضاهای کاری پرداخت‌نشده (دوره آزمایشی یکپارچه‌سازی) فقط می‌توانند به ایمیل حساب یا یک نشانی شبیه‌ساز AWS SES تحویل دهند و نمی‌توانند پیوست ارسال کنند.

دست‌کم یکی از این موارد را ارائه دهید: html، text، template.

پارامترنوعالزامیتوضیح
fromstringبلهفرستنده، مثلاً Acme <hello@example.com>. دامنه باید در این فضای کاری تأیید شده باشد (list_sending_identities را ببینید). (حداکثر 998 کاراکتر)
tostring[]بلهگیرندگان. هر مورد یک نشانی است، به‌صورت اختیاری همراه با نام نمایشی. مجموع to+cc+bcc حداکثر 100 است؛ هر مقصد یک اعتبار تحویل مصرف می‌کند. (1 تا 100 مورد)
ccstring[]خیرگیرندگان رونوشت (Cc). (0 تا 100 مورد)
bccstring[]خیرگیرندگان رونوشت مخفی (Bcc). (0 تا 100 مورد)
subjectstringخیرموضوع ایمیل. هنگام ارسال با قالب آن را حذف کنید. (حداکثر 998 کاراکتر)
textstringخیرمتن ساده. text، html یا template را ارائه دهید.
htmlstringخیربدنه HTML. SendHQ آن را پاک‌سازی می‌کند و وقتی text حذف شده باشد، متن را از آن استخراج می‌کند.
reply_tostringخیرنشانی Reply-To.
headersobjectخیرهدرهای سفارشی امن اضافی (با مقادیر رشته‌ای)، مثلاً {"X-Entity-Ref-ID": "123"}. هدرهای مسیریابی مانند From/To/Message-ID را SendHQ کنترل می‌کند.
message_classstringخیرtransactional (پیش‌فرض) یا marketing. marketing به پلن یا دامنه‌ای با قابلیت بازاریابی نیاز دارد و مدیریت لغو اشتراک را اضافه می‌کند. (یکی از transactional، marketing)
reply_to_email_idstringخیرپاسخ درون یک مکالمه موجود: شناسه em_… پیامی که به آن پاسخ داده می‌شود. SendHQ هدرهای In-Reply-To/References و رشته گفتگو را تنظیم می‌کند.
thread_idstringخیرشناسه صریح رشته گفتگویی که پیام باید زیر آن ثبت شود.
draft_idstringخیرپیوست‌های یک پیش‌نویس ذخیره‌شده (dr_…) را همراه این پیام ارسال کنید. پیش‌نویس پس از ارسال موفق حذف می‌شود.
templateobjectخیربه‌جای html/text خام، یک قالب میزبانی‌شده منتشرشده ارسال کنید. دقیقاً به یک گیرنده to و بدون cc/bcc نیاز دارد؛ موضوع را قالب تعیین می‌کند. دست‌کم یکی از این موارد را ارائه دهید: id، key.
template.idstringخیرشناسه قالب (tmpl_…). id یا key را ارائه دهید.
template.keystringخیرکلید قالب مانند account-welcome. id یا key را ارائه دهید.
template.version_idstringخیرشناسه اختیاری نسخه منتشرشده (tmplv_…). پیش‌فرض، نسخه منتشرشده فعلی است.
template.dataobjectخیرمقادیر متغیرهای نوع‌دار قالب.
labelsstring[]خیرنام برچسب‌ها یا شناسه‌های lbl_… که این پیام باید زیر آن‌ها بایگانی شود. نام‌های ناشناخته ایجاد می‌شوند. پاسخ‌های درون مکالمه برچسب‌ها را به ارث می‌برند و برچسب bucket ‏(skip_inbox) این پاسخ‌ها را از صندوق ورودی دور نگه می‌دارد. حداکثر 10. (0 تا 10 مورد)
idempotency_keystringخیرهدر Idempotency-Key (حداکثر 200 کاراکتر). فقط برای تلاش مجدد همین درخواست دقیق دوباره از آن استفاده کنید. (حداکثر 200 کاراکتر)
attachmentsobject[]خیرفایل‌هایی که باید پیوست شوند (حداکثر 10 فایل، مجموعاً 10 MB). هر کدام به content_base64 (همراه با filename) یا یک file_path محلی نیاز دارد. (0 تا 10 مورد) دست‌کم یکی از این موارد را ارائه دهید: content_base64، file_path.
attachments[].filenamestringخیرنام فایلی که به گیرنده نمایش داده می‌شود. همراه با content_base64 الزامی است؛ پیش‌فرض آن نام پایه file_path است. (حداکثر 255 کاراکتر)
attachments[].content_typestringخیرنوع MIME، مثلاً application/pdf. پیش‌فرض application/octet-stream است.
attachments[].content_base64stringخیرمحتوای فایل با base64 استاندارد.
attachments[].file_pathstringخیرمسیر مطلق یک فایل محلی که پردازه سرور MCP بتواند آن را بخواند.
خروجی{id: em_…, providerMessageId, threadId, templateId, templateVersionId, isTest}. پذیرش به معنای تحویل نیست: با list_email_events پیگیری کنید.
نمونه params برای tools/call
{
  "name": "send_email",
  "arguments": {
    "from": "Acme <hello@example.com>",
    "to": [
      "owner@example.com"
    ],
    "subject": "Your export is ready",
    "text": "Download it from your dashboard.",
    "idempotency_key": "export-ready-42"
  }
}
ارسال ایمیل واقعیsend_batch
POST /emails/batch

ارسال دسته‌ای ایمیل‌های شخصی‌سازی‌شده

SENDS REAL EMAIL (ایمیل واقعی ارسال می‌کند). 1 تا 100 پیام مستقل را در یک درخواست ارسال کنید (برای شخصی‌سازی قالب به‌ازای هر گیرنده از این استفاده کنید). هر مورد همان ساختار send_email را دارد (بدون attachments/idempotency_key). موارد به‌صورت جداگانه موفق یا ناموفق می‌شوند: HTTP 207 یعنی موفقیت جزئی؛ هر data[i].ok و data[i].error را بررسی کنید. یک idempotency_key کل بدنه دسته را پوشش می‌دهد.

پارامترنوعالزامیتوضیح
emailsobject[]بلهپیام‌هایی که باید ارسال شوند. (1 تا 100 مورد) دست‌کم یکی از این موارد را ارائه دهید: html، text، template.
idempotency_keystringخیرIdempotency-Key برای کل دسته (حداکثر 200 کاراکتر). (حداکثر 200 کاراکتر)
خروجی{data: [{index, ok, id?, error?: {message, status}}], count, successful, failed}.
نمونه params برای tools/call
{
  "name": "send_batch",
  "arguments": {
    "emails": [
      {
        "from": "Acme <hello@example.com>",
        "to": [
          "owner@example.com"
        ],
        "template": {
          "key": "account-welcome",
          "data": {
            "first_name": "Asha"
          }
        }
      }
    ],
    "idempotency_key": "welcome-batch-2026-09-26"
  }
}
فقط‌خواندنیlist_emails
GET /emails

فهرست و جستجوی ایمیل‌ها

ایمیل‌های ارسالی (direction: out) و دریافتی (direction: in) را از جدیدترین به قدیمی‌ترین همراه با فیلترها فهرست کنید. ایمیل‌های دریافتی دسته‌بندی می‌شوند: صندوق ورودی انسان را با direction: in، archived: false، category: primary بخوانید؛ با important: true اولویت‌بندی کنید؛ اسپم پنهان است مگر با category: spam یا include_spam: true. صفحه‌بندی‌شده: نتیجه شامل pagination {offset, limit, returned, total?, has_more, next_offset} است.

پارامترنوعالزامیتوضیح
directionstringخیرin برای دریافتی، out برای ارسالی. (یکی از in، out)
statusstringخیرفیلتر وضعیت، مثلاً queued، sent، delivered، bounced، complained، failed.
domainstringخیرفقط پیام‌های این دامنه، یا فهرستی از دامنه‌ها که با کاما جدا شده‌اند (تطابق با هر کدام).
inbox_idstringخیرفقط پیام‌هایی که این صندوق ورودی (inb_…) دریافت کرده است.
labelstringخیرفقط پیام‌هایی که این برچسب را دارند: شناسه برچسب lbl_… یا نام دقیق آن، یا فهرستی جداشده با کاما (تطابق با هر کدام). برای دیدن پوشه‌ها از list_labels استفاده کنید.
archivedbooleanخیرfalse = نمای صندوق ورودی (ایمیل‌های دریافتی بایگانی‌نشده)، true = فقط بایگانی‌شده‌ها. برای همه ایمیل‌ها آن را حذف کنید.
categorystringخیرprimary (افراد)، updates (خبرنامه‌ها، انبوه، خودکار) یا spam؛ یا فهرستی جداشده با کاما. اسپم پنهان است مگر اینکه درخواست شود.
importantbooleanخیرtrue = فقط پیام‌هایی که مهم علامت خورده‌اند (پاسخ به مکالمه‌هایی که شما آغاز کرده‌اید و فرستندگانی که مهم علامت خورده‌اند).
include_spambooleanخیراسپم را در نتایج بگنجانید (برای جستجو در همه پوشه‌ها).
fromstringخیرنشانی فرستنده شامل این مقدار باشد.
tostringخیرنشانی گیرنده شامل این مقدار باشد.
unreadbooleanخیرtrue = فقط خوانده‌نشده‌ها، false = فقط خوانده‌شده‌ها.
afterstringخیرمهر زمانی ISO-8601؛ فقط پیام‌هایی که پس از آن ایجاد شده‌اند. (date-time)
beforestringخیرمهر زمانی ISO-8601؛ فقط پیام‌هایی که پیش از آن ایجاد شده‌اند. (date-time)
querystringخیرجستجوی متن آزاد در موضوع‌ها، متن ایمیل‌ها، نشانی‌های فرستنده/گیرنده و نام فایل پیوست‌ها. (حداکثر 200 کاراکتر)
limitintegerخیراندازه صفحه. پیش‌فرض 50. (پیش‌فرض 50؛ 1 تا 200)
offsetintegerخیرتعداد رکوردهایی که باید رد شوند. از pagination.next_offset صفحه قبل استفاده کنید. (پیش‌فرض 0؛ 0 تا …)
خروجی{data: [email summaries], count, pagination}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "list_emails",
  "arguments": {
    "direction": "in",
    "unread": true,
    "limit": 25
  }
}
فقط‌خواندنیget_email
GET /emails/:email_id

دریافت یک ایمیل

یک پیام را همراه با هدرها، بدنه html/text، وضعیت، فراداده رشته گفتگو و فراداده پیوست‌ها دریافت کنید (بایت‌های پیوست را با download_attachment دانلود کنید).

پارامترنوعالزامیتوضیح
email_idstringبلهشناسه ایمیل (با em_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجیشیء ایمیل: {id, direction, status, from, to, cc, bcc, subject, html, text, threadId, messageId, providerMessageId, readAt, createdAt, attachments: [{id, filename, contentType, sizeBytes, available}]}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "get_email",
  "arguments": {
    "email_id": "em_123"
  }
}
تغییر وضعیتmark_email
PATCH /emails/:email_id

علامت‌گذاری به‌عنوان خوانده‌شده، بایگانی‌شده، اسپم یا مهم

یک پیام را به‌روز کنید: read، archived، category (primary، updates، spam؛ فقط ایمیل‌های دریافتی) و important. گزارش اسپم یا علامت‌گذاری به‌عنوان مهم، به SendHQ درباره آن فرستنده برای ایمیل‌های آینده آموزش می‌دهد؛ برای تغییر فقط همین پیام learn: false را ارسال کنید. دست‌کم یک فیلد ارسال کنید.

پارامترنوعالزامیتوضیح
email_idstringبلهشناسه ایمیل (با em_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
readbooleanخیرtrue = خوانده‌شده، false = خوانده‌نشده.
archivedbooleanخیرtrue = بایگانی (خارج از صندوق ورودی)، false = بازگرداندن به صندوق ورودی.
categorystringخیریک پیام دریافتی را به primary، updates یا spam منتقل کنید. (یکی از primary، updates، spam)
importantbooleanخیرعلامت مهم را روی پیام بگذارید یا بردارید.
learnbooleanخیرfalse = این تصمیم برای فرستنده به خاطر سپرده نشود (پیش‌فرض true).
خروجیشیء ایمیل به‌روزشده.
AnnotationهاidempotentHint
نمونه params برای tools/call
{
  "name": "mark_email",
  "arguments": {
    "email_id": "em_123",
    "read": true
  }
}
مخربdelete_email
DELETE /emails/:email_id

حذف یک ایمیل

DESTRUCTIVE (مخرب): یک پیام نگهداری‌شده و پیوست‌های ذخیره‌شده آن را برای همیشه از SendHQ حذف می‌کند. پیامی را که قبلاً تحویل شده بازنمی‌گرداند.

پارامترنوعالزامیتوضیح
email_idstringبلهشناسه ایمیل (با em_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجی{ok: true}.
AnnotationهاdestructiveHint idempotentHint
نمونه params برای tools/call
{
  "name": "delete_email",
  "arguments": {
    "email_id": "em_123"
  }
}
فقط‌خواندنیlist_email_events
GET /emails/:email_id/events

فهرست رویدادهای تحویل یک ایمیل

رویدادهای ارائه‌دهنده برای یک پیام ارسالی: delivery، bounce، complaint، reject، open، click. این‌ها شواهدی هستند که نشان می‌دهند پیام تحویل شده یا چرا شکست خورده است. صفحه‌بندی‌شده: نتیجه شامل pagination {offset, limit, returned, total?, has_more, next_offset} است.

پارامترنوعالزامیتوضیح
email_idstringبلهشناسه ایمیل (با em_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
limitintegerخیراندازه صفحه. پیش‌فرض 50. (پیش‌فرض 50؛ 1 تا 200)
offsetintegerخیرتعداد رکوردهایی که باید رد شوند. از pagination.next_offset صفحه قبل استفاده کنید. (پیش‌فرض 0؛ 0 تا …)
خروجی{data: [{event_type, recipient, reason, created_at, …}], count, pagination}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "list_email_events",
  "arguments": {
    "email_id": "em_123"
  }
}
فقط‌خواندنیget_thread
GET /threads/:thread_id

دریافت یک مکالمه

همه پیام‌های یک مکالمه (ارسالی و دریافتی) را به ترتیب زمانی، هر کدام همراه با فراداده پیوست‌ها، دریافت کنید.

پارامترنوعالزامیتوضیح
thread_idstringبلهشناسه رشته گفتگو (معمولاً شناسه em_… نخستین پیام؛ threadId هر ایمیل را ببینید). (حداکثر 128 کاراکتر)
خروجی{id, subject, data: [emails]}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "get_thread",
  "arguments": {
    "thread_id": "em_123"
  }
}

برچسب‌ها و قوانین بایگانی خودکار

فقط‌خواندنیlist_labels
GET /labels

فهرست برچسب‌ها

برچسب‌های (پوشه‌های) فضای کاری را همراه با تعداد کل و خوانده‌نشده‌ها و قوانین بایگانی خودکارشان فهرست کنید. صفحه‌بندی‌شده: نتیجه شامل pagination {offset, limit, returned, total?, has_more, next_offset} است.

پارامترنوعالزامیتوضیح
limitintegerخیراندازه صفحه. پیش‌فرض 50. (پیش‌فرض 50؛ 1 تا 200)
offsetintegerخیرتعداد رکوردهایی که باید رد شوند. از pagination.next_offset صفحه قبل استفاده کنید. (پیش‌فرض 0؛ 0 تا …)
خروجی{data: [{id, name, color, totalCount, unreadCount, rules: [...]}], count, pagination}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "list_labels",
  "arguments": {}
}
فقط‌خواندنیget_label
GET /labels/:label_id

دریافت یک برچسب

یک برچسب را همراه با شمارش‌ها و قوانین بایگانی خودکار دریافت کنید.

پارامترنوعالزامیتوضیح
label_idstringبلهشناسه برچسب (با lbl_ شروع می‌شود) یا نام دقیق برچسب. (حداکثر 128 کاراکتر)
خروجیشیء برچسب.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "get_label",
  "arguments": {
    "label_id": "Billing"
  }
}
تغییر وضعیتcreate_label
POST /labels

ساخت برچسب

یک برچسب از نوع پوشه بسازید. skip_inbox: true را تنظیم کنید تا به bucketی تبدیل شود که ایجنت مالک آن است: با labels: [name] ارسال کنید تا پاسخ‌ها در آن برچسب بایگانی شوند و از صندوق ورودی دور بمانند. قوانین اختیاری بایگانی خودکار، ایمیل‌های ارسالی/دریافتی جدید را بایگانی می‌کنند (همه شرط‌های یک قانون باید برقرار باشند). برای بایگانی ایمیل‌های نگهداری‌شده نیز apply_to_existing را تنظیم کنید.

پارامترنوعالزامیتوضیح
namestringبلهنام برچسب، مثلاً Billing یا Clients/Acme. در هر فضای کاری یکتاست (بدون حساسیت به حروف بزرگ و کوچک). (حداکثر 64 کاراکتر)
colorstringخیررنگ hex مانند #1a73e8. اختیاری.
skip_inboxbooleanخیرحالت bucket: ایمیل دریافتی‌ای که این برچسب را می‌گیرد (از طریق قانون، پاسخ به مکالمه‌ای که با این برچسب ارسال شده، یا به‌صورت دستی) بایگانی می‌شود تا فقط در برچسب نمایش داده شود، نه در صندوق ورودی.
rulesobject[]خیرقوانین اختیاری بایگانی خودکار (حداکثر 20). هر کدام دست‌کم به یکی از inbox_id، from، to، subject نیاز دارد. (0 تا 20 مورد)
rules[].directionstringخیرفقط ایمیل‌های in (دریافتی) یا out (ارسالی). برای هر دو آن را حذف کنید. (یکی از in، out)
rules[].inbox_idstringخیرفقط ایمیل‌هایی که این صندوق ورودی (inb_…) دریافت کرده است. هر نشانی دریافت را در پوشه مخصوص خودش بایگانی می‌کند.
rules[].fromstringخیرفرستنده شامل این متن باشد (بدون حساسیت به حروف بزرگ و کوچک)، مثلاً @stripe.com. (حداکثر 200 کاراکتر)
rules[].tostringخیرTo/Cc شامل این متن باشد (بدون حساسیت به حروف بزرگ و کوچک). (حداکثر 200 کاراکتر)
rules[].subjectstringخیرموضوع شامل این متن باشد (بدون حساسیت به حروف بزرگ و کوچک). (حداکثر 200 کاراکتر)
rules[].skip_inboxbooleanخیرایمیل‌های دریافتی منطبق را بایگانی کنید تا فقط در پوشه برچسب نمایش داده شوند، نه در صندوق ورودی.
apply_to_existingbooleanخیرایمیل‌های نگهداری‌شده‌ای را که با قوانین مطابقت دارند نیز بایگانی کنید.
خروجیبرچسب ساخته‌شده همراه با قوانین.
نمونه params برای tools/call
{
  "name": "create_label",
  "arguments": {
    "name": "Agent/Orders",
    "skip_inbox": true,
    "rules": [
      {
        "from": "@stripe.com"
      }
    ]
  }
}
تغییر وضعیتupdate_label
PATCH /labels/:label_id

تغییر نام، تغییر رنگ یا تبدیل برچسب به bucket

نام برچسب را تغییر دهید، رنگش را عوض کنید یا حالت bucket (skip_inbox) را روشن/خاموش کنید. روشن کردن حالت bucket ایمیل‌های دریافتی موجود در برچسب را بایگانی می‌کند.

پارامترنوعالزامیتوضیح
label_idstringبلهشناسه برچسب (با lbl_ شروع می‌شود) یا نام دقیق برچسب. (حداکثر 128 کاراکتر)
namestringخیرنام جدید. (حداکثر 64 کاراکتر)
colorstringخیررنگ hex جدید.
skip_inboxbooleanخیرحالت bucket: ایمیل دریافتی‌ای که این برچسب را می‌گیرد (از طریق قانون، پاسخ به مکالمه‌ای که با این برچسب ارسال شده، یا به‌صورت دستی) بایگانی می‌شود تا فقط در برچسب نمایش داده شود، نه در صندوق ورودی.
خروجیبرچسب به‌روزشده.
AnnotationهاidempotentHint
نمونه params برای tools/call
{
  "name": "update_label",
  "arguments": {
    "label_id": "lbl_123",
    "name": "Finance/Billing"
  }
}
مخربdelete_label
DELETE /labels/:label_id

حذف برچسب

DESTRUCTIVE (مخرب): یک برچسب و قوانینش را حذف می‌کند. خود ایمیل‌ها حفظ می‌شوند؛ فقط این برچسب را از دست می‌دهند.

پارامترنوعالزامیتوضیح
label_idstringبلهشناسه برچسب (با lbl_ شروع می‌شود) یا نام دقیق برچسب. (حداکثر 128 کاراکتر)
خروجی{ok: true}.
AnnotationهاdestructiveHint idempotentHint
نمونه params برای tools/call
{
  "name": "delete_label",
  "arguments": {
    "label_id": "lbl_123"
  }
}
تغییر وضعیتcreate_label_rule
POST /labels/:label_id/rules

افزودن قانون بایگانی خودکار

یک قانون به برچسب اضافه کنید تا ایمیل‌های جدید منطبق به‌طور خودکار بایگانی شوند. همه شرط‌هایی که تنظیم می‌کنید باید برقرار باشند. از inbox_id استفاده کنید تا یک نشانی دریافت، پوشه مخصوص خودش را داشته باشد؛ skip_inbox را اضافه کنید تا از صندوق ورودی دور بماند.

پارامترنوعالزامیتوضیح
label_idstringبلهشناسه برچسب (با lbl_ شروع می‌شود) یا نام دقیق برچسب. (حداکثر 128 کاراکتر)
directionstringخیرفقط ایمیل‌های in (دریافتی) یا out (ارسالی). برای هر دو آن را حذف کنید. (یکی از in، out)
inbox_idstringخیرفقط ایمیل‌هایی که این صندوق ورودی (inb_…) دریافت کرده است. هر نشانی دریافت را در پوشه مخصوص خودش بایگانی می‌کند.
fromstringخیرفرستنده شامل این متن باشد (بدون حساسیت به حروف بزرگ و کوچک)، مثلاً @stripe.com. (حداکثر 200 کاراکتر)
tostringخیرTo/Cc شامل این متن باشد (بدون حساسیت به حروف بزرگ و کوچک). (حداکثر 200 کاراکتر)
subjectstringخیرموضوع شامل این متن باشد (بدون حساسیت به حروف بزرگ و کوچک). (حداکثر 200 کاراکتر)
skip_inboxbooleanخیرایمیل‌های دریافتی منطبق را بایگانی کنید تا فقط در پوشه برچسب نمایش داده شوند، نه در صندوق ورودی.
apply_to_existingbooleanخیرایمیل‌های نگهداری‌شده منطبق را نیز بایگانی کنید.
خروجی{id: lrule_…, labelId, direction, inboxId, from, to, subject, skipInbox}.
نمونه params برای tools/call
{
  "name": "create_label_rule",
  "arguments": {
    "label_id": "Billing",
    "inbox_id": "inb_123",
    "skip_inbox": true
  }
}
مخربdelete_label_rule
DELETE /labels/:label_id/rules/:rule_id

حذف یک قانون بایگانی خودکار

DESTRUCTIVE (مخرب): یک قانون بایگانی خودکار را حذف می‌کند. ایمیل‌هایی که قبلاً بایگانی شده‌اند برچسب خود را حفظ می‌کنند.

پارامترنوعالزامیتوضیح
label_idstringبلهشناسه برچسب (با lbl_ شروع می‌شود) یا نام دقیق برچسب. (حداکثر 128 کاراکتر)
rule_idstringبلهشناسه قانون (با lrule_ شروع می‌شود)، از get_label. (حداکثر 128 کاراکتر)
خروجی{ok: true}.
AnnotationهاdestructiveHint idempotentHint
نمونه params برای tools/call
{
  "name": "delete_label_rule",
  "arguments": {
    "label_id": "lbl_123",
    "rule_id": "lrule_123"
  }
}
تغییر وضعیتlabel_email
POST /emails/:email_id/labels

افزودن یا حذف برچسب‌های یک ایمیل

یک پیام را بین پوشه‌ها جابه‌جا کنید: برچسب‌ها را با نام یا شناسه lbl_… اضافه و/یا حذف کنید. نام‌های ناشناخته در add ایجاد می‌شوند، مگر اینکه create برابر false باشد.

پارامترنوعالزامیتوضیح
email_idstringبلهشناسه ایمیل (با em_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
addstring[]خیربرچسب‌هایی که باید اضافه شوند. (0 تا 10 مورد)
removestring[]خیربرچسب‌هایی که باید حذف شوند. (0 تا 10 مورد)
createbooleanخیرایجاد برچسب‌های ناشناخته در add (پیش‌فرض true).
خروجیایمیل به‌روزشده همراه با labels.
AnnotationهاidempotentHint
نمونه params برای tools/call
{
  "name": "label_email",
  "arguments": {
    "email_id": "em_123",
    "add": [
      "Billing"
    ],
    "remove": [
      "Support"
    ]
  }
}

پیش‌نویس‌ها، پیوست‌ها و هویت‌های فرستنده

فقط‌خواندنیlist_sending_identities
GET /sending-identities

فهرست هویت‌های فرستنده تأییدشده

نشانی‌ها و دامنه‌هایی که این فضای کاری همین حالا می‌تواند از آن‌ها ارسال کند (دامنه‌های تأییدشده، From پیش‌فرض آن‌ها و نشانی‌های صندوق ورودی فعال). پیش از send_email آن را فراخوانی کنید تا یک from معتبر انتخاب کنید.

بدون پارامتر.

خروجی{domains: [verified domain names], addresses: [sender addresses], localParts: [...]}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "list_sending_identities",
  "arguments": {}
}
تغییر وضعیتcreate_draft
POST /drafts

ساخت پیش‌نویس

یک پیش‌نویس در ویرایشگر ایمیل بسازید. پیش‌نویس‌ها پیوست‌ها را نگه می‌دارند: یک پیش‌نویس بسازید، upload_attachment را اجرا کنید، سپس send_email را با draft_id فراخوانی کنید. چیزی ارسال نمی‌کند.

پارامترنوعالزامیتوضیح
fromstringخیرنشانی فرستنده روی یک دامنه تأییدشده (در حین پیش‌نویس می‌تواند خالی باشد).
tostring[]خیرگیرندگان. (0 تا 100 مورد)
ccstring[]خیرگیرندگان رونوشت (Cc). (0 تا 100 مورد)
bccstring[]خیرگیرندگان رونوشت مخفی (Bcc). (0 تا 100 مورد)
subjectstringخیرموضوع ایمیل. (حداکثر 998 کاراکتر)
htmlstringخیربدنه HTML.
textstringخیرمتن ساده.
reply_to_email_idstringخیرشناسه ایمیلی که این پیش‌نویس به آن پاسخ می‌دهد.
thread_idstringخیرشناسه رشته گفتگویی که این پیش‌نویس به آن تعلق دارد.
خروجیشیء پیش‌نویس {id: dr_…, from, to, cc, bcc, subject, html, text, attachments: []}.
نمونه params برای tools/call
{
  "name": "create_draft",
  "arguments": {
    "from": "hello@example.com",
    "to": [
      "owner@example.com"
    ],
    "subject": "Invoice"
  }
}
فقط‌خواندنیlist_drafts
GET /drafts

فهرست پیش‌نویس‌ها

پیش‌نویس‌های ویرایشگر را به ترتیب آخرین به‌روزرسانی فهرست کنید. صفحه‌بندی‌شده: نتیجه شامل pagination {offset, limit, returned, total?, has_more, next_offset} است.

پارامترنوعالزامیتوضیح
limitintegerخیراندازه صفحه. پیش‌فرض 50. (پیش‌فرض 50؛ 1 تا 200)
offsetintegerخیرتعداد رکوردهایی که باید رد شوند. از pagination.next_offset صفحه قبل استفاده کنید. (پیش‌فرض 0؛ 0 تا …)
خروجی{data: [drafts], count, pagination}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "list_drafts",
  "arguments": {}
}
فقط‌خواندنیget_draft
GET /drafts/:draft_id

دریافت یک پیش‌نویس

یک پیش‌نویس را همراه با فراداده پیوست‌هایش دریافت کنید.

پارامترنوعالزامیتوضیح
draft_idstringبلهشناسه پیش‌نویس (با dr_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجیشیء پیش‌نویس همراه با attachments.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "get_draft",
  "arguments": {
    "draft_id": "dr_123"
  }
}
تغییر وضعیتupdate_draft
PUT /drafts/:draft_id

جایگزینی محتوای پیش‌نویس

محتوا و گیرندگان یک پیش‌نویس را جایگزین کنید. این یک جایگزینی کامل است: فیلدهایی که حذف کنید پاک می‌شوند، پس ابتدا get_draft را بخوانید و همه فیلدهایی را که می‌خواهید حفظ شوند ارسال کنید. پیوست‌ها تحت تأثیر قرار نمی‌گیرند.

پارامترنوعالزامیتوضیح
draft_idstringبلهشناسه پیش‌نویس (با dr_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
fromstringخیرنشانی فرستنده روی یک دامنه تأییدشده (در حین پیش‌نویس می‌تواند خالی باشد).
tostring[]خیرگیرندگان. (0 تا 100 مورد)
ccstring[]خیرگیرندگان رونوشت (Cc). (0 تا 100 مورد)
bccstring[]خیرگیرندگان رونوشت مخفی (Bcc). (0 تا 100 مورد)
subjectstringخیرموضوع ایمیل. (حداکثر 998 کاراکتر)
htmlstringخیربدنه HTML.
textstringخیرمتن ساده.
reply_to_email_idstringخیرشناسه ایمیلی که این پیش‌نویس به آن پاسخ می‌دهد.
thread_idstringخیرشناسه رشته گفتگویی که این پیش‌نویس به آن تعلق دارد.
خروجیشیء پیش‌نویس به‌روزشده.
AnnotationهاidempotentHint
نمونه params برای tools/call
{
  "name": "update_draft",
  "arguments": {
    "draft_id": "dr_123",
    "from": "hello@example.com",
    "to": [
      "owner@example.com"
    ],
    "subject": "Invoice (updated)",
    "text": "Attached."
  }
}
مخربdelete_draft
DELETE /drafts/:draft_id

دور ریختن پیش‌نویس

DESTRUCTIVE (مخرب): یک پیش‌نویس را دور می‌ریزد و پیوست‌های ذخیره‌شده آن را برای همیشه حذف می‌کند.

پارامترنوعالزامیتوضیح
draft_idstringبلهشناسه پیش‌نویس (با dr_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجی{ok: true}.
AnnotationهاdestructiveHint idempotentHint
نمونه params برای tools/call
{
  "name": "delete_draft",
  "arguments": {
    "draft_id": "dr_123"
  }
}
تغییر وضعیتupload_attachment
POST /drafts/:draft_id/attachments

بارگذاری پیوست در یک پیش‌نویس

یک فایل را در یک پیش‌نویس بارگذاری کنید (حداکثر 10 فایل و مجموعاً 10 MB برای هر پیام). content_base64 یا یک file_path محلی ارائه دهید. پیوست‌ها هنگام ارسال به پلن پولی نیاز دارند.

دست‌کم یکی از این موارد را ارائه دهید: content_base64، file_path.

پارامترنوعالزامیتوضیح
draft_idstringبلهشناسه پیش‌نویس (با dr_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
filenamestringخیرنام فایلی که به گیرنده نمایش داده می‌شود. پیش‌فرض، نام پایه file_path است. (حداکثر 255 کاراکتر)
content_typestringخیرنوع MIME، مثلاً application/pdf. پیش‌فرض application/octet-stream است.
content_base64stringخیرمحتوای فایل با base64 استاندارد.
file_pathstringخیرمسیر مطلق یک فایل محلی که پردازه سرور MCP بتواند آن را بخواند.
خروجی{id: att_…, filename, contentType, sizeBytes, available}.
نمونه params برای tools/call
{
  "name": "upload_attachment",
  "arguments": {
    "draft_id": "dr_123",
    "filename": "invoice.pdf",
    "content_type": "application/pdf",
    "file_path": "/tmp/invoice.pdf"
  }
}
فقط‌خواندنیdownload_attachment
GET /attachments/:attachment_id

دانلود پیوست

یک پیوست خصوصی (ارسالی، دریافتی یا پیش‌نویس) را دانلود کنید. محتوای base64 را برمی‌گرداند، یا وقتی save_to_path تنظیم شده باشد فایل را می‌نویسد (بازنویسی نمی‌کند مگر اینکه overwrite برابر true باشد).

پارامترنوعالزامیتوضیح
attachment_idstringبلهشناسه پیوست (با att_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
save_to_pathstringخیرمسیر مطلق محلی اختیاری برای نوشتن فایل به‌جای برگرداندن base64.
overwritebooleanخیراجازه جایگزینی فایل موجود در save_to_path. پیش‌فرض false.
خروجی{attachment_id, filename, content_type, size_bytes, content_base64} or {attachment_id, filename, content_type, size_bytes, saved_to}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "download_attachment",
  "arguments": {
    "attachment_id": "att_123",
    "save_to_path": "/tmp/invoice.pdf"
  }
}
مخربdelete_attachment
DELETE /attachments/:attachment_id

حذف پیوست

DESTRUCTIVE (مخرب): یک پیوست ذخیره‌شده را برای همیشه حذف می‌کند (برای مثال، حذف یک فایل از پیش‌نویس پیش از ارسال).

پارامترنوعالزامیتوضیح
attachment_idstringبلهشناسه پیوست (با att_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجی{ok: true}.
AnnotationهاdestructiveHint idempotentHint
نمونه params برای tools/call
{
  "name": "delete_attachment",
  "arguments": {
    "attachment_id": "att_123"
  }
}

قالب‌های میزبانی‌شده

فقط‌خواندنیlist_templates
GET /templates

فهرست قالب‌های میزبانی‌شده

قالب‌های ایمیل میزبانی‌شده را همراه با وضعیت انتشار و میزان استفاده فهرست کنید. صفحه‌بندی‌شده: نتیجه شامل pagination {offset, limit, returned, total?, has_more, next_offset} است.

پارامترنوعالزامیتوضیح
lifecyclestringخیرactive (پیش‌فرض)، archived یا all. (یکی از active، archived، all)
querystringخیرجستجو بر اساس نام یا کلید. (حداکثر 120 کاراکتر)
limitintegerخیراندازه صفحه. پیش‌فرض 50. (پیش‌فرض 50؛ 1 تا 200)
offsetintegerخیرتعداد رکوردهایی که باید رد شوند. از pagination.next_offset صفحه قبل استفاده کنید. (پیش‌فرض 0؛ 0 تا …)
خروجی{data: [templates], count, pagination}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "list_templates",
  "arguments": {
    "lifecycle": "active"
  }
}
تغییر وضعیتcreate_template
POST /templates

ساخت قالب میزبانی‌شده

یک قالب با پیش‌نویس قابل‌ویرایش بسازید، به‌صورت اختیاری از یک محتوای آغازین (welcome، reset، receipt یا blank). پیش از ارسال با کلید، آن را منتشر کنید.

پارامترنوعالزامیتوضیح
namestringبلهنام قابل‌فهم برای انسان. (حداکثر 120 کاراکتر)
keystringخیرکلید پایدار ارسال: حروف کوچک، اعداد و خط تیره؛ با یک حرف شروع می‌شود (2 تا 64 کاراکتر). در صورت حذف، از نام استخراج می‌شود.
starterstringخیرمحتوای آغازین. (یکی از blank، welcome، reset، receipt)
خروجی{template, draft, activeVersion, versions, usage}.
نمونه params برای tools/call
{
  "name": "create_template",
  "arguments": {
    "name": "Account welcome",
    "key": "account-welcome",
    "starter": "welcome"
  }
}
فقط‌خواندنیget_template
GET /templates/:template_id

دریافت یک قالب

پیش‌نویس فعلی قالب (همراه با revision)، نسخه منتشرشده فعال، تاریخچه نسخه‌ها و میزان استفاده را دریافت کنید. شناسه یا کلید را می‌پذیرد.

پارامترنوعالزامیتوضیح
template_idstringبلهشناسه قالب (tmpl_…) یا کلید. (حداکثر 128 کاراکتر)
خروجی{template, draft: {id, revision, subjectTemplate, htmlTemplate, textTemplate, variables, sampleData, …} | null, activeVersion, versions, usage}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "get_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}
تغییر وضعیتupdate_template_draft
PUT /templates/:template_id/draft

ذخیره پیش‌نویس قالب

پیش‌نویس قابل‌ویرایش قالب را با هم‌زمانی خوش‌بینانه ذخیره کنید: revision فعلی را از get_template ارسال کنید (409 یعنی شخص دیگری زودتر ذخیره کرده است؛ دوباره بخوانید و تلاش کنید). این یک جایگزینی کامل محتوای پیش‌نویس است: فیلدهای حذف‌شده پاک می‌شوند، پس همه فیلدهایی را که می‌خواهید حفظ شوند ارسال کنید. از placeholderهای {{variable}} استفاده کنید.

پارامترنوعالزامیتوضیح
template_idstringبلهشناسه یا کلید قالب. (حداکثر 128 کاراکتر)
revisionintegerبلهrevision فعلی پیش‌نویس از get_template. (1 تا …)
namestringخیرنام قالب. (حداکثر 120 کاراکتر)
subject_templatestringخیرموضوع همراه با placeholderها. (حداکثر 998 کاراکتر)
preheader_templatestringخیرمتن پیش‌نمایش. (حداکثر 240 کاراکتر)
html_templatestringخیربدنه HTML همراه با placeholderها.
text_templatestringخیرمتن ساده همراه با placeholderها.
fromstringخیرفرستنده پیش‌فرض برای ارسال‌های این قالب.
reply_tostringخیرReply-To پیش‌فرض.
variablesobject[]خیرقرارداد متغیرهای نوع‌دار. هر مورد: {key (حروف کوچک/زیرخط), label, type: text|number|url|boolean, required (پیش‌فرض true), fallback, description}.
variables[].keystringبله
variables[].labelstringخیر
variables[].typestringخیر(یکی از text، number، url، boolean)
variables[].requiredbooleanخیر
variables[].fallbackanyخیر
variables[].descriptionstringخیر
sample_dataobjectخیرمقادیر نمونه برای پیش‌نمایش‌ها و آزمایش‌ها.
خروجی{template, draft: {revision: next}, validation: {valid, findings}}.
نمونه params برای tools/call
{
  "name": "update_template_draft",
  "arguments": {
    "template_id": "account-welcome",
    "revision": 3,
    "name": "Account welcome",
    "subject_template": "Welcome, {{first_name}}",
    "text_template": "Hi {{first_name}}",
    "variables": [
      {
        "key": "first_name",
        "type": "text",
        "required": true
      }
    ],
    "sample_data": {
      "first_name": "Asha"
    }
  }
}
تغییر وضعیتcreate_template_draft
POST /templates/:template_id/draft

شروع پیش‌نویس جدید از نسخه منتشرشده

یک پیش‌نویس قابل‌ویرایش جدید با کپی از نسخه منتشرشده فعلی بسازید (اگر پیش‌نویسی از قبل وجود داشته باشد یا چیزی منتشر نشده باشد، 409).

پارامترنوعالزامیتوضیح
template_idstringبلهشناسه یا کلید قالب. (حداکثر 128 کاراکتر)
خروجی{draft}.
نمونه params برای tools/call
{
  "name": "create_template_draft",
  "arguments": {
    "template_id": "account-welcome"
  }
}
فقط‌خواندنیrender_template
POST /templates/:template_id/render

رندر پیش‌نمایش قالب

خروجی دقیق سرور (subject، html، text) را برای پیش‌نویس، نسخه منتشرشده یا یک نسخه مشخص با داده داده‌شده رندر کنید. چیزی ارسال نمی‌کند. وقتی داده قرارداد متغیرها را نقض کند، 422 همراه با findings برمی‌گرداند.

پارامترنوعالزامیتوضیح
template_idstringبلهشناسه یا کلید قالب. (حداکثر 128 کاراکتر)
version_idstringخیرشناسه اختیاری نسخه؛ پیش‌فرض پیش‌نویس است و سپس نسخه منتشرشده.
dataobjectخیرمقادیر متغیرها؛ پیش‌فرض داده نمونه همان نسخه است.
خروجی{subject, html, text, preheader, versionId, versionNumber, isDraft, findings}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "render_template",
  "arguments": {
    "template_id": "account-welcome",
    "data": {
      "first_name": "Asha"
    }
  }
}
ارسال ایمیل واقعیsend_template_test
POST /templates/:template_id/test

ارسال ایمیل آزمایشی قالب

SENDS REAL EMAIL (ایمیل واقعی ارسال می‌کند). یک snapshot از پیش‌نویس (یا نسخه داده‌شده) را با پیشوند [Test] به گیرندگان داده‌شده ارسال می‌کند. در میزان مصرف حساب می‌شود؛ فضاهای کاری آزمایشی فقط می‌توانند به ایمیل حساب یا یک نشانی شبیه‌ساز SES ارسال کنند.

پارامترنوعالزامیتوضیح
template_idstringبلهشناسه یا کلید قالب. (حداکثر 128 کاراکتر)
tostring[]بلهگیرندگان آزمایشی. (1 تا 100 مورد)
fromstringخیرفرستنده روی یک دامنه تأییدشده؛ پیش‌فرض From قالب است.
version_idstringخیرشناسه اختیاری نسخه.
dataobjectخیرمقادیر متغیرها؛ پیش‌فرض داده نمونه است.
خروجی{id: em_…, providerMessageId, threadId, isTest: true}.
نمونه params برای tools/call
{
  "name": "send_template_test",
  "arguments": {
    "template_id": "account-welcome",
    "to": [
      "owner@example.com"
    ]
  }
}
تغییر وضعیتpublish_template
POST /templates/:template_id/publish

انتشار نسخه قالب

پیش‌نویس فعلی را به‌عنوان یک نسخه تغییرناپذیر منتشر کنید که send_email با template.key از آن استفاده خواهد کرد. در صورت خطای اعتبارسنجی با 422 و findings شکست می‌خورد، یا اگر قرارداد متغیرهای فعال قالبی را که در محیط عملیاتی استفاده می‌شود بشکند، با 409.

پارامترنوعالزامیتوضیح
template_idstringبلهشناسه یا کلید قالب. (حداکثر 128 کاراکتر)
خروجی{template, published}.
نمونه params برای tools/call
{
  "name": "publish_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}
تغییر وضعیتarchive_template
POST /templates/:template_id/archive

بایگانی قالب

ارسال‌های جدید با این قالب را متوقف می‌کند (تاریخچه حفظ می‌شود؛ با restore_template قابل بازگشت است). هر یکپارچه‌سازی‌ای که با این کلید ارسال می‌کند با 404 شکست خواهد خورد.

پارامترنوعالزامیتوضیح
template_idstringبلهشناسه یا کلید قالب. (حداکثر 128 کاراکتر)
خروجی{template}.
AnnotationهاidempotentHint
نمونه params برای tools/call
{
  "name": "archive_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}
تغییر وضعیتrestore_template
POST /templates/:template_id/restore

بازیابی قالب بایگانی‌شده

یک قالب بایگانی‌شده را دوباره فعال کنید.

پارامترنوعالزامیتوضیح
template_idstringبلهشناسه یا کلید قالب. (حداکثر 128 کاراکتر)
خروجی{template}.
AnnotationهاidempotentHint
نمونه params برای tools/call
{
  "name": "restore_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}

دامنه‌ها و DNS

فقط‌خواندنیlist_domains
GET /domains

فهرست دامنه‌ها

دامنه‌های ارسال را همراه با setup_status تجمیعی (verified | checking | pending)، وضعیت DNS هر رکورد و وضعیت ورودی فهرست کنید. ممکن است کند باشد: دامنه‌های تأییدنشده به‌صورت زنده دوباره بررسی می‌شوند. صفحه‌بندی‌شده: نتیجه شامل pagination {offset, limit, returned, total?, has_more, next_offset} است.

پارامترنوعالزامیتوضیح
limitintegerخیراندازه صفحه. پیش‌فرض 50. (پیش‌فرض 50؛ 1 تا 200)
offsetintegerخیرتعداد رکوردهایی که باید رد شوند. از pagination.next_offset صفحه قبل استفاده کنید. (پیش‌فرض 0؛ 0 تا …)
خروجی{data: [domains with records], count, pagination}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "list_domains",
  "arguments": {}
}
فقط‌خواندنیget_domain
GET /domains/:domain_id

دریافت جزئیات راه‌اندازی دامنه

یک دامنه را همراه با رکوردهای دقیق DNS برای انتشار (type، name، value)، وضعیت زنده هر رکورد از دو resolver عمومی، dns_issues همراه با راه‌حل‌ها و وضعیت ورودی دریافت کنید.

پارامترنوعالزامیتوضیح
domain_idstringبلهشناسه دامنه (با dom_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجی{id, name, status, setup_status, dns_propagating, records: [{type, name, value, verified, dns_state}], dns_issues: [{code, message, …}], inbound_domain, inbound_status}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "get_domain",
  "arguments": {
    "domain_id": "dom_123"
  }
}
تغییر وضعیتadd_domain
POST /domains

افزودن دامنه ارسال

دامنه‌ای را که در اختیار دارید برای ارسال ثبت کنید. رکوردهای DNS (CNAMEهای SES Easy DKIM) را که مالک باید منتشر کند برمی‌گرداند. خودش DNS را تغییر نمی‌دهد. در سقف تعداد دامنه پلن حساب می‌شود.

پارامترنوعالزامیتوضیح
namestringبلهنام دامنه بدون پیشوند، مثلاً example.com یا mail.example.com. (حداکثر 253 کاراکتر)
default_fromstringخیرنشانی فرستنده پیش‌فرض اختیاری روی این دامنه.
خروجی{id: dom_…, name, status: pending, records: [...], ses: {configured}}.
نمونه params برای tools/call
{
  "name": "add_domain",
  "arguments": {
    "name": "example.com"
  }
}
تغییر وضعیتverify_domain
POST /domains/:domain_id/verify

تأیید دامنه

همین حالا یک بررسی زنده تأیید SES/DNS اجرا کنید. تکرار آن امن است؛ پس از تغییرات DNS هر 30 تا 60 ثانیه فراخوانی کنید (انتشار ممکن است چند دقیقه تا چند ساعت طول بکشد). ارسال پس از آنکه وضعیت verified شد مجاز است.

پارامترنوعالزامیتوضیح
domain_idstringبلهشناسه دامنه (با dom_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجی{domain, checks: {ses, dkim, dkim_status}, status: verified|pending}.
AnnotationهاidempotentHint
نمونه params برای tools/call
{
  "name": "verify_domain",
  "arguments": {
    "domain_id": "dom_123"
  }
}
مخربdelete_domain
DELETE /domains/:domain_id

حذف دامنه

DESTRUCTIVE (مخرب): دامنه را همراه با مسیر دریافت ایمیل ورودی آن از فضای کاری حذف می‌کند. ارسال از آن بلافاصله پس از این کار شکست می‌خورد. رکوردهای DNS را نزد ارائه‌دهنده DNS شما حذف نمی‌کند.

پارامترنوعالزامیتوضیح
domain_idstringبلهشناسه دامنه (با dom_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجی{ok: true}.
AnnotationهاdestructiveHint idempotentHint
نمونه params برای tools/call
{
  "name": "delete_domain",
  "arguments": {
    "domain_id": "dom_123"
  }
}
فقط‌خواندنیget_dns_provider
GET /dns/provider

تشخیص ارائه‌دهنده DNS و hostهای رکوردها

ارائه‌دهنده DNS معتبر (authoritative) دامنه را تشخیص می‌دهد و host نسبی‌ای را که باید برای هر رکورد در آن ارائه‌دهنده وارد شود، رکورد DMARC پیشنهادی، راهنمای MX ورودی و در دسترس بودن راه‌اندازی یک‌کلیکی (Domain Connect) را برمی‌گرداند.

پارامترنوعالزامیتوضیح
domain_idstringبلهشناسه دامنه (با dom_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجی{detectionStatus, detected, zone, nameservers, recordHosts: {recordId: host}, inbound, recommendations, authentication, providers: {domainConnect: {available, providerName}}}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "get_dns_provider",
  "arguments": {
    "domain_id": "dom_123"
  }
}

ایمیل ورودی

تغییر وضعیتsetup_inbound
POST /domains/:domain_id/inbound/setup

فعال‌سازی دریافت ایمیل ورودی برای یک دامنه

دریافت ایمیل ورودی SES را برای یک دامنه تأییدشده راه‌اندازی می‌کند. اگر دامنه اصلی MX متعارضی نداشته باشد از آن استفاده می‌کند، وگرنه از inbound.<domain>. رکورد MX را که مالک باید منتشر کند برمی‌گرداند؛ DNS را ویرایش نمی‌کند.

پارامترنوعالزامیتوضیح
domain_idstringبلهشناسه دامنه (با dom_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجی{domain: receiving domain, status: dns_pending|ready, record: {type: MX, name, value}}.
AnnotationهاidempotentHint
نمونه params برای tools/call
{
  "name": "setup_inbound",
  "arguments": {
    "domain_id": "dom_123"
  }
}
تغییر وضعیتverify_inbound
POST /domains/:domain_id/inbound/verify

تأیید MX ورودی

رکورد MX ورودی را دوباره بررسی می‌کند. وقتی هر دو resolver عمومی آن را ببینند، وضعیت ready می‌شود.

پارامترنوعالزامیتوضیح
domain_idstringبلهشناسه دامنه (با dom_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجی{domain, status: ready|dns_pending|propagating|checking, record}.
AnnotationهاidempotentHint
نمونه params برای tools/call
{
  "name": "verify_inbound",
  "arguments": {
    "domain_id": "dom_123"
  }
}
فقط‌خواندنیlist_inboxes
GET /inboxes

فهرست نشانی‌های ورودی

نشانی‌های دریافت را، به‌صورت اختیاری برای یک دامنه، فهرست کنید. صفحه‌بندی‌شده: نتیجه شامل pagination {offset, limit, returned, total?, has_more, next_offset} است.

پارامترنوعالزامیتوضیح
domain_idstringخیرفیلتر اختیاری شناسه دامنه.
limitintegerخیراندازه صفحه. پیش‌فرض 50. (پیش‌فرض 50؛ 1 تا 200)
offsetintegerخیرتعداد رکوردهایی که باید رد شوند. از pagination.next_offset صفحه قبل استفاده کنید. (پیش‌فرض 0؛ 0 تا …)
خروجی{data: [{id, address, name, status, domainId}], count, pagination}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "list_inboxes",
  "arguments": {
    "domain_id": "dom_123"
  }
}
فقط‌خواندنیget_inbox
GET /inboxes/:inbox_id

دریافت یک صندوق ورودی

یک نشانی ورودی را دریافت کنید.

پارامترنوعالزامیتوضیح
inbox_idstringبلهشناسه صندوق ورودی (با inb_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجیشیء صندوق ورودی.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "get_inbox",
  "arguments": {
    "inbox_id": "inb_123"
  }
}
تغییر وضعیتcreate_inbox
POST /inboxes

ساخت نشانی ورودی

نشانی‌ای مانند support@<receiving domain> را روی دامنه‌ای بسازید که وضعیت ورودی آن ready است (ابتدا setup_inbound و verify_inbound را اجرا کنید). ایمیل‌های دریافتی در list_emails با direction برابر in نمایش داده می‌شوند.

پارامترنوعالزامیتوضیح
domain_idstringبلهشناسه دامنه (با dom_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
local_partstringبلهبخش پیش از @، مثلاً support. (حداکثر 64 کاراکتر)
namestringخیرنام نمایشی اختیاری.
خروجی{id: inb_…, address, name, status: active}.
نمونه params برای tools/call
{
  "name": "create_inbox",
  "arguments": {
    "domain_id": "dom_123",
    "local_part": "support",
    "name": "Support"
  }
}
تغییر وضعیتupdate_inbox
PATCH /inboxes/:inbox_id

تغییر نام، فعال یا غیرفعال کردن صندوق ورودی

نام یک صندوق ورودی را تغییر دهید یا وضعیت آن را روی active / disabled تنظیم کنید.

پارامترنوعالزامیتوضیح
inbox_idstringبلهشناسه صندوق ورودی (با inb_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
namestringخیرنام نمایشی جدید.
statusstringخیروضعیت جدید. (یکی از active، disabled)
خروجیصندوق ورودی به‌روزشده.
AnnotationهاidempotentHint
نمونه params برای tools/call
{
  "name": "update_inbox",
  "arguments": {
    "inbox_id": "inb_123",
    "status": "disabled"
  }
}
ارسال ایمیل واقعیset_inbox_forwarding
PUT /inboxes/:inbox_id/forwarding

فوروارد صندوق ورودی به نشانی دیگر

SENDS REAL EMAIL (ایمیل واقعی ارسال می‌کند) وقتی به کسی جز مالک حساب فوروارد شود: مقصد فوروارد ایمیل‌های دریافتی یک صندوق ورودی را تنظیم می‌کند. نشانی خود مالک بلافاصله فعال می‌شود؛ هر نشانی دیگری یک ایمیل تأیید دریافت می‌کند و فوروارد تا زمانی که کسی در آنجا تأیید کند در وضعیت pending می‌ماند. برای خاموش کردن فوروارد، forward_to: null را ارسال کنید. نسخه‌های فورواردشده از نشانی صندوق ورودی و با فرستنده اصلی به‌عنوان Reply-To ارسال می‌شوند.

پارامترنوعالزامیتوضیح
inbox_idstringبلهشناسه صندوق ورودی (با inb_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
forward_tostring,nullبلهنشانی ایمیل مقصد فوروارد، یا null برای خاموش کردن فوروارد. (حداکثر 254 کاراکتر)
خروجیصندوق ورودی همراه با forwardTo و forwardStatus (off، pending یا active).
AnnotationهاidempotentHint
نمونه params برای tools/call
{
  "name": "set_inbox_forwarding",
  "arguments": {
    "inbox_id": "inb_123",
    "forward_to": "team@example.net"
  }
}
مخربdelete_inbox
DELETE /inboxes/:inbox_id

حذف صندوق ورودی

DESTRUCTIVE (مخرب): یک نشانی ورودی را حذف می‌کند. ایمیل‌هایی که قبلاً دریافت شده‌اند نگه داشته می‌شوند؛ ایمیل‌های جدید به این نشانی دیگر در آن ثبت نمی‌شوند.

پارامترنوعالزامیتوضیح
inbox_idstringبلهشناسه صندوق ورودی (با inb_ شروع می‌شود)، همان‌طور که یک ابزار فهرست یا ایجاد برگردانده است. (حداکثر 128 کاراکتر)
خروجی{ok: true}.
AnnotationهاdestructiveHint idempotentHint
نمونه params برای tools/call
{
  "name": "delete_inbox",
  "arguments": {
    "inbox_id": "inb_123"
  }
}

تحویل‌پذیری، برگشت‌ها و فهرست توقف ارسال

فقط‌خواندنیdeliverability_stats
GET /deliverability/stats

دریافت آمار تحویل 30 روزه

مجموع‌های 30 روزه در سطح فضای کاری: sent، delivery، bounce، complaint، reject، open، click و deliveryRate (%).

بدون پارامتر.

خروجی{window: 30d, sent, delivery, bounce, complaint, reject, open, click, deliveryRate}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "deliverability_stats",
  "arguments": {}
}
فقط‌خواندنیlist_sender_reputation
GET /deliverability/reputation

فهرست اعتبار فرستنده

وضعیت اعتبار برای هر نشانی From مشخص: active، throttled (محدودیت روزانه کمتر) یا paused (ارسال‌ها 423 برمی‌گردانند)، همراه با دلیل و محدودیت روزانه. وقتی ارسال‌ها با 423 یا 429 شکست می‌خورند این را بررسی کنید. صفحه‌بندی‌شده: نتیجه شامل pagination {offset, limit, returned, total?, has_more, next_offset} است.

پارامترنوعالزامیتوضیح
limitintegerخیراندازه صفحه. پیش‌فرض 50. (پیش‌فرض 50؛ 1 تا 200)
offsetintegerخیرتعداد رکوردهایی که باید رد شوند. از pagination.next_offset صفحه قبل استفاده کنید. (پیش‌فرض 0؛ 0 تا …)
خروجی{data: [{sender, status, dailyLimit, reason, cleanSince, warnedAt, pausedAt, evaluatedAt}], count, pagination}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "list_sender_reputation",
  "arguments": {}
}
فقط‌خواندنیlist_suppressions
GET /suppressions

فهرست موارد توقف ارسال

فهرست توقف ارسال فضای کاری: گیرندگانی که پس از برگشت دائمی یا گزارش اسپم مسدود شده‌اند. ارسال به آن‌ها با 422 شکست می‌خورد. صفحه‌بندی‌شده: نتیجه شامل pagination {offset, limit, returned, total?, has_more, next_offset} است.

پارامترنوعالزامیتوضیح
limitintegerخیراندازه صفحه. پیش‌فرض 50. (پیش‌فرض 50؛ 1 تا 200)
offsetintegerخیرتعداد رکوردهایی که باید رد شوند. از pagination.next_offset صفحه قبل استفاده کنید. (پیش‌فرض 0؛ 0 تا …)
خروجی{data: [{email, reason, detail, created_at}], count, pagination}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "list_suppressions",
  "arguments": {}
}
مخربremove_suppression
DELETE /suppressions/:email

حذف مورد توقف ارسال ناشی از برگشت ایمیل

DESTRUCTIVE (مخرب؛ یک مانع ایمنی را تضعیف می‌کند): یک مورد توقف ارسال ناشی از برگشت را حذف می‌کند تا بتوان دوباره به آن نشانی ایمیل فرستاد. فقط وقتی این کار را انجام دهید که انسان تأیید کند نشانی اکنون معتبر است. موارد ناشی از گزارش اسپم قابل حذف نیستند (409).

پارامترنوعالزامیتوضیح
emailstringبلهنشانی گیرنده موجود در فهرست توقف ارسال. (حداکثر 320 کاراکتر)
خروجی{ok: true}.
AnnotationهاdestructiveHint idempotentHint
نمونه params برای tools/call
{
  "name": "remove_suppression",
  "arguments": {
    "email": "fixed-mailbox@example.net"
  }
}
فقط‌خواندنیlist_blocked_recipients
GET /blocked-recipients

فهرست گیرندگان مسدودشده

همه گیرندگانی که SendHQ از ارسال به آن‌ها خودداری می‌کند: برگشت‌ها، گزارش‌های اسپم و لغو اشتراک‌های بازاریابی در سطح دامنه، همراه با خلاصه‌ای به تفکیک نوع. حداکثر 500 مورد جدیدتر را می‌خواند. صفحه‌بندی‌شده: نتیجه شامل pagination {offset, limit, returned, total?, has_more, next_offset} است.

پارامترنوعالزامیتوضیح
limitintegerخیراندازه صفحه. پیش‌فرض 50. (پیش‌فرض 50؛ 1 تا 200)
offsetintegerخیرتعداد رکوردهایی که باید رد شوند. از pagination.next_offset صفحه قبل استفاده کنید. (پیش‌فرض 0؛ 0 تا …)
خروجی{data: [{email, domain, kind: bounce|complaint|unsubscribe, reason, detail, source, status, created_at}], count, summary: {total, bounce, complaint, unsubscribe}, pagination}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "list_blocked_recipients",
  "arguments": {}
}

حساب، میزان مصرف، analytics و کلیدها

فقط‌خواندنیget_account
GET /account

دریافت حساب، میزان مصرف و صورتحساب

ایمیل مالک حساب، پلن/سطح دسترسی، تحویل به گیرندگان مصرف‌شده در دوره جاری در برابر سهمیه، دامنه‌های مصرف‌شده در برابر سقف، انتقال پیوست، خلاصه اعتبار، وضعیت اشتراک، پلن‌های منتشرشده و شمارش‌های فضای کاری. از آن برای بررسی سهمیه باقی‌مانده یا اینکه دوره آزمایشی به چه کسی می‌تواند تحویل دهد (ایمیل حساب) استفاده کنید.

بدون پارامتر.

خروجی{user: {email, …}, usage: {domainsUsed, domainLimit, recipientDeliveries, emailQuotaMonth, attachmentBytes, attachmentByteLimit, periodKey}, access: {tier, planCode}, reputation, infrastructure, billing: {status, subscriptions, …}, plans, workspace: {mailer, stats}}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "get_account",
  "arguments": {}
}
فقط‌خواندنیget_analytics
GET /analytics

دریافت analytics ارسال

analytics داشبورد برای 7، 30 یا 90 روز گذشته: مجموع sent/received/delivered/bounced/blocked/opened/clicked/complaint، یک خط زمانی روزانه، دامنه‌های پرارسال و موضوع‌های پرتکرار.

پارامترنوعالزامیتوضیح
daysintegerخیربازه به روز: 7، 30 (پیش‌فرض) یا 90. (یکی از 7، 30، 90)
خروجی{window, days, metrics, timeline: [{day, sent, received}], domains, topContent}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "get_analytics",
  "arguments": {
    "days": 30
  }
}
فقط‌خواندنیlist_api_keys
GET /keys

فهرست فراداده کلیدهای API

نام کلیدهای API، پیشوندهای غیرمحرمانه و زمان آخرین استفاده را فهرست می‌کند. فقط‌خواندنی: این سرور MCP نمی‌تواند کلید بسازد، بچرخاند یا باطل کند؛ این کار را انسان در داشبورد انجام می‌دهد. صفحه‌بندی‌شده: نتیجه شامل pagination {offset, limit, returned, total?, has_more, next_offset} است.

پارامترنوعالزامیتوضیح
limitintegerخیراندازه صفحه. پیش‌فرض 50. (پیش‌فرض 50؛ 1 تا 200)
offsetintegerخیرتعداد رکوردهایی که باید رد شوند. از pagination.next_offset صفحه قبل استفاده کنید. (پیش‌فرض 0؛ 0 تا …)
خروجی{data: [{id, name, prefix, lastUsedAt, createdAt}], count, pagination}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "list_api_keys",
  "arguments": {}
}
فقط‌خواندنیget_service_health
GET /health

بررسی سلامت سرویس SendHQ

بررسی می‌کند که API ‏SendHQ در دسترس است و کدام ارائه‌دهنده ایمیل فعال است. به کلید API معتبر نیاز ندارد.

بدون پارامتر.

خروجی{ok, service, mailer}.
AnnotationهاreadOnlyHint idempotentHint
نمونه params برای tools/call
{
  "name": "get_service_health",
  "arguments": {}
}

فهرست پوشش API

هر عملیات در API عمومی و ابزاری که آن را پوشش می‌دهد. هر کاری که کاربر در داشبورد می‌تواند انجام دهد و API دارد پوشش داده شده است؛ موارد مستثنای زیر عمدی هستند.

Endpointابزاریادداشت‌ها
POST /emailssend_emailارسال یک ایمیل
POST /emails/batchsend_batchارسال حداکثر 100 پیام شخصی‌سازی‌شده
GET /emailslist_emailsفهرست ایمیل‌های ارسالی و دریافتی
GET /emails/:idget_emailدریافت یک ایمیل و پیوست‌های آن
PATCH /emails/:idmark_emailبه‌روزرسانی وضعیت خوانده‌شدن، بایگانی، اسپم، دسته یا اهمیت
POST /emails/:id/labelslabel_emailافزودن یا حذف برچسب‌های یک ایمیل
DELETE /emails/:iddelete_emailحذف یک ایمیل نگهداری‌شده
GET /emails/:id/eventslist_email_eventsفهرست رویدادهای تحویل یک ایمیل
GET /threads/:idget_threadدریافت یک مکالمه به ترتیب زمانی
GET /labelslist_labelsفهرست برچسب‌ها همراه با تعداد پیام‌ها و قوانین بایگانی
POST /labelscreate_labelساخت برچسب، به‌صورت اختیاری همراه با قوانین بایگانی خودکار
GET /labels/:idget_labelدریافت یک برچسب با شناسه یا نام
PATCH /labels/:idupdate_labelتغییر نام، تغییر رنگ یا تبدیل برچسب به bucket
DELETE /labels/:iddelete_labelحذف یک برچسب بدون حذف ایمیل‌های آن
POST /labels/:id/rulescreate_label_ruleافزودن قانون بایگانی خودکار به یک برچسب
DELETE /labels/:id/rules/:rule_iddelete_label_ruleحذف یک قانون بایگانی خودکار
POST /draftscreate_draftساخت پیش‌نویس در ویرایشگر
GET /draftslist_draftsفهرست پیش‌نویس‌های ویرایشگر
GET /drafts/:idget_draftدریافت یک پیش‌نویس و پیوست‌های آن
PUT /drafts/:idupdate_draftجایگزینی محتوای پیش‌نویس
DELETE /drafts/:iddelete_draftدور ریختن پیش‌نویس
POST /drafts/:id/attachmentsupload_attachmentبارگذاری پیوست در یک پیش‌نویس
GET /attachments/:iddownload_attachmentدانلود یک پیوست خصوصی
DELETE /attachments/:iddelete_attachmentحذف یک پیوست خصوصی
GET /sending-identitieslist_sending_identitiesفهرست هویت‌های فرستنده تأییدشده
GET /templateslist_templatesفهرست قالب‌های میزبانی‌شده
POST /templatescreate_templateساخت قالب میزبانی‌شده
GET /templates/:idget_templateدریافت پیش‌نویس‌ها، نسخه‌های منتشرشده و میزان استفاده
PUT /templates/:id/draftupdate_template_draftذخیره خودکار پیش‌نویس قالب
POST /templates/:id/draftcreate_template_draftساخت پیش‌نویس جدید از نسخه منتشرشده
POST /templates/:id/renderrender_templateرندر خروجی دقیق سرور
POST /templates/:id/testsend_template_testارسال یک snapshot آزمایشی
POST /templates/:id/publishpublish_templateانتشار یک نسخه تغییرناپذیر از قالب
POST /templates/:id/archivearchive_templateبایگانی قالب
POST /templates/:id/restorerestore_templateبازیابی قالب بایگانی‌شده
POST /domainsadd_domainافزودن دامنه ارسال
GET /domainslist_domainsفهرست دامنه‌ها و وضعیت ذخیره‌شده DNS
GET /domains/:idget_domainدریافت جزئیات راه‌اندازی دامنه
POST /domains/:id/verifyverify_domainبه‌روزرسانی تأیید SES و DNS
POST /domains/:id/inbound/setupsetup_inboundراه‌اندازی دریافت ایمیل ورودی SES
POST /domains/:id/inbound/verifyverify_inboundتأیید مسیریابی MX ورودی
DELETE /domains/:iddelete_domainحذف دامنه
GET /dns/providerget_dns_providerتشخیص ارائه‌دهنده DNS معتبر (authoritative) و hostهای نسبی رکوردها
GET /dns/domain-connect/connectget_domain_connect_linkساخت لینک رضایت Domain Connect برای راه‌اندازی یک‌کلیکی DNS
POST /inboxescreate_inboxساخت نشانی ورودی
GET /inboxeslist_inboxesفهرست نشانی‌های ورودی
GET /inboxes/:idget_inboxدریافت یک نشانی ورودی
PATCH /inboxes/:idupdate_inboxتغییر نام، فعال یا غیرفعال کردن صندوق ورودی
PUT /inboxes/:id/forwardingset_inbox_forwardingفوروارد ایمیل‌های دریافتی یک صندوق ورودی به نشانی دیگر
DELETE /inboxes/:iddelete_inboxحذف صندوق ورودی با حفظ پیام‌ها
GET /deliverability/statsdeliverability_statsدریافت آمار تحویل 30 روز اخیر
GET /deliverability/reputationlist_sender_reputationفهرست وضعیت اعتبار به تفکیک دقیق هویت فرستنده
GET /suppressionslist_suppressionsفهرست موارد توقف ارسال فضای کاری
DELETE /suppressions/:emailremove_suppressionحذف یک مورد توقف ارسال ناشی از برگشت ایمیل که واجد شرایط حذف است
GET /blocked-recipientslist_blocked_recipientsفهرست برگشت‌ها، گزارش‌های اسپم و لغو اشتراک‌ها
GET /accountget_accountدریافت حساب، میزان مصرف، وضعیت صورتحساب و شمارش‌های فضای کاری با کلید API
GET /analyticsget_analyticsدریافت analytics ارسال داشبورد برای 7، 30 یا 90 روز
GET /profileget_accountنسخه مبتنی بر نشست (session) از GET /account؛ سرور MCP مسیر مبتنی بر کلید API را می‌خواند.
POST /billing/checkoutدر دسترس نیستتغییرات صورتحساب طبق طراحی فقط از طریق نشست انجام می‌شوند و به حضور مالک حساب در داشبورد نیاز دارند. وضعیت صورتحساب با get_account قابل‌خواندن است.
POST /billing/cancelدر دسترس نیستتغییرات صورتحساب طبق طراحی فقط از طریق نشست انجام می‌شوند و به حضور مالک حساب در داشبورد نیاز دارند. وضعیت صورتحساب با get_account قابل‌خواندن است.
POST /keysدر دسترس نیستعمداً مستثنا شده است: ایجنت نباید اعتبارنامه بسازد یا از بین ببرد. کلیدها را انسان در داشبورد مدیریت می‌کند.
GET /keyslist_api_keysفهرست فراداده کلیدهای API
DELETE /keys/:idدر دسترس نیستعمداً مستثنا شده است: ایجنت نباید اعتبارنامه بسازد یا از بین ببرد. کلیدها را انسان در داشبورد مدیریت می‌کند.

عمداً در دسترس نیست

قابلیتendpointهادلیل
ساخت، چرخش، ابطال یا حذف کلیدهای APIPOST /keys, DELETE /keys/:idعمداً مستثنا شده است: ایجنت نباید اعتبارنامه بسازد یا از بین ببرد. کلیدها را انسان در داشبورد مدیریت می‌کند.
شروع پرداخت (checkout) یا لغو اشتراکPOST /billing/checkout, POST /billing/cancelتغییرات صورتحساب طبق طراحی فقط از طریق نشست انجام می‌شوند و به حضور مالک حساب در داشبورد نیاز دارند. وضعیت صورتحساب با get_account قابل‌خواندن است.
DNS یک‌کلیکی Cloudflare ‏(OAuth)GET /api/dns/cloudflare/connectبه یک نشست تعاملی مرورگر و رضایت OAuth در Cloudflare نیاز دارد. به‌جای آن از رکوردهای get_domain، hostهای get_dns_provider یا get_domain_connect_link استفاده کنید.
ثبت‌نام، ورود، خروج، اتصال حساب Google/api/auth/*احراز هویت انسانی در مرورگر؛ سرور MCP با کلید API احراز هویت می‌کند.
فرم تماس با پشتیبانیPOST /api/contactفرم عمومی وب‌سایت برای انسان‌ها، نه یک عملیات فضای کاری.

کاتالوگ قابل‌خواندن برای ماشین: /docs/mcp/tools.json (schemaها، annotationها، نگاشت endpointها، موارد مستثنا). نسخه Markdown این صفحه: /docs/mcp.md. با نصب CLI، دستور sendhq commands --format json همین کاتالوگ را چاپ می‌کند.