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"
}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"
}Next
- Email for AI agents
- What does inbound_verdict review mean?
- How do I stop prompt injection in email my agent reads?
Written by the AgentiSend team.