List sending domains
GET
https://emails.routeon.io/api/v1/domains
Parameters
cursor
string
query
Opaque cursor taken from `meta.cursor` of the previous page; without it the first page is returned. A value that cannot be read as a cursor, an empty value or a repeated parameter is rejected with 422 `VALIDATION_ERROR`, field `cursor`, message `Invalid cursor`.
per_page
integer
query
Page size; 50 when absent. Digits only, an integer from 1 to 200; leading zeros are allowed (`050` is 50). Zero, a negative, fractional or exponent value, surrounding spaces, a value above 200, an empty value or a repeated parameter is rejected with 422 `VALIDATION_ERROR`, field `per_page`; the value is never clamped or replaced.
Responses
200
OK
401
Missing/invalid credentials. When meta.details is present, its code is one of: missing_authorization_header (no/malformed Authorization header), jwt_invalid (expired or otherwise invalid JWT), api_key_unknown (unknown prefix, inactive/revoked key, or bad hash), api_key_expired (the API key's expiry time has passed).
422
Body/query/params failed validation. meta.reason=VALIDATION_ERROR, meta.validation_error[] carries {field, message} per failure ('' field = show the message as-is). A request that parsed but broke a schema rule answers 422. An id in the path, or in the query of an operation that does not take `cursor` and `per_page`, that is not a UUID is rejected with 400 VALIDATION_ERROR before the request is handled. Every query parameter of a list that takes `cursor` and `per_page` (including id filters) is checked before any data is read and answers 422 with that parameter as the field: an invalid, empty or repeated value, or a text value containing the NUL character; unknown parameters are ignored. Sender resolution reports through meta.details.code: invalid_from_address (the `from` string is not `local@domain` or `Name <local@domain>`), from_domain_mismatch (its domain is not a verified domain of the tenant), sender_not_configured (the local part of `from` matches no sender profile of the tenant, or, without `from`, no route and no default profile resolves for this send) and sender_not_found (the referenced profile id is unknown to the tenant). A send with neither `domain_id` nor `from` reports through meta.validation_error (field `domain_id`), not meta.details.code; so do `send_at` failures (field `send_at`, message `send_at_too_far` or `send_at_invalid`). content_moderation_rejected: POST /transactional/send and /transactional/send-batch verify the template's active version before accepting the send, and a rejected verdict fails the request. The same applies to ready-made `subject`/`html`/`text` content. The check cannot be switched off. content_too_large: ready-made content is within the size limits but too big for the moderation check (`details.code`). `html` plus `text` over 4 MB is a plain VALIDATION_ERROR with meta.validation_error field `html`. invalid_variable: a variable name is reserved (`unsubscribe_url`, `this`, `constructor`, `prototype`, or any name starting with `@` or `__`), or `custom` is not an object of strings; the offending name is in `validation_error`. A send that carries both `template_id` and content, or neither, or content with an empty `subject` or with neither `html` nor `text`, is 422 `VALIDATION_ERROR`. new_account_daily_limit_exceeded: POST /campaigns/{id}/send for a new account whose audience exceeds its reduced daily cap (meta.details.limit, needed); it can never fit, so a scheduled launch goes back to draft. throttle_per_hour_too_high: POST /campaigns and PATCH /campaigns/{id} with `throttle_per_hour` above the platform ceiling (meta.validation_error field `throttle_per_hour`, meta.details.max carries the ceiling). PATCH /domains/{id}/warmup accepts only `{state}`; any other property, including `today_cap_override`, or an empty body is 422.
Example response · 200
{
"status": "success",
"http_code": 0,
"payload": [
{
"id": "00000000-0000-0000-0000-000000000000",
"domain": "string",
"status": "pending_dns",
"provider": [],
"dkim_selector": "string",
"warmup_enabled": true,
"dns_records": [
{
"record": "SPF",
"type": "TXT",
"host": "string",
"value": "string",
"priority": 0,
"mandatory": true
}
],
"verified_at": "2024-01-01T00:00:00Z",
"reputation_verdict": "pass",
"reputation_reasons": [
{
"check": "string",
"code": "string",
"detail": "string"
}
],
"reputation_checked_at": "2024-01-01T00:00:00Z",
"created_at": "2024-01-01T00:00:00Z"
}
],
"meta": {
"per_page": 0,
"total": 0,
"cursor": "string"
}
}
Example response · 401
{
"status": "error",
"http_code": 0,
"payload": [],
"meta": {
"reason": "VALIDATION_ERROR",
"validation_error": [
{
"field": "string",
"message": "string"
}
],
"details": []
}
}
Example response · 422
{
"status": "error",
"http_code": 0,
"payload": [],
"meta": {
"reason": "VALIDATION_ERROR",
"validation_error": [
{
"field": "string",
"message": "string"
}
],
"details": []
}
}