Search the docs
Find a page, a section, or an endpoint.
Sending mail
From addresses, threading, attachments, and what gets refused.
from has to be an address you own, and in_reply_to keeps the conversation
together. Sends go through the same abuse checks and the same daily cap as the
web composer — there is one set of rules, and the API is not a way around it.
Send a reply
curl https://pidgeon.ai/api/v1/messages -H "Authorization: Bearer $PIDGEON_API_KEY" -H "Content-Type: application/json" -d '{
"from": "hello@yourdomain.com",
"to": "billing@supplier.com",
"subject": "Re: Invoice 4417",
"text": "Received, thank you.",
"in_reply_to": "msg_8f21c"
}'in_reply_to sets the In-Reply-To and References headers, which is what
makes the reply land in the same conversation in the recipient's client as
well as in yours.
Rejected, not raised
Recipients that fail a check come back in rejected with a reason, and the
rest are sent. A suppressed address, a domain that does not resolve, or a
recipient over a limit does not lose the other four.
{
"data": {
"id": "msg_a91f4…",
"thread_id": "thr_31ba9…",
"rejected": [{ "address": "gone@example.com", "reason": "suppressed" }]
}
}An address that hard-bounced or reported spam is suppressed automatically and stays suppressed until it is cleared. Sending to it again is refused rather than attempted, because the reputation cost falls on the domain rather than on the message.
What limits a send
Three things, and the effective limit is the lowest of them: your plan's daily allowance, the account's trust tier, and the per-minute API rate limit. A new domain starts with a small allowance and earns its way up as its mail is delivered and read — nobody can make a new domain trustworthy overnight, and a large limit on day one is a reputation burnt on day two.
Attachments
Send them by URL or by base64 content. Both count against the per-message total on your plan, and anything over it is refused before the message is built rather than truncated after.