Mail · API reference
Domains
A sending domain is a domain you send email from. Add it, create the DNS records it lists, then verify it. Your plan sets how many (Plans and limits). The sending domains guide explains each record.
Endpoints
https://services.my-beast.com/mail/api/email/v1
The domain object
A sending domain and the DNS records it needs.
Fields
idstringUnique ID, starting with
dom_.namestringThe domain, such as
acme.comormail.acme.com.statusstringpending,verifiedorfailed. You can only send fromverifieddomains. See Domain statuses.recordsarray of objectsThe DNS records to create at your DNS provider.
purposestringspf,dkimordmarc.typestringMXorTXT.namestringThe full record name, such as
mb1._domainkey.acme.com. Some DNS providers want only the part before your domain.valuestringThe record's content. Copy it exactly.
priorityinteger or nullThe priority of an
MXrecord.nullforTXTrecords.requiredbooleantruefor the SPF and DKIM records. The DMARC record is recommended, but not needed to verify.statusstringverifiedif the last check found the record with this value, otherwisemissing. For DMARC, any valid DMARC record counts, so you can keep the one you have.
created_atstringWhen the domain was added (ISO 8601, UTC).
checked_atstring or nullWhen we last checked its DNS records (ISO 8601, UTC).
nullbefore the first check.
{
"id": "dom_01JA2N5Q7RB3XK",
"name": "acme.com",
"status": "verified",
"records": [
{
"purpose": "spf",
"type": "MX",
"name": "mb-bounces.acme.com",
"value": "bounces.my-beast.com",
"priority": 10,
"required": true,
"status": "verified"
},
{
"purpose": "spf",
"type": "TXT",
"name": "mb-bounces.acme.com",
"value": "v=spf1 include:_spf.my-beast.com ~all",
"priority": null,
"required": true,
"status": "verified"
},
{
"purpose": "dkim",
"type": "TXT",
"name": "mb1._domainkey.acme.com",
"value": "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1x…IDAQAB",
"priority": null,
"required": true,
"status": "verified"
},
{
"purpose": "dmarc",
"type": "TXT",
"name": "_dmarc.acme.com",
"value": "v=DMARC1; p=none;",
"priority": null,
"required": false,
"status": "verified"
}
],
"created_at": "2026-10-09T08:52:41Z",
"checked_at": "2026-10-09T09:03:17Z"
}Domain statuses
| Status | Meaning |
|---|---|
pending | Added, and waiting for the required DNS records. We check every 15 minutes for 72 hours. |
verified | The required records are in place. You can send from this domain. |
failed | We didn't find the required records within 72 hours, or a daily check found one missing. Fix the records and verify again. |
We also check verified domains once a day. Emails from a domain that isn't verified are refused with domain_not_verified.
Add a domain
POST/domains
Adds a sending domain and returns the DNS records to create. It starts as pending; we check its records every 15 minutes for 72 hours, or you can verify it yourself.
Body
namestringrequiredA domain or subdomain you control, such as
acme.comormail.acme.com. Withouthttps://or a path, up to 253 characters. Each subdomain counts as its own domain.
Response
200 OK. The new domain object.
Errors
- 403
test_keyThe key is a test inbox's (mb_test_…). These endpoints take a live key. - 403
domain_limit_reachedYour plan's sending domains are all in use. - 409
domain_existsThis domain is already on your plan. - 422
validation_errornameis missing or isn't a valid domain.
Any endpoint can also return the common errors.
Request
curl -X POST https://services.my-beast.com/mail/api/email/v1/domains \
-H "Authorization: Bearer $MYBEAST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "acme.com"
}'Response
{
"id": "dom_01JA2N5Q7RB3XK",
"name": "acme.com",
"status": "pending",
"records": [
{
"purpose": "spf",
"type": "MX",
"name": "mb-bounces.acme.com",
"value": "bounces.my-beast.com",
"priority": 10,
"required": true,
"status": "missing"
},
{
"purpose": "spf",
"type": "TXT",
"name": "mb-bounces.acme.com",
"value": "v=spf1 include:_spf.my-beast.com ~all",
"priority": null,
"required": true,
"status": "missing"
},
{
"purpose": "dkim",
"type": "TXT",
"name": "mb1._domainkey.acme.com",
"value": "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1x…IDAQAB",
"priority": null,
"required": true,
"status": "missing"
},
{
"purpose": "dmarc",
"type": "TXT",
"name": "_dmarc.acme.com",
"value": "v=DMARC1; p=none;",
"priority": null,
"required": false,
"status": "missing"
}
],
"created_at": "2026-10-09T08:52:41Z",
"checked_at": null
}List domains
GET/domains
Returns your sending domains, newest first.
Query parameters
limitintegeroptionalHow many to return, from 1 to 100. Default 20.
afterstringoptionalThe ID of the last domain on the previous page. Leave it out for the first page. See Pagination.
Response
200 OK. A page of domain objects.
Errors
- 403
test_keyThe key is a test inbox's (mb_test_…). These endpoints take a live key. - 422
validation_errorlimitis out of range, orafterisn't a domain in this list.
Any endpoint can also return the common errors.
Request
curl https://services.my-beast.com/mail/api/email/v1/domains \
-H "Authorization: Bearer $MYBEAST_API_KEY"Response
{
"data": [
{
"id": "dom_01JA2N5Q7RB3XK",
"name": "acme.com",
"status": "verified",
"records": [
{
"purpose": "spf",
"type": "MX",
"name": "mb-bounces.acme.com",
"value": "bounces.my-beast.com",
"priority": 10,
"required": true,
"status": "verified"
},
{
"purpose": "spf",
"type": "TXT",
"name": "mb-bounces.acme.com",
"value": "v=spf1 include:_spf.my-beast.com ~all",
"priority": null,
"required": true,
"status": "verified"
},
{
"purpose": "dkim",
"type": "TXT",
"name": "mb1._domainkey.acme.com",
"value": "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1x…IDAQAB",
"priority": null,
"required": true,
"status": "verified"
},
{
"purpose": "dmarc",
"type": "TXT",
"name": "_dmarc.acme.com",
"value": "v=DMARC1; p=none;",
"priority": null,
"required": false,
"status": "verified"
}
],
"created_at": "2026-10-09T08:52:41Z",
"checked_at": "2026-10-09T09:03:17Z"
}
],
"has_more": false
}Retrieve a domain
GET/domains/{id}
Returns a sending domain with its DNS records and their status.
Path parameters
idstringrequiredThe domain's ID.
Response
200 OK. The domain object.
Errors
- 403
test_keyThe key is a test inbox's (mb_test_…). These endpoints take a live key. - 404
not_foundNo domain on your plan has this ID.
Any endpoint can also return the common errors.
Request
curl https://services.my-beast.com/mail/api/email/v1/domains/dom_01JA2N5Q7RB3XK \
-H "Authorization: Bearer $MYBEAST_API_KEY"Response
{
"id": "dom_01JA2N5Q7RB3XK",
"name": "acme.com",
"status": "verified",
"records": [
{
"purpose": "spf",
"type": "MX",
"name": "mb-bounces.acme.com",
"value": "bounces.my-beast.com",
"priority": 10,
"required": true,
"status": "verified"
},
{
"purpose": "spf",
"type": "TXT",
"name": "mb-bounces.acme.com",
"value": "v=spf1 include:_spf.my-beast.com ~all",
"priority": null,
"required": true,
"status": "verified"
},
{
"purpose": "dkim",
"type": "TXT",
"name": "mb1._domainkey.acme.com",
"value": "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1x…IDAQAB",
"priority": null,
"required": true,
"status": "verified"
},
{
"purpose": "dmarc",
"type": "TXT",
"name": "_dmarc.acme.com",
"value": "v=DMARC1; p=none;",
"priority": null,
"required": false,
"status": "verified"
}
],
"created_at": "2026-10-09T08:52:41Z",
"checked_at": "2026-10-09T09:03:17Z"
}Verify a domain
POST/domains/{id}/verify
Checks the domain's DNS records now and returns the result. Use it once you've created the records, instead of waiting for the next automatic check. The request has no body.
- If every required record is found, the status becomes
verified. If not, apendingdomain stayspending, and averifiedorfaileddomain becomesfailed.
Path parameters
idstringrequiredThe domain's ID.
Response
200 OK. The domain object after the check.
Errors
- 403
test_keyThe key is a test inbox's (mb_test_…). These endpoints take a live key. - 404
not_foundNo domain on your plan has this ID.
Any endpoint can also return the common errors.
Request
curl -X POST https://services.my-beast.com/mail/api/email/v1/domains/dom_01JA2N5Q7RB3XK/verify \
-H "Authorization: Bearer $MYBEAST_API_KEY"Response
{
"id": "dom_01JA2N5Q7RB3XK",
"name": "acme.com",
"status": "verified",
"records": [
{
"purpose": "spf",
"type": "MX",
"name": "mb-bounces.acme.com",
"value": "bounces.my-beast.com",
"priority": 10,
"required": true,
"status": "verified"
},
{
"purpose": "spf",
"type": "TXT",
"name": "mb-bounces.acme.com",
"value": "v=spf1 include:_spf.my-beast.com ~all",
"priority": null,
"required": true,
"status": "verified"
},
{
"purpose": "dkim",
"type": "TXT",
"name": "mb1._domainkey.acme.com",
"value": "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1x…IDAQAB",
"priority": null,
"required": true,
"status": "verified"
},
{
"purpose": "dmarc",
"type": "TXT",
"name": "_dmarc.acme.com",
"value": "v=DMARC1; p=none;",
"priority": null,
"required": false,
"status": "verified"
}
],
"created_at": "2026-10-09T08:52:41Z",
"checked_at": "2026-10-09T09:03:17Z"
}Delete a domain
DELETE/domains/{id}
Removes a sending domain and frees its place on your plan. You can't send from it any more. Emails from it that are already queued are still sent, and their logs are kept.
Path parameters
idstringrequiredThe domain's ID.
Response
200 OK. The domain's ID and deleted: true.
Errors
- 403
test_keyThe key is a test inbox's (mb_test_…). These endpoints take a live key. - 404
not_foundNo domain on your plan has this ID.
Any endpoint can also return the common errors.
Request
curl -X DELETE https://services.my-beast.com/mail/api/email/v1/domains/dom_01JA2N5Q7RB3XK \
-H "Authorization: Bearer $MYBEAST_API_KEY"Response
{
"id": "dom_01JA2N5Q7RB3XK",
"deleted": true
}