Verify a single email address as a sender when you cannot verify the whole domain
A sender is a single verified email address. Use it when you need to send from one address on a domain whose DNS you do not control, such as you@gmail.com or alerts@corp-it-owns-this.com. Verification is done by clicking a link in an email that SES sends to the address.
If you control the domain's DNS, verify the domain instead; it covers every address at that domain and gives you DKIM alignment, which materially helps deliverability.
POST /v1/send/senders/verify with the address.GET /v1/send/senders/{id}/status (or check the dashboard) until status is verified.Mail sent from a verified single address is signed with SES's own DKIM key, not one aligned to your domain. Inbox placement is typically fine for low-volume transactional mail but is not as strong as a verified domain.
status | Meaning |
|---|---|
pending | Verification email sent; link not yet clicked. |
verified | Link clicked. The address can send. |
expired | 24 hours passed without a click. Request a new email with the verify endpoint. |
failed | SES rejected the identity. Rare; contact support. |
approvalStatus | Meaning |
|---|---|
approved | Sending is allowed. Set automatically when the verification link is clicked; there is no manual review. |
pending_approval | Only seen when the address tripped an automated abuse check (for example a local part that impersonates a well-known brand) and is held for a person to look at. You receive an email when it is decided. |
rejected | Sending from this address is blocked. |
A new account can send as soon as its first sender is verified, but starts in a 72-hour probation: 50 emails per hour, 200 per day, and at most 25 distinct recipient domains per hour (20 / 100 / 10 for 7 days when the signup looks higher-risk). Exceeding a cap returns 429 probation_limit_reached with resetsAt; early bounces or a complaint pause sending automatically. The caps lift on their own after a clean probation window. See Rate limits for the full table and Domains for how to read your account's trustStage.
/v1/send/sendersList every single-address sender on the account.
statusstringpendingverifiedexpiredfailed{
"emailIdentities": [
{
"id": "snd_9q4wzk17c2m8x",
"email": "alerts@example.com",
"status": "verified",
"approvalStatus": "approved",
"isActive": true,
"verificationSentAt": 1756900000000,
"verifiedAt": 1756900420000,
"createdAt": 1756900000000
}
],
"count": 1
}/v1/send/senders/verifySend a verification email to the address. Calling it again for a pending address re-sends the email (at most once every five minutes).
emailstringrequiredcurl -X POST https://api.do.dev/v1/send/senders/verify \
-H "Authorization: Bearer $SEND_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "alerts@example.com"}'{
"id": "snd_9q4wzk17c2m8x",
"email": "alerts@example.com",
"status": "pending",
"message": "Verification email sent. Please check your inbox and click the verification link.",
"expiresIn": "24 hours"
}If the address was already verified with SES (for example, on another account you control), the response is 200 with status: "verified" and no email is sent.
/v1/send/senders/{id}/statusReturn the current status, checking SES if the address is still pending.
{
"id": "snd_9q4wzk17c2m8x",
"email": "alerts@example.com",
"status": "verified",
"approvalStatus": "approved",
"isActive": true,
"verifiedAt": 1756900420000
}/v1/send/senders/{id}Remove the sender. Sends from this address fail immediately with sender_not_verified.
{
"id": "snd_9q4wzk17c2m8x",
"email": "alerts@example.com",
"deleted": true
}Whether you send from a verified domain or a verified address, the from.name you set on each email is checked against a list of well-known brands. A From like "PayPal" <alerts@example.com> is rejected with 403 sender_not_verified even though the address is verified. Use a name that matches who you are.