Skip to content

Questions · Published 2026-10-21 · Updated 2026-10-21 · AgentiSend

How do I hold suspicious email until a person reviews it?

Hold suspicious email until a person reviews it by setting inbound_hold_mode to hold, so email.received waits.

Hold suspicious email until a person reviews it by setting inbound_hold_mode to hold, so email.received waits. The row is stored with held true, and email.received.held fires instead.

The switch

PATCH /domains/{id} sets inbound_hold_mode. monitor is the default: the message is stored and email.received fires with the label on it. hold applies to a review message. A clear message still fires email.received.

curl -sS -X PATCH https://api.agentisend.com/domains/9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42 \
  -H "Authorization: Bearer $AGENTISEND_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{}'
200
{
  "capabilities": {
    "receiving": "enabled",
    "sending": "enabled"
  },
  "click_tracking": false,
  "created_at": "2026-09-04T09:14:00.000Z",
  "dkim_selector": "example",
  "id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
  "inbound_hold_mode": "monitor",
  "inbound_policy": "open",
  "inbound_refused_count": -9007199254740991,
  "name": "example",
  "object": "domain",
  "open_tracking": false,
  "provider_hints": {
    "cloudflare": "example",
    "godaddy": "example",
    "namecheap": "example",
    "route53": "example"
  },
  "recent_events": [],
  "records": [],
  "region": "us",
  "return_path_subdomain": "example",
  "status": "pending",
  "tls_mode": "opportunistic",
  "tracking_issues": [],
  "tracking_subdomain": "example",
  "verified_at": "2026-09-04T09:14:00.000Z",
  "warnings": [],
  "zone": "example"
}
Response

While it waits

GET /emails/receiving with held set to true lists the waiting rows. GET /agent-actions includes them with kind inbound_release. GET /emails/receiving/{id} still returns the message to the account that owns it. An inbox read over the agent connection leaves held messages out unless include_held is true.

Release

POST /emails/receiving/{id}/release takes a reason. email.received fires once. A second release does not send it again. The reason stays on the audit row. What review is checking for is How do I stop prompt injection in email my agent reads?.

curl -sS -X POST https://api.agentisend.com/emails/receiving/9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42/release \
  -H "Authorization: Bearer $AGENTISEND_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"reason":"example"}'
200
{
  "attachment_count": -9007199254740991,
  "attachments": [],
  "bcc": [],
  "cc": [],
  "created_at": "2026-09-04T09:14:00.000Z",
  "extracted_html": "example",
  "extracted_text": "example",
  "from": "example",
  "headers": {},
  "held": false,
  "html": "example",
  "id": "9c8f8f0e-3d1a-4d3f-9a1e-2b7c1a0f5e42",
  "inbound_verdict": {
    "reasons": [],
    "verdict": "clear"
  },
  "message_id": "example",
  "object": "email",
  "reasons": [],
  "received_at": "2026-09-04T09:14:00.000Z",
  "received_for": [],
  "reply_to": [],
  "size_bytes": -9007199254740991,
  "subject": "example",
  "text": "example",
  "to": "example",
  "verdict": "clear"
}
Response

Next

Written by the AgentiSend team.