สำหรับเอเจนต์ AI

MCP server ของ SendHQ

ให้เอเจนต์ AI ควบคุมเวิร์กสเปซ 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 server ของ SendHQ ให้เอเจนต์ AI ใช้งานเวิร์กสเปซ SendHQ หนึ่งเวิร์กสเปซผ่าน Model Context Protocol ได้ ส่งอีเมล (แบบเดี่ยว แบบชุด แบบเทมเพลต การตอบกลับ ไฟล์แนบ และการลองใหม่แบบ idempotent) อ่านและค้นหาอีเมลที่ส่งและได้รับ (หัวเรื่อง เนื้อหา และชื่อไฟล์แนบ) พร้อมอีเวนต์การส่ง จัดอีเมลเข้าป้ายกำกับด้วยกฎจัดเก็บอัตโนมัติ จัดการฉบับร่างและไฟล์แนบส่วนตัว เขียนและเผยแพร่เทมเพลตแบบโฮสต์ เพิ่มและยืนยันโดเมนพร้อม DNS ตั้งค่าการรับอีเมลขาเข้าและที่อยู่ขาเข้า ตรวจสอบความสามารถในการส่งถึง bounce complaint และการระงับการส่ง และอ่านการใช้งานบัญชี สถานะการเรียกเก็บเงิน การวิเคราะห์ และเมทาดาทาของ API key

เป็นเซิร์ฟเวอร์ stdio ในเครื่องที่ฝังอยู่ในไบนารี CLI sendhq MCP client ของคุณเริ่ม sendhq mcp เป็นโปรเซสลูกและสื่อสาร JSON-RPC ผ่าน stdin/stdout การเรียกเครื่องมือทุกครั้งกลายเป็นคำขอที่มีเอกสารหนึ่งรายการไปยัง SendHQ REST API ที่ https://sendhq.cc/api/v1 โดยยืนยันตัวตนด้วย API key ของเวิร์กสเปซคุณ ดังนั้น MCP server จึงมีสิทธิ์เท่ากับคีย์นั้นทุกประการและไม่เกินกว่านั้น

  • 59 เครื่องมือ ใน 8 กลุ่ม สร้างจากแค็ตตาล็อกเดียวที่เผยแพร่เป็น tools.json ด้วย
  • JSON Schema ที่เข้มงวด: อาร์กิวเมนต์ที่ไม่รู้จัก ชนิดที่ผิด และฟิลด์บังคับที่ขาดหายจะถูกปฏิเสธในเครื่องก่อนที่จะไปถึง SendHQ
  • ข้อผิดพลาดแบบมีโครงสร้าง พร้อม code ที่คงที่ status ของ HTTP explanation remedy ที่เป็นรูปธรรม และข้อมูลว่าการลองใหม่ช่วยได้หรือไม่
  • ทุกเครื่องมือที่ส่งอีเมลจริงหรือทำลายข้อมูลจะระบุไว้ในคำแรกของคำอธิบาย และมี MCP safety annotation
  • โหมด --read-only ซ่อนทุกเครื่องมือที่ส่งและเปลี่ยนแปลงข้อมูล
  • ไม่มีการบันทึกล็อกใด ๆ stdout ส่งเฉพาะข้อความโปรโตคอล API key และเนื้อหาข้อความจะไม่ไปถึงล็อกเลย
ไม่ใช่ endpoint MCP ของเอกสารSendHQ ยังให้บริการ endpoint MCP ของเอกสารแบบอ่านอย่างเดียวขนาดเล็กที่ https://sendhq.cc/api/mcp (ค้นหาราคาและเอกสาร ไม่เข้าถึงบัญชี) เซิร์ฟเวอร์ในหน้านี้เป็นตัวเต็มที่ผูกกับบัญชี ทำงานในเครื่องหรือเป็นคอนเน็กเตอร์แบบโฮสต์ด้านล่าง

ใช้ SendHQ ใน Claude และ ChatGPT

ไม่ต้องติดตั้ง SendHQ ยังให้บริการเซิร์ฟเวอร์นี้เป็นคอนเน็กเตอร์แบบโฮสต์ที่ 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 ให้เลือก Needs approval สำหรับเครื่องมือเหล่านั้นที่ Settings → Connectors → SendHQ
  • คอนเน็กเตอร์จะได้ API key ของตัวเองซึ่งตั้งชื่อตามผู้ช่วย (เช่น “Claude (AI connector)”) ลบที่ API Keys เพื่อตัดการเชื่อมต่อทันที
  • ไม่สามารถสร้างหรือเพิกถอน API key หรือเปลี่ยนการเรียกเก็บเงินได้ ไฟล์แนบส่งและคืนเป็น 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 key ในแดชบอร์ดที่ https://sendhq.cc/app#/keys MCP server สร้างคีย์ไม่ได้ คำสั่งเดียวที่รันเซิร์ฟเวอร์คือ:

รัน stdio server
SENDHQ_API_KEY=re_your_key sendhq mcp

โดยปกติคุณไม่ต้องรันคำสั่งนั้นด้วยตนเอง MCP client จะเรียกให้ เมื่อรันในเทอร์มินัล มันจะรอ 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 ที่ใช้ร่วมกัน ให้อ้างอิงคีย์จากตัวแปรสภาพแวดล้อมแทนการคอมมิต 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 client อื่น ๆ

ตั้งค่า stdio server ด้วยคำสั่ง sendhq อาร์กิวเมนต์ ["mcp"] (ใส่ "--read-only" ได้หากต้องการ) และตัวแปรสภาพแวดล้อมด้านล่าง เซิร์ฟเวอร์รองรับ MCP protocol เวอร์ชัน 2024-11-05, 2025-03-26, 2025-06-18 และ 2025-11-25 และทำงาน initialize, ping, tools/list และ tools/call ผลลัพธ์ของเครื่องมือมีทั้งบล็อกข้อความ JSON และ structuredContent

ทดสอบ stdio แบบดิบ (ส่งเข้า 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 ไม่มี ไบนารีในเครื่องเก็บคีย์ไว้บนเครื่องที่ถือคีย์อยู่แล้ว

สภาพแวดล้อมและแฟลก

ตัวแปรหรือแฟลกจำเป็นความหมาย
SENDHQ_API_KEYใช่API key ของเวิร์กสเปซ (re_…) ทุกเครื่องมือยกเว้น get_service_health ต้องใช้ หากไม่มี เซิร์ฟเวอร์ยังเริ่มทำงานได้และทุกการเรียกจะคืน auth_error แบบมีโครงสร้างที่อธิบายวิธีแก้
SENDHQ_API_BASE_URLไม่API base URL ค่าเริ่มต้นคือ https://sendhq.cc/api/v1 ใช้เฉพาะกับการติดตั้งในเครื่องหรือ staging SENDHQ_BASE_URL ยังรับเป็นชื่อเรียกแบบเก่า
SENDHQ_MCP_READ_ONLYไม่1, true หรือ yes ทำงานเหมือน --read-only
--read-onlyไม่เปิดเผยเฉพาะเครื่องมือที่ไม่ส่งอีเมลและไม่เปลี่ยนสถานะ เครื่องมือที่ซ่อนไว้จะถูกปฏิเสธด้วยหากเรียกด้วยชื่อ
SENDHQ_PROFILE / --profileไม่ใช้คีย์ที่จัดเก็บโดย sendhq auth login ใน keyring ของระบบปฏิบัติการ แทน SENDHQ_API_KEY หากมีทั้งสองอย่าง ตัวแปรสภาพแวดล้อมจะมีผลเหนือกว่า

คีย์ถูกส่งเฉพาะในเฮดเดอร์ Authorization: Bearer ไปยัง base 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 และส่งไฟล์แนบไม่ได้
  • ยอมรับไม่เท่ากับส่งถึง การส่งที่สำเร็จจะคืน ID หลักฐานการส่งถึง bounce และ complaint จะมาถึงภายหลังใน list_email_events ห้ามอ้างว่าเข้ากล่องจดหมายหรือมีคนอ่านข้อความแล้ว
  • อย่าเปลี่ยนไปใช้ที่อยู่ From อื่นเพื่อเลี่ยงการหยุดชั่วคราวแบบ 423 และอย่าเพิ่มผู้รับที่ยกเลิกการรับหรือร้องเรียนกลับเข้าไปอีก

API key อยู่นอกขอบเขต

โดยการออกแบบ ไม่มีเครื่องมือที่สร้าง แก้ไข หมุนเวียน เพิกถอน หรือลบ API key เอเจนต์ต้องไม่สร้างหรือทำลายข้อมูลรับรอง 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 ที่เป็นผู้มีอำนาจ และคืนโฮสต์แบบสัมพัทธ์ที่ตรงกันที่ต้องกรอกสำหรับแต่ละเรคคอร์ดที่ผู้ให้บริการนั้น
  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 ให้ poll verify_domain หรือ get_domain ทุก 30–60 วินาที DNS อาจใช้เวลาตั้งแต่ไม่กี่นาทีถึงหลายชั่วโมง
  5. เมื่อ status เป็น verified ที่อยู่ของโดเมนจะปรากฏใน list_sending_identities

3. Bounce, complaint และการระงับการส่ง

  1. list_blocked_recipients คืนทุกที่อยู่ที่ถูกบล็อกพร้อมเหตุผล (bounce, complaint, unsubscribe) และจำนวนสรุป
  2. list_suppressions คืนการระงับการส่งจาก hard bounce และ complaint ส่วน deliverability_stats ให้อัตราการส่งถึง bounce และ complaint ย้อนหลัง 30 วัน และ list_sender_reputation แสดงที่อยู่ From ที่ถูกจำกัดหรือหยุดชั่วคราว
  3. การส่งที่มีผู้รับที่ถูกระงับการส่งจะล้มเหลวด้วย 422 recipient_suppressed ให้ลบผู้รับรายนั้นแล้วส่งใหม่
  4. เรียก remove_suppression เฉพาะเมื่อมนุษย์ยืนยันว่ากล่องจดหมายที่เคยตีกลับใช้งานได้แล้วเท่านั้น การระงับการส่งจาก complaint เป็นแบบถาวร (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. poll 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. Webhook และการแจ้งเตือนอีเวนต์

ขณะนี้ SendHQ ไม่มี webhook ที่ลูกค้าตั้งค่าเองได้ จึงไม่มีเครื่องมือ webhook การแจ้งเตือนจากผู้ให้บริการถูกประมวลผลภายใน SendHQ และเปิดให้อ่านผ่านการอ่านข้อมูล ให้ poll แทน: list_email_events สำหรับผลลัพธ์ของข้อความหนึ่งฉบับ list_emails พร้อม status (เช่น bounced) หรือ after สำหรับการเปลี่ยนแปลงล่าสุด list_emails พร้อม direction: "in" และ unread: true สำหรับอีเมลขาเข้าใหม่ และ list_blocked_recipients สำหรับการระงับการส่งใหม่ อย่า poll เกินประมาณหนึ่งครั้งต่อนาทีต่อหนึ่งคำถาม

6. วินิจฉัยความล้มเหลวในการส่งถึง

  1. ค้นหาข้อความ: list_emails พร้อม direction: "out" และ to หรือ query หรือ get_email หากคุณมี ID status: failed หมายความว่า SendHQ หรือผู้ให้บริการปฏิเสธในขั้นตอนการส่งเข้า ข้อผิดพลาดของอีเมลอธิบายสาเหตุ
  2. list_email_events: bounce (ถาวรหรือชั่วคราว พร้อมข้อมูลวินิจฉัยจากผู้ให้บริการ) complaint, reject หรือ delivery หากยังไม่มีอีเวนต์ แสดงว่าผู้ให้บริการยังไม่รายงาน ให้รอแล้วตรวจสอบอีกครั้ง
  3. หากการเรียกส่งล้มเหลวเอง ให้อ่านข้อผิดพลาด code: sender_domain_unverified → ทำการยืนยันโดเมนให้เสร็จ recipient_suppressed → ที่อยู่นั้นเคย hard bounce หรือร้องเรียนมาก่อน 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 ไฟล์ด้วย send_email attachments (แต่ละไฟล์ต้องมี content_base64 หรือ file_path ในเครื่อง โดย filename มีค่าเริ่มต้นเป็นชื่อไฟล์ของ basename) บนแพ็กเกจแบบชำระเงิน สำหรับเทมเพลตแบบโฮสต์: 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 ให้เรียกต่อด้วย offset: pagination.next_offset ตราบใดที่ has_more เป็น true

ผลลัพธ์แบบแบ่งหน้า
{
  "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 คืนผลลัพธ์ที่เก็บไว้โดยไม่ส่งอีก นี่คือวิธีลองใหม่อย่างปลอดภัยหลังหมดเวลาหรือ 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
การส่งที่ลองใหม่ได้อย่างปลอดภัย (ทำซ้ำให้เหมือนเดิมทุกประการเมื่อหมดเวลา)
{
  "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"
  }
}

Rate limit และโควตา

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 วัน หาก bounce หรือ complaint เกินเกณฑ์ จะจำกัดหรือหยุดที่อยู่ 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 key หายไป ถูกเพิกถอน หรือผิด ตั้ง 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 เฉพาะเมื่อข้อความเป็น transactional จริง ๆ
forbidden403ไม่นโยบายไม่อนุญาตการดำเนินการนี้ ปรับคำขอ
not_found404ไม่ID ไม่อยู่ในเวิร์กสเปซนี้ ให้แสดงรายการทรัพยากรเพื่อหา ID ที่ถูกต้อง และกู้คืนเทมเพลตที่เก็บถาวรก่อน
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ไม่ผู้รับเคย hard bounce หรือร้องเรียนมาก่อน ให้ลบออก ดู list_blocked_recipients
recipient_unsubscribed422ไม่ผู้รับยกเลิกการรับอีเมลการตลาด ให้ลบออกถาวร
validation_failed422ไม่เนื้อหาถูกปฏิเสธ เช่น ข้อมูลเทมเพลตที่ละเมิดสัญญาของตัวแปร แก้อินพุต
sender_paused423ไม่ที่อยู่ From นี้ถูกหยุดชั่วคราวโดยตัวตัดวงจร bounce/complaint 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 server (เช่น file_path ที่อ่านไม่ได้) อ่าน message

ข้อมูลอ้างอิงเครื่องมือ

ทุกเครื่องมือพร้อมคลาสความปลอดภัย REST endpoint ที่เรียก พารามิเตอร์ รูปแบบค่าที่คืน และตัวอย่างออบเจ็กต์ 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
ความสามารถในการส่งถึง bounce และการระงับการส่ง: deliverability_stats, list_sender_reputation, list_suppressions, remove_suppression, list_blocked_recipients
บัญชี การใช้งาน การวิเคราะห์ และคีย์: 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[]ไม่ผู้รับสำเนา (0–100 รายการ)
bccstring[]ไม่ผู้รับสำเนาลับ (0–100 รายการ)
subjectstringไม่หัวเรื่อง ละไว้เมื่อส่งเทมเพลต (สูงสุด 998 ตัวอักษร)
textstringไม่เนื้อหาข้อความล้วน ระบุ text, html หรือ template
htmlstringไม่เนื้อหา HTML SendHQ ทำความสะอาดให้และสร้าง text เมื่อละ text
reply_tostringไม่ที่อยู่ Reply-To
headersobjectไม่เฮดเดอร์กำหนดเองที่ปลอดภัยเพิ่มเติม (ค่าเป็นสตริง) เช่น {"X-Entity-Ref-ID": "123"} เฮดเดอร์การกำหนดเส้นทาง เช่น From/To/Message-ID ควบคุมโดย SendHQ
message_classstringไม่transactional (ค่าเริ่มต้น) หรือ marketing Marketing ต้องใช้แพ็กเกจหรือโดเมนที่เปิดใช้ marketing และเพิ่มการจัดการยกเลิกการรับ (หนึ่งใน transactional, marketing)
reply_to_email_idstringไม่ตอบกลับภายในบทสนทนาที่มีอยู่: ID em_… ของข้อความที่ตอบ SendHQ ตั้งค่า In-Reply-To/References และเธรดให้
thread_idstringไม่ID เธรดที่ระบุชัดเจนเพื่อจัดเก็บข้อความ
draft_idstringไม่ส่งไฟล์แนบของฉบับร่างที่เก็บไว้ (dr_…) พร้อมข้อความนี้ ฉบับร่างจะถูกลบหลังส่งสำเร็จ
templateobjectไม่ส่งเทมเพลตแบบโฮสต์ที่เผยแพร่แล้วแทน html/text ดิบ ต้องมีผู้รับ to หนึ่งรายพอดีและไม่มี cc/bcc เทมเพลตเป็นผู้ระบุหัวเรื่อง ต้องระบุอย่างน้อยหนึ่งรายการ: id, key
template.idstringไม่ID เทมเพลต (tmpl_…) ระบุ id หรือ key
template.keystringไม่คีย์เทมเพลต เช่น account-welcome ระบุ id หรือ key
template.version_idstringไม่ID รุ่นที่เผยแพร่แล้ว (tmplv_…) ซึ่งไม่บังคับ ค่าเริ่มต้นคือรุ่นที่เผยแพร่ปัจจุบัน
template.dataobjectไม่ค่าสำหรับตัวแปรที่มีชนิดข้อมูลของเทมเพลต
labelsstring[]ไม่ชื่อป้ายกำกับหรือ ID lbl_… ที่จะจัดเก็บข้อความนี้ ชื่อที่ไม่รู้จักจะถูกสร้างขึ้น การตอบกลับในบทสนทนาจะสืบทอดป้ายกำกับ และป้ายกำกับ bucket (skip_inbox) จะเก็บการตอบกลับเหล่านั้นไม่ให้เข้ากล่องเข้า สูงสุด 10 (0–10 รายการ)
idempotency_keystringไม่เฮดเดอร์ Idempotency-Key ใช้ซ้ำเฉพาะเพื่อลองคำขอนี้ใหม่เท่านั้น (สูงสุด 200 ตัวอักษร)
attachmentsobject[]ไม่ไฟล์ที่จะแนบ (สูงสุด 10 ไฟล์ รวม 10 MB) แต่ละไฟล์ต้องมี content_base64 (พร้อม filename) หรือ file_path ในเครื่อง (0–10 รายการ) ต้องระบุอย่างน้อยหนึ่งรายการ: content_base64, file_path
attachments[].filenamestringไม่ชื่อไฟล์ที่แสดงแก่ผู้รับ จำเป็นเมื่อใช้ content_base64 ค่าเริ่มต้นคือ basename ของ file_path (สูงสุด 255 ตัวอักษร)
attachments[].content_typestringไม่MIME type เช่น application/pdf ค่าเริ่มต้นคือ application/octet-stream
attachments[].content_base64stringไม่เนื้อหาไฟล์แบบ base64 มาตรฐาน
attachments[].file_pathstringไม่พาธสัมบูรณ์ของไฟล์ในเครื่องที่โปรเซสของ MCP server อ่านได้
ค่าที่คืน{id: em_…, providerMessageId, threadId, templateId, templateVersionId, isTest} การยอมรับไม่เท่ากับการส่งถึง ให้ติดตามผลด้วย list_email_events
ตัวอย่างพารามิเตอร์ของ 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 ตัวอักษร)
ค่าที่คืน{data: [{index, ok, id?, error?: {message, status}}], count, successful, failed}
ตัวอย่างพารามิเตอร์ของ 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ไม่เฉพาะข้อความที่มีป้ายกำกับนี้: ID ป้ายกำกับ 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: [สรุปอีเมล], count, pagination}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "list_emails",
  "arguments": {
    "direction": "in",
    "unread": true,
    "limit": 25
  }
}
อ่านอย่างเดียวget_email
GET /emails/:email_id

ดึงอีเมลหนึ่งฉบับ

ดึงข้อความหนึ่งฉบับพร้อมเฮดเดอร์ เนื้อหา html/text สถานะ เมทาดาทาของเธรด และเมทาดาทาของไฟล์แนบ (ดาวน์โหลดไบต์ด้วย download_attachment)

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
email_idstringใช่ID อีเมล (ขึ้นต้นด้วย em_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืนออบเจ็กต์อีเมล: {id, direction, status, from, to, cc, bcc, subject, html, text, threadId, messageId, providerMessageId, readAt, createdAt, attachments: [{id, filename, contentType, sizeBytes, available}]}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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ใช่ID อีเมล (ขึ้นต้นด้วย em_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
readbooleanไม่true = อ่านแล้ว false = ยังไม่อ่าน
archivedbooleanไม่true = เก็บถาวร (ข้ามกล่องเข้า) false = ย้ายกลับไปกล่องเข้า
categorystringไม่ย้ายข้อความที่ได้รับไปยัง primary, updates หรือ spam (หนึ่งใน primary, updates, spam)
importantbooleanไม่ทำเครื่องหมายหรือยกเลิกการทำเครื่องหมายข้อความว่าสำคัญ
learnbooleanไม่false = ไม่จดจำคำตัดสินนี้สำหรับผู้ส่ง (ค่าเริ่มต้น true)
ค่าที่คืนออบเจ็กต์อีเมลที่อัปเดตแล้ว
AnnotationidempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "mark_email",
  "arguments": {
    "email_id": "em_123",
    "read": true
  }
}
ทำลายข้อมูลdelete_email
DELETE /emails/:email_id

ลบอีเมล

DESTRUCTIVE: ลบข้อความที่เก็บรักษาไว้และไฟล์แนบที่จัดเก็บออกจาก SendHQ อย่างถาวร ไม่ได้เรียกคืนข้อความที่ส่งถึงแล้ว

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
email_idstringใช่ID อีเมล (ขึ้นต้นด้วย em_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{ok: true}
AnnotationdestructiveHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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ใช่ID อีเมล (ขึ้นต้นด้วย em_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
limitintegerไม่ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200)
offsetintegerไม่จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…)
ค่าที่คืน{data: [{event_type, recipient, reason, created_at, …}], count, pagination}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "list_email_events",
  "arguments": {
    "email_id": "em_123"
  }
}
อ่านอย่างเดียวget_thread
GET /threads/:thread_id

ดึงบทสนทนา

ดึงทุกข้อความในบทสนทนาตามลำดับเวลา (ทั้งที่ส่งและได้รับ) พร้อมเมทาดาทาของไฟล์แนบของแต่ละข้อความ

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
thread_idstringใช่ID เธรด (โดยปกติคือ ID em_… ของข้อความแรก ดู threadId ในอีเมลใด ๆ) (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{id, subject, data: [อีเมล]}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "list_labels",
  "arguments": {}
}
อ่านอย่างเดียวget_label
GET /labels/:label_id

ดึงป้ายกำกับ

ดึงป้ายกำกับหนึ่งรายการพร้อมจำนวนและกฎจัดเก็บอัตโนมัติ

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
label_idstringใช่ID ป้ายกำกับ (ขึ้นต้นด้วย lbl_) หรือชื่อป้ายกำกับที่ตรงกันทุกตัวอักษร (สูงสุด 128 ตัวอักษร)
ค่าที่คืนออบเจ็กต์ป้ายกำกับ
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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ไม่สีแบบเลขฐานสิบหก เช่น #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ไม่จัดเก็บอีเมลที่เก็บรักษาไว้แล้วซึ่งตรงกับกฎด้วย
ค่าที่คืนป้ายกำกับที่สร้างพร้อมกฎ
ตัวอย่างพารามิเตอร์ของ 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ใช่ID ป้ายกำกับ (ขึ้นต้นด้วย lbl_) หรือชื่อป้ายกำกับที่ตรงกันทุกตัวอักษร (สูงสุด 128 ตัวอักษร)
namestringไม่ชื่อใหม่ (สูงสุด 64 ตัวอักษร)
colorstringไม่สีเลขฐานสิบหกใหม่
skip_inboxbooleanไม่โหมด bucket: อีเมลที่ได้รับและได้ป้ายกำกับนี้ (โดยกฎ โดยการตอบกลับบทสนทนาที่ส่งด้วยป้ายกำกับนี้ หรือโดยตนเอง) จะถูกเก็บถาวร จึงปรากฏเฉพาะในป้ายกำกับ ไม่ปรากฏในกล่องเข้า
ค่าที่คืนป้ายกำกับที่อัปเดตแล้ว
AnnotationidempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "update_label",
  "arguments": {
    "label_id": "lbl_123",
    "name": "Finance/Billing"
  }
}
ทำลายข้อมูลdelete_label
DELETE /labels/:label_id

ลบป้ายกำกับ

DESTRUCTIVE: ลบป้ายกำกับและกฎของป้ายกำกับ ตัวอีเมลยังคงอยู่ เพียงแต่ไม่มีป้ายกำกับนี้

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
label_idstringใช่ID ป้ายกำกับ (ขึ้นต้นด้วย lbl_) หรือชื่อป้ายกำกับที่ตรงกันทุกตัวอักษร (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{ok: true}
AnnotationdestructiveHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "delete_label",
  "arguments": {
    "label_id": "lbl_123"
  }
}
เปลี่ยนสถานะcreate_label_rule
POST /labels/:label_id/rules

เพิ่มกฎจัดเก็บอัตโนมัติ

เพิ่มกฎให้ป้ายกำกับเพื่อให้อีเมลใหม่ที่ตรงกันถูกจัดเก็บโดยอัตโนมัติ ทุกเงื่อนไขที่คุณตั้งต้องตรงกัน ใช้ inbox_id เพื่อให้ที่อยู่ผู้รับมีโฟลเดอร์ของตนเอง เพิ่ม skip_inbox เพื่อไม่ให้ปรากฏในกล่องเข้า

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
label_idstringใช่ID ป้ายกำกับ (ขึ้นต้นด้วย 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}
ตัวอย่างพารามิเตอร์ของ 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ใช่ID ป้ายกำกับ (ขึ้นต้นด้วย lbl_) หรือชื่อป้ายกำกับที่ตรงกันทุกตัวอักษร (สูงสุด 128 ตัวอักษร)
rule_idstringใช่ID กฎ (ขึ้นต้นด้วย lrule_) จาก get_label (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{ok: true}
AnnotationdestructiveHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "delete_label_rule",
  "arguments": {
    "label_id": "lbl_123",
    "rule_id": "lrule_123"
  }
}
เปลี่ยนสถานะlabel_email
POST /emails/:email_id/labels

เพิ่มหรือลบป้ายกำกับของอีเมล

ย้ายข้อความระหว่างโฟลเดอร์: เพิ่มและ/หรือลบป้ายกำกับด้วยชื่อหรือ ID lbl_… ชื่อที่ไม่รู้จักใน add จะถูกสร้างขึ้น เว้นแต่ create เป็น false

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
email_idstringใช่ID อีเมล (ขึ้นต้นด้วย em_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
addstring[]ไม่ป้ายกำกับที่จะเพิ่ม (0–10 รายการ)
removestring[]ไม่ป้ายกำกับที่จะลบ (0–10 รายการ)
createbooleanไม่สร้างป้ายกำกับที่ไม่รู้จักใน add (ค่าเริ่มต้น true)
ค่าที่คืนอีเมลที่อัปเดตแล้วพร้อม labels
AnnotationidempotentHint
ตัวอย่างพารามิเตอร์ของ 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: [ชื่อโดเมนที่ยืนยันแล้ว], addresses: [ที่อยู่ผู้ส่ง], localParts: [...]}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "list_sending_identities",
  "arguments": {}
}
เปลี่ยนสถานะcreate_draft
POST /drafts

สร้างฉบับร่าง

สร้างฉบับร่างของตัวเขียน ฉบับร่างเก็บไฟล์แนบได้: สร้างฉบับร่าง upload_attachment แล้ว send_email พร้อม draft_id ไม่ส่งอะไรทั้งสิ้น

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
fromstringไม่ที่อยู่ผู้ส่งบนโดเมนที่ยืนยันแล้ว (อาจว่างไว้ระหว่างร่าง)
tostring[]ไม่ผู้รับ (0–100 รายการ)
ccstring[]ไม่ผู้รับสำเนา (0–100 รายการ)
bccstring[]ไม่ผู้รับสำเนาลับ (0–100 รายการ)
subjectstringไม่หัวเรื่อง (สูงสุด 998 ตัวอักษร)
htmlstringไม่เนื้อหา HTML
textstringไม่เนื้อหาข้อความล้วน
reply_to_email_idstringไม่ID อีเมลที่ฉบับร่างนี้ตอบกลับ
thread_idstringไม่ID เธรดที่ฉบับร่างนี้อยู่ในนั้น
ค่าที่คืนออบเจ็กต์ฉบับร่าง {id: dr_…, from, to, cc, bcc, subject, html, text, attachments: []}
ตัวอย่างพารามิเตอร์ของ 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: [ฉบับร่าง], count, pagination}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "list_drafts",
  "arguments": {}
}
อ่านอย่างเดียวget_draft
GET /drafts/:draft_id

ดึงฉบับร่าง

ดึงฉบับร่างหนึ่งฉบับพร้อมเมทาดาทาของไฟล์แนบ

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
draft_idstringใช่ID ฉบับร่าง (ขึ้นต้นด้วย dr_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืนออบเจ็กต์ฉบับร่างพร้อม attachments
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "get_draft",
  "arguments": {
    "draft_id": "dr_123"
  }
}
เปลี่ยนสถานะupdate_draft
PUT /drafts/:draft_id

แทนที่เนื้อหาฉบับร่าง

แทนที่เนื้อหาและผู้รับของฉบับร่าง นี่เป็นการแทนที่ทั้งหมด ฟิลด์ที่คุณละไว้จะถูกล้าง ดังนั้นให้อ่าน get_draft ก่อน แล้วส่งทุกฟิลด์ที่ต้องการเก็บไว้ ไฟล์แนบไม่ได้รับผลกระทบ

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
draft_idstringใช่ID ฉบับร่าง (ขึ้นต้นด้วย dr_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
fromstringไม่ที่อยู่ผู้ส่งบนโดเมนที่ยืนยันแล้ว (อาจว่างไว้ระหว่างร่าง)
tostring[]ไม่ผู้รับ (0–100 รายการ)
ccstring[]ไม่ผู้รับสำเนา (0–100 รายการ)
bccstring[]ไม่ผู้รับสำเนาลับ (0–100 รายการ)
subjectstringไม่หัวเรื่อง (สูงสุด 998 ตัวอักษร)
htmlstringไม่เนื้อหา HTML
textstringไม่เนื้อหาข้อความล้วน
reply_to_email_idstringไม่ID อีเมลที่ฉบับร่างนี้ตอบกลับ
thread_idstringไม่ID เธรดที่ฉบับร่างนี้อยู่ในนั้น
ค่าที่คืนออบเจ็กต์ฉบับร่างที่อัปเดตแล้ว
AnnotationidempotentHint
ตัวอย่างพารามิเตอร์ของ 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ใช่ID ฉบับร่าง (ขึ้นต้นด้วย dr_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{ok: true}
AnnotationdestructiveHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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ใช่ID ฉบับร่าง (ขึ้นต้นด้วย dr_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
filenamestringไม่ชื่อไฟล์ที่แสดงแก่ผู้รับ ค่าเริ่มต้นคือ basename ของ file_path (สูงสุด 255 ตัวอักษร)
content_typestringไม่MIME type เช่น application/pdf ค่าเริ่มต้นคือ application/octet-stream
content_base64stringไม่เนื้อหาไฟล์แบบ base64 มาตรฐาน
file_pathstringไม่พาธสัมบูรณ์ของไฟล์ในเครื่องที่โปรเซสของ MCP server อ่านได้
ค่าที่คืน{id: att_…, filename, contentType, sizeBytes, available}
ตัวอย่างพารามิเตอร์ของ 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ใช่ID ไฟล์แนบ (ขึ้นต้นด้วย att_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
save_to_pathstringไม่พาธสัมบูรณ์ในเครื่องที่จะเขียนไฟล์ลง แทนที่จะคืนเป็น base64 (ไม่บังคับ)
overwritebooleanไม่อนุญาตให้แทนที่ไฟล์ที่มีอยู่ที่ save_to_path ค่าเริ่มต้นคือ false
ค่าที่คืน{attachment_id, filename, content_type, size_bytes, content_base64} หรือ {attachment_id, filename, content_type, size_bytes, saved_to}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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ใช่ID ไฟล์แนบ (ขึ้นต้นด้วย att_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{ok: true}
AnnotationdestructiveHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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: [เทมเพลต], count, pagination}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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}
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "create_template",
  "arguments": {
    "name": "Account welcome",
    "key": "account-welcome",
    "starter": "welcome"
  }
}
อ่านอย่างเดียวget_template
GET /templates/:template_id

ดึงเทมเพลต

ดึงฉบับร่างปัจจุบันของเทมเพลต (พร้อม revision) รุ่นที่เผยแพร่และใช้งานอยู่ ประวัติรุ่น และการใช้งาน รับ ID หรือคีย์

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
template_idstringใช่ID เทมเพลต (tmpl_…) หรือคีย์ (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{template, draft: {id, revision, subjectTemplate, htmlTemplate, textTemplate, variables, sampleData, …} | null, activeVersion, versions, usage}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "get_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}
เปลี่ยนสถานะupdate_template_draft
PUT /templates/:template_id/draft

บันทึกฉบับร่างเทมเพลต

บันทึกฉบับร่างที่แก้ไขได้ของเทมเพลตโดยใช้ optimistic concurrency: ส่ง revision ปัจจุบันจาก get_template (409 หมายความว่ามีคนบันทึกก่อน ให้อ่านใหม่แล้วลองอีกครั้ง) นี่เป็นการแทนที่เนื้อหาฉบับร่างทั้งหมด ฟิลด์ที่ละไว้จะถูกล้าง ดังนั้นให้ส่งทุกฟิลด์ที่ต้องการเก็บไว้ ใช้ตัวแทน {{variable}}

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
template_idstringใช่ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร)
revisionintegerใช่revision ปัจจุบันของฉบับร่างจาก get_template (1–…)
namestringไม่ชื่อเทมเพลต (สูงสุด 120 ตัวอักษร)
subject_templatestringไม่หัวเรื่องพร้อมตัวแทน (สูงสุด 998 ตัวอักษร)
preheader_templatestringไม่ข้อความตัวอย่าง (สูงสุด 240 ตัวอักษร)
html_templatestringไม่เนื้อหา HTML พร้อมตัวแทน
text_templatestringไม่เนื้อหาข้อความล้วนพร้อมตัวแทน
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}}
ตัวอย่างพารามิเตอร์ของ 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ใช่ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{draft}
ตัวอย่างพารามิเตอร์ของ 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ใช่ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร)
version_idstringไม่ID รุ่นที่ไม่บังคับ ค่าเริ่มต้นคือฉบับร่าง แล้วจึงเป็นรุ่นที่เผยแพร่
dataobjectไม่ค่าของตัวแปร ค่าเริ่มต้นคือข้อมูลตัวอย่างของรุ่นนั้น
ค่าที่คืน{subject, html, text, preheader, versionId, versionNumber, isDraft, findings}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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 ส่งสแนปชอตของฉบับร่าง (หรือรุ่นที่ระบุ) ที่ขึ้นต้นด้วย [Test] ไปยังผู้รับที่ระบุ นับรวมในการใช้งาน เวิร์กสเปซช่วงทดลองส่งได้เฉพาะอีเมลของบัญชีหรือที่อยู่จำลองของ SES

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
template_idstringใช่ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร)
tostring[]ใช่ผู้รับทดสอบ (1–100 รายการ)
fromstringไม่ผู้ส่งบนโดเมนที่ยืนยันแล้ว ค่าเริ่มต้นคือ From ของเทมเพลต
version_idstringไม่ID รุ่นที่ไม่บังคับ
dataobjectไม่ค่าของตัวแปร ค่าเริ่มต้นคือข้อมูลตัวอย่าง
ค่าที่คืน{id: em_…, providerMessageId, threadId, isTest: true}
ตัวอย่างพารามิเตอร์ของ 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 จะใช้ล้มเหลวด้วย findings 422 เมื่อมีข้อผิดพลาดในการตรวจสอบ หรือ 409 หากจะทำลายสัญญาตัวแปรที่ใช้งานจริงของเทมเพลตที่ใช้ในระบบจริงอยู่แล้ว

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
template_idstringใช่ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{template, published}
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "publish_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}
เปลี่ยนสถานะarchive_template
POST /templates/:template_id/archive

เก็บถาวรเทมเพลต

หยุดการส่งใหม่ที่ใช้เทมเพลตนี้ (เก็บประวัติไว้ และย้อนกลับได้ด้วย restore_template) การเชื่อมต่อใด ๆ ที่ส่งด้วยคีย์นี้จะเริ่มล้มเหลวด้วย 404

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
template_idstringใช่ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{template}
AnnotationidempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "archive_template",
  "arguments": {
    "template_id": "account-welcome"
  }
}
เปลี่ยนสถานะrestore_template
POST /templates/:template_id/restore

กู้คืนเทมเพลตที่เก็บถาวร

ทำให้เทมเพลตที่เก็บถาวรกลับมาใช้งานได้อีกครั้ง

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
template_idstringใช่ID หรือคีย์ของเทมเพลต (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{template}
AnnotationidempotentHint
ตัวอย่างพารามิเตอร์ของ 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: [โดเมนพร้อมเรคคอร์ด], count, pagination}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "list_domains",
  "arguments": {}
}
อ่านอย่างเดียวget_domain
GET /domains/:domain_id

ดึงรายละเอียดการตั้งค่าโดเมน

ดึงโดเมนหนึ่งรายการพร้อมเรคคอร์ด DNS ที่ต้องเผยแพร่ตรงตัว (type, name, value) สถานะจริงของแต่ละเรคคอร์ดจาก public resolver สองตัว dns_issues พร้อมวิธีแก้ และสถานะขาเข้า

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
domain_idstringใช่ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{id, name, status, setup_status, dns_propagating, records: [{type, name, value, verified, dns_state}], dns_issues: [{code, message, …}], inbound_domain, inbound_status}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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}}
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "add_domain",
  "arguments": {
    "name": "example.com"
  }
}
เปลี่ยนสถานะverify_domain
POST /domains/:domain_id/verify

ยืนยันโดเมน

รันการตรวจสอบ SES/DNS แบบสดทันที ทำซ้ำได้อย่างปลอดภัย ให้ poll ทุก 30–60 วินาทีหลังเปลี่ยน DNS (การเผยแพร่อาจใช้เวลาตั้งแต่ไม่กี่นาทีถึงหลายชั่วโมง) อนุญาตให้ส่งได้เมื่อ status เป็น verified

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
domain_idstringใช่ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{domain, checks: {ses, dkim, dkim_status}, status: verified|pending}
AnnotationidempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "verify_domain",
  "arguments": {
    "domain_id": "dom_123"
  }
}
ทำลายข้อมูลdelete_domain
DELETE /domains/:domain_id

ลบโดเมน

DESTRUCTIVE: ลบโดเมนออกจากเวิร์กสเปซ รวมถึงเส้นทางรับอีเมลขาเข้า การส่งจากโดเมนนี้จะล้มเหลวทันทีหลังจากนั้น ไม่ลบเรคคอร์ด DNS ที่ผู้ให้บริการ DNS ของคุณ

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
domain_idstringใช่ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{ok: true}
AnnotationdestructiveHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "delete_domain",
  "arguments": {
    "domain_id": "dom_123"
  }
}
อ่านอย่างเดียวget_dns_provider
GET /dns/provider

ตรวจหาผู้ให้บริการ DNS และโฮสต์ของเรคคอร์ด

ตรวจหาผู้ให้บริการ DNS ที่เป็นผู้มีอำนาจของโดเมน และคืนโฮสต์แบบสัมพัทธ์ที่ต้องพิมพ์ในผู้ให้บริการนั้นสำหรับแต่ละเรคคอร์ด เรคคอร์ด DMARC ที่แนะนำ คำแนะนำ MX ขาเข้า และมีการตั้งค่าแบบคลิกเดียว (Domain Connect) หรือไม่

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
domain_idstringใช่ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{detectionStatus, detected, zone, nameservers, recordHosts: {recordId: host}, inbound, recommendations, authentication, providers: {domainConnect: {available, providerName}}}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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ใช่ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{domain: โดเมนรับ, status: dns_pending|ready, record: {type: MX, name, value}}
AnnotationidempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "setup_inbound",
  "arguments": {
    "domain_id": "dom_123"
  }
}
เปลี่ยนสถานะverify_inbound
POST /domains/:domain_id/inbound/verify

ยืนยัน MX ขาเข้า

ตรวจสอบเรคคอร์ด MX ขาเข้าอีกครั้ง สถานะจะเป็น ready เมื่อ public resolver ทั้งสองตัวเห็นเรคคอร์ดนั้น

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
domain_idstringใช่ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{domain, status: ready|dns_pending|propagating|checking, record}
AnnotationidempotentHint
ตัวอย่างพารามิเตอร์ของ 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ไม่ตัวกรอง ID โดเมน (ไม่บังคับ)
limitintegerไม่ขนาดหน้า ค่าเริ่มต้นคือ 50 (ค่าเริ่มต้น 50; 1–200)
offsetintegerไม่จำนวนระเบียนที่จะข้าม ใช้ pagination.next_offset จากหน้าก่อนหน้า (ค่าเริ่มต้น 0; 0–…)
ค่าที่คืน{data: [{id, address, name, status, domainId}], count, pagination}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "list_inboxes",
  "arguments": {
    "domain_id": "dom_123"
  }
}
อ่านอย่างเดียวget_inbox
GET /inboxes/:inbox_id

ดึงกล่องจดหมาย

ดึงที่อยู่ขาเข้าหนึ่งรายการ

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
inbox_idstringใช่ID กล่องจดหมาย (ขึ้นต้นด้วย inb_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืนออบเจ็กต์กล่องจดหมาย
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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ใช่ID โดเมน (ขึ้นต้นด้วย dom_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
local_partstringใช่ส่วนก่อน @ เช่น support (สูงสุด 64 ตัวอักษร)
namestringไม่ชื่อที่แสดง (ไม่บังคับ)
ค่าที่คืน{id: inb_…, address, name, status: active}
ตัวอย่างพารามิเตอร์ของ 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ใช่ID กล่องจดหมาย (ขึ้นต้นด้วย inb_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
namestringไม่ชื่อที่แสดงใหม่
statusstringไม่สถานะใหม่ (หนึ่งใน active, disabled)
ค่าที่คืนกล่องจดหมายที่อัปเดตแล้ว
AnnotationidempotentHint
ตัวอย่างพารามิเตอร์ของ 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ใช่ID กล่องจดหมาย (ขึ้นต้นด้วย inb_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
forward_tostring,nullใช่ที่อยู่อีเมลปลายทางของการส่งต่อ หรือ null เพื่อปิดการส่งต่อ (สูงสุด 254 ตัวอักษร)
ค่าที่คืนกล่องจดหมายพร้อม forwardTo และ forwardStatus (off, pending หรือ active)
AnnotationidempotentHint
ตัวอย่างพารามิเตอร์ของ 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ใช่ID กล่องจดหมาย (ขึ้นต้นด้วย inb_) ตามที่เครื่องมือแสดงรายการหรือสร้างคืนมา (สูงสุด 128 ตัวอักษร)
ค่าที่คืน{ok: true}
AnnotationdestructiveHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "delete_inbox",
  "arguments": {
    "inbox_id": "inb_123"
  }
}

ความสามารถในการส่งถึง bounce และการระงับการส่ง

อ่านอย่างเดียว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}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "list_sender_reputation",
  "arguments": {}
}
อ่านอย่างเดียวlist_suppressions
GET /suppressions

แสดงรายการการระงับการส่ง

รายการระงับการส่ง (suppression list) ของเวิร์กสเปซ: ผู้รับที่ถูกบล็อกหลังเกิด bounce ถาวรหรือการร้องเรียนสแปม การส่งถึงผู้รับเหล่านี้ล้มเหลวด้วย 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}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "list_suppressions",
  "arguments": {}
}
ทำลายข้อมูลremove_suppression
DELETE /suppressions/:email

ลบการระงับการส่งจาก bounce

DESTRUCTIVE (ลดความเข้มของการบล็อกเพื่อความปลอดภัย): ลบการระงับการส่งจาก bounce เพื่อให้ส่งอีเมลถึงที่อยู่นั้นได้อีก ทำเมื่อมนุษย์ยืนยันว่าที่อยู่นั้นใช้งานได้แล้วเท่านั้น การระงับการส่งจาก complaint ลบไม่ได้ (409)

พารามิเตอร์ชนิดจำเป็นคำอธิบาย
emailstringใช่ที่อยู่ผู้รับที่ถูกระงับการส่ง (สูงสุด 320 ตัวอักษร)
ค่าที่คืน{ok: true}
AnnotationdestructiveHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "remove_suppression",
  "arguments": {
    "email": "fixed-mailbox@example.net"
  }
}
อ่านอย่างเดียวlist_blocked_recipients
GET /blocked-recipients

แสดงรายการผู้รับที่ถูกบล็อก

ทุกผู้รับที่ SendHQ จะปฏิเสธ: bounce, complaint และการยกเลิกการรับอีเมลการตลาดที่จำกัดตามโดเมน พร้อมสรุปตามประเภท อ่านสูงสุด 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}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "list_blocked_recipients",
  "arguments": {}
}

บัญชี การใช้งาน การวิเคราะห์ และคีย์

อ่านอย่างเดียว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}}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "get_account",
  "arguments": {}
}
อ่านอย่างเดียวget_analytics
GET /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}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "get_analytics",
  "arguments": {
    "days": 30
  }
}
อ่านอย่างเดียวlist_api_keys
GET /keys

แสดงรายการเมทาดาทาของ API key

แสดงรายการชื่อ API key คำนำหน้าที่ไม่เป็นความลับ และเวลาใช้งานล่าสุด อ่านอย่างเดียว: MCP server นี้สร้าง หมุนเวียน หรือเพิกถอนคีย์ไม่ได้ มนุษย์เป็นผู้ทำในแดชบอร์ด แบ่งหน้า: ผลลัพธ์มี 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}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ tools/call
{
  "name": "list_api_keys",
  "arguments": {}
}
อ่านอย่างเดียวget_service_health
GET /health

ตรวจสอบสถานะบริการ SendHQ

ตรวจสอบว่า SendHQ API ทำงานอยู่และผู้ให้บริการอีเมลรายใดใช้งานอยู่ ไม่ต้องใช้ API key ที่ถูกต้อง

ไม่มีพารามิเตอร์

ค่าที่คืน{ok, service, mailer}
AnnotationreadOnlyHint idempotentHint
ตัวอย่างพารามิเตอร์ของ 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ดึงป้ายกำกับด้วย ID หรือชื่อ
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ส่งสแนปชอตทดสอบ
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 ที่เป็นผู้มีอำนาจและโฮสต์แบบสัมพัทธ์ของเรคคอร์ด
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ลบการระงับการส่งจาก bounce ที่มีสิทธิ์
GET /blocked-recipientslist_blocked_recipientsแสดงรายการ bounce, complaint และการยกเลิกการรับ
GET /accountget_accountดึงข้อมูลบัญชี การใช้งาน สถานะการเรียกเก็บเงิน และจำนวนเวิร์กสเปซด้วย API key
GET /analyticsget_analyticsดึง analytics การส่งของแดชบอร์ดสำหรับ 7, 30 หรือ 90 วัน
GET /profileget_accountคู่แฝดแบบเซสชันเท่านั้นของ GET /account MCP server อ่านเส้นทางของ API-key
POST /billing/checkoutไม่เปิดให้ใช้การเปลี่ยนแปลงการเรียกเก็บเงินเป็นแบบเซสชันเท่านั้นโดยการออกแบบ และต้องให้เจ้าของบัญชีทำในแดชบอร์ด สถานะการเรียกเก็บเงินอ่านได้ด้วย get_account
POST /billing/cancelไม่เปิดให้ใช้การเปลี่ยนแปลงการเรียกเก็บเงินเป็นแบบเซสชันเท่านั้นโดยการออกแบบ และต้องให้เจ้าของบัญชีทำในแดชบอร์ด สถานะการเรียกเก็บเงินอ่านได้ด้วย get_account
POST /keysไม่เปิดให้ใช้ยกเว้นโดยเจตนา: เอเจนต์ต้องไม่สร้างหรือทำลายข้อมูลรับรอง มนุษย์เป็นผู้จัดการคีย์ในแดชบอร์ด
GET /keyslist_api_keysแสดงรายการเมทาดาทาของ API key
DELETE /keys/:idไม่เปิดให้ใช้ยกเว้นโดยเจตนา: เอเจนต์ต้องไม่สร้างหรือทำลายข้อมูลรับรอง มนุษย์เป็นผู้จัดการคีย์ในแดชบอร์ด

ไม่มีให้ใช้โดยเจตนา

ความสามารถEndpointเหตุผล
สร้าง หมุนเวียน เพิกถอน หรือลบ API keyPOST /keys, DELETE /keys/:idยกเว้นโดยเจตนา: เอเจนต์ต้องไม่สร้างหรือทำลายข้อมูลรับรอง มนุษย์เป็นผู้จัดการคีย์ในแดชบอร์ด
เริ่มการชำระเงินหรือยกเลิกการสมัครPOST /billing/checkout, POST /billing/cancelการเปลี่ยนแปลงการเรียกเก็บเงินเป็นแบบเซสชันเท่านั้นโดยการออกแบบ และต้องให้เจ้าของบัญชีทำในแดชบอร์ด สถานะการเรียกเก็บเงินอ่านได้ด้วย get_account
การตั้งค่า DNS แบบคลิกเดียวของ Cloudflare (OAuth)GET /api/dns/cloudflare/connectต้องใช้เซสชันเบราว์เซอร์แบบโต้ตอบและความยินยอม OAuth ของ Cloudflare ให้ใช้เรคคอร์ดจาก get_domain โฮสต์จาก get_dns_provider หรือ get_domain_connect_link แทน
สมัครใช้งาน เข้าสู่ระบบ ออกจากระบบ การเชื่อมโยงบัญชี Google/api/auth/*การยืนยันตัวตนผ่านเบราว์เซอร์สำหรับมนุษย์ MCP server ยืนยันตัวตนด้วย API key
แบบฟอร์มติดต่อซัพพอร์ตPOST /api/contactแบบฟอร์มสาธารณะบนเว็บไซต์การตลาดสำหรับมนุษย์ ไม่ใช่การดำเนินการของเวิร์กสเปซ

แค็ตตาล็อกที่เครื่องอ่านได้: /docs/mcp/tools.json (schema, annotation, การจับคู่ endpoint และรายการที่ยกเว้น) หน้านี้ฉบับ Markdown: /docs/mcp.md เมื่อติดตั้ง CLI แล้ว sendhq commands --format json จะพิมพ์แค็ตตาล็อกเดียวกัน