Domains
Register and verify sender domains (SPF, DKIM, DMARC)
9 endpoints
Endpoints
Method Path Description
GET /v1/domainsGET /v1/domains
POST /v1/domainsPOST /v1/domains - Register a new domain and generate DKIM keys
GET /v1/domains/{id}GET /v1/domains/:id
DELETE /v1/domains/{id}DELETE /v1/domains/:id
PUT /v1/domains/{id}/sending-subdomainPUT /v1/domains/:id/sending-subdomain - Change the sending subdomain
PUT /v1/domains/{id}/tracking-domainPUT /v1/domains/:id/tracking-domain — Set the vanity tracking domain.
DELETE /v1/domains/{id}/tracking-domainDELETE /v1/domains/:id/tracking-domain — Remove the vanity tracking domain.
POST /v1/domains/{id}/verifyPOST /v1/domains/:id/verify - Trigger DNS verification
POST /v1/domains/{id}/verify-trackingPOST /v1/domains/:id/verify-tracking — Verify the tracking domain CNAME.
GET /v1/domains
GET /v1/domains
Parameters
Name In Type Required Description
pagequery integerNo Page number (default: 1)
per_pagequery integerNo Items per page (default: 25)
Responses
Status Description
200 Paginated list of registered domains
401 Unauthorized
Example
cURL
TypeScript
Python
Rust
Go
curl -X GET https://api.euromail.dev/v1/domains \
-H "X-EuroMail-Api-Key: em_live_..."
import { EuroMail } from "@euromail/sdk" ;
const euromail = new EuroMail ({ apiKey: "em_live_..." });
const result = await euromail. listDomains ();
from euromail import EuroMail
client = EuroMail( api_key = "em_live_..." )
result = client.list_domains()
use euromail :: EuroMail ;
let client = EuroMail :: new ( "em_live_..." );
let result = client . list_domains () .await? ;
client := euromail. NewClient ( "em_live_..." )
result, err := client. ListDomains (ctx)
POST /v1/domains
POST /v1/domains - Register a new domain and generate DKIM keys
Request Body
Field Type Required Description
domainstringYes
Responses
Status Description
201 Domain registered with DNS records. The envelope is { data }, plus an optional warnings array of strings when the domain was accepted but something about it is worth flagging — currently a name that already carries the sending subdomain.
401 Unauthorized
409 Domain already registered
Example
cURL
TypeScript
Python
Rust
Go
curl -X POST https://api.euromail.dev/v1/domains \
-H "X-EuroMail-Api-Key: em_live_..." \
-H "Content-Type: application/json" \
-d '{ "domain": "example.com" }'
import { EuroMail } from "@euromail/sdk" ;
const euromail = new EuroMail ({ apiKey: "em_live_..." });
const result = await euromail. createDomain ({
domain: "example.com" ,
});
from euromail import EuroMail
client = EuroMail( api_key = "em_live_..." )
result = client.create_domain(
domain = "example.com" ,
)
use euromail :: EuroMail ;
let client = EuroMail :: new ( "em_live_..." );
let result = client . create_domain ( & CreateDomainParams {
domain : "example.com" . into (),
.. Default :: default ()
}) .await? ;
client := euromail. NewClient ( "em_live_..." )
result, err := client. CreateDomain (ctx, euromail . CreateDomainParams {
Domain: "example.com" ,
})
GET /v1/domains/{id}
GET /v1/domains/:id
Parameters
Name In Type Required Description
idpath stringYes Domain ID
Responses
Status Description
200 Domain details
401 Unauthorized
404 Domain not found
Example
cURL
TypeScript
Python
Rust
Go
curl -X GET https://api.euromail.dev/v1/domains/{id} \
-H "X-EuroMail-Api-Key: em_live_..."
import { EuroMail } from "@euromail/sdk" ;
const euromail = new EuroMail ({ apiKey: "em_live_..." });
const result = await euromail. getDomain ( "id_..." );
from euromail import EuroMail
client = EuroMail( api_key = "em_live_..." )
result = client.get_domain( "id_..." )
use euromail :: EuroMail ;
let client = EuroMail :: new ( "em_live_..." );
let result = client . get_domain ( "id_..." ) .await? ;
client := euromail. NewClient ( "em_live_..." )
result, err := client. GetDomain (ctx, "id_..." )
DELETE /v1/domains/{id}
DELETE /v1/domains/:id
Parameters
Name In Type Required Description
idpath stringYes Domain ID
Responses
Status Description
204 Domain deleted
401 Unauthorized
404 Domain not found
Example
cURL
TypeScript
Python
Rust
Go
curl -X DELETE https://api.euromail.dev/v1/domains/{id} \
-H "X-EuroMail-Api-Key: em_live_..."
import { EuroMail } from "@euromail/sdk" ;
const euromail = new EuroMail ({ apiKey: "em_live_..." });
const result = await euromail. deleteDomain ( "id_..." );
from euromail import EuroMail
client = EuroMail( api_key = "em_live_..." )
result = client.delete_domain( "id_..." )
use euromail :: EuroMail ;
let client = EuroMail :: new ( "em_live_..." );
let result = client . delete_domain ( "id_..." ) .await? ;
client := euromail. NewClient ( "em_live_..." )
result, err := client. DeleteDomain (ctx, "id_..." )
PUT /v1/domains/{id}/sending-subdomain
PUT /v1/domains/:id/sending-subdomain - Change the sending subdomain
Parameters
Name In Type Required Description
idpath stringYes Domain ID
Request Body
Field Type Required Description
sending_subdomainstringYes
Responses
Status Description
200 Sending subdomain updated, DNS records regenerated
401 Unauthorized
404 Domain not found
422 Invalid subdomain
Example
cURL
TypeScript
Python
Rust
Go
curl -X PUT https://api.euromail.dev/v1/domains/{id}/sending-subdomain \
-H "X-EuroMail-Api-Key: em_live_..." \
-H "Content-Type: application/json" \
-d '{ "sending_subdomain": "example.com" }'
import { EuroMail } from "@euromail/sdk" ;
const euromail = new EuroMail ({ apiKey: "em_live_..." });
const result = await euromail. getDomainDetail ({
sending_subdomain: "example.com" ,
});
from euromail import EuroMail
client = EuroMail( api_key = "em_live_..." )
result = client.get_domain_detail(
sending_subdomain = "example.com" ,
)
use euromail :: EuroMail ;
let client = EuroMail :: new ( "em_live_..." );
let result = client . get_domain_detail ( & GetDomainDetailParams {
sending_subdomain : "example.com" . into (),
.. Default :: default ()
}) .await? ;
client := euromail. NewClient ( "em_live_..." )
result, err := client. GetDomainDetail (ctx, euromail . GetDomainDetailParams {
SendingSubdomain: "example.com" ,
})
PUT /v1/domains/{id}/tracking-domain
PUT /v1/domains/:id/tracking-domain — Set the vanity tracking domain.
Parameters
Name In Type Required Description
idpath stringYes Domain ID
Request Body
Field Type Required Description
tracking_domainstringYes
Responses
Status Description
200 Tracking domain set
401 Unauthorized
404 Domain not found
409 Tracking domain already in use
Example
cURL
TypeScript
Python
Rust
Go
curl -X PUT https://api.euromail.dev/v1/domains/{id}/tracking-domain \
-H "X-EuroMail-Api-Key: em_live_..." \
-H "Content-Type: application/json" \
-d '{ "tracking_domain": "example.com" }'
import { EuroMail } from "@euromail/sdk" ;
const euromail = new EuroMail ({ apiKey: "em_live_..." });
const result = await euromail. getDomainDetail ({
tracking_domain: "example.com" ,
});
from euromail import EuroMail
client = EuroMail( api_key = "em_live_..." )
result = client.get_domain_detail(
tracking_domain = "example.com" ,
)
use euromail :: EuroMail ;
let client = EuroMail :: new ( "em_live_..." );
let result = client . get_domain_detail ( & GetDomainDetailParams {
tracking_domain : "example.com" . into (),
.. Default :: default ()
}) .await? ;
client := euromail. NewClient ( "em_live_..." )
result, err := client. GetDomainDetail (ctx, euromail . GetDomainDetailParams {
TrackingDomain: "example.com" ,
})
DELETE /v1/domains/{id}/tracking-domain
DELETE /v1/domains/:id/tracking-domain — Remove the vanity tracking domain.
Parameters
Name In Type Required Description
idpath stringYes Domain ID
Responses
Status Description
200 Tracking domain removed
401 Unauthorized
404 Domain not found
Example
cURL
TypeScript
Python
Rust
Go
curl -X DELETE https://api.euromail.dev/v1/domains/{id}/tracking-domain \
-H "X-EuroMail-Api-Key: em_live_..."
import { EuroMail } from "@euromail/sdk" ;
const euromail = new EuroMail ({ apiKey: "em_live_..." });
const result = await euromail. getDomainDetail ( "id_..." );
from euromail import EuroMail
client = EuroMail( api_key = "em_live_..." )
result = client.get_domain_detail( "id_..." )
use euromail :: EuroMail ;
let client = EuroMail :: new ( "em_live_..." );
let result = client . get_domain_detail ( "id_..." ) .await? ;
client := euromail. NewClient ( "em_live_..." )
result, err := client. GetDomainDetail (ctx, "id_..." )
POST /v1/domains/{id}/verify
POST /v1/domains/:id/verify - Trigger DNS verification
Parameters
Name In Type Required Description
idpath stringYes Domain ID
Responses
Status Description
200 DNS verification results
401 Unauthorized
404 Domain not found
Example
cURL
TypeScript
Python
Rust
Go
curl -X POST https://api.euromail.dev/v1/domains/{id}/verify \
-H "X-EuroMail-Api-Key: em_live_..."
import { EuroMail } from "@euromail/sdk" ;
const euromail = new EuroMail ({ apiKey: "em_live_..." });
const result = await euromail. verifyDomain ( "id_..." );
from euromail import EuroMail
client = EuroMail( api_key = "em_live_..." )
result = client.verify_domain( "id_..." )
use euromail :: EuroMail ;
let client = EuroMail :: new ( "em_live_..." );
let result = client . verify_domain ( "id_..." ) .await? ;
client := euromail. NewClient ( "em_live_..." )
result, err := client. VerifyDomain (ctx, "id_..." )
POST /v1/domains/{id}/verify-tracking
POST /v1/domains/:id/verify-tracking — Verify the tracking domain CNAME.
Parameters
Name In Type Required Description
idpath stringYes Domain ID
Responses
Status Description
200 Tracking domain verification result
401 Unauthorized
404 Domain not found
422 No tracking domain configured
Example
cURL
TypeScript
Python
Rust
Go
curl -X POST https://api.euromail.dev/v1/domains/{id}/verify-tracking \
-H "X-EuroMail-Api-Key: em_live_..."
import { EuroMail } from "@euromail/sdk" ;
const euromail = new EuroMail ({ apiKey: "em_live_..." });
const result = await euromail. getDomainDetail ( "id_..." );
from euromail import EuroMail
client = EuroMail( api_key = "em_live_..." )
result = client.get_domain_detail( "id_..." )
use euromail :: EuroMail ;
let client = EuroMail :: new ( "em_live_..." );
let result = client . get_domain_detail ( "id_..." ) .await? ;
client := euromail. NewClient ( "em_live_..." )
result, err := client. GetDomainDetail (ctx, "id_..." )