Verify a sender

POST/api/v1/senders/{sender}/verify
Requires anorganization API keywith the scopesenders:write

Parameters

NameInTypeDescription
senderrequiredpathstringThe sender identifier.

Request

POST/api/v1/senders/{sender}/verify
curl -X POST 'https://app.mailyte.com/api/v1/senders/01JBT8XQ2M9WYC3K4F6R7S8T9V/verify' \
  -H 'Authorization: Bearer mk_live_YOUR_API_KEY'
The key names its own organization, so no X-Organization-ID header is needed.

Response

Success.

  • dataobject

    The live verification picture for one sender: what DNS looks like right now and what is missing. **No verification token is published** — verification reads the domain's public DNS and there is no secret in this flow. A token that proves ownership of an address is a credential; if one is ever introduced it must not appear on a read endpoint.

    • objectstringsender_verification
    • sender_idstring

      The sender this picture describes. **null means UNKNOWN — the id was missing from the payload.** It never means the picture belongs to no sender: both endpoints build it from the sender they have just read, whose id is a NOT NULL primary key, so a null here would be our fault rather than a state a sender can be in.

    • statestringpending | verified | failed

      The same closed set, from the same function, that `GET /senders/{sender}` publishes under `verification.state`, so one sender cannot read `failed` on one endpoint and something else on the other. Note there is deliberately NO timestamp here: when a sender last verified is durable state and is published once, on the sender itself.

    • errorstring

      Why the last check failed. **null means NONE — there is no current failure**, which is the case whenever `state` is not `failed`. A stale error beside a `verified` state is the same contradiction as a stale timestamp beside a failure, and a successful check clears the stored string, so there is nothing withheld here.

    • checksobject

      The live DNS lookups, each genuinely true or false. There is no third "unknown" state to represent: these resolve the domain's published records, and a record that will not resolve has not been published. This is one of the few places in the API where `false` really does mean false rather than "not measured".

      • spfboolean
      • dkimboolean
      • dmarcboolean

        Reported, but never required — see `requires`.

    • requiresarray<string>

      Which of `checks` must pass for this sender to verify. NARROWER than `checks`: DMARC is checked and reported but is advisory, not a delivery gate. Published because a caller looking at three booleans would otherwise reasonably conclude all three must be true.

Returned inside the standard envelope.

Errors

StatusWhen
401The API key is missing, unknown, revoked or expired. All four answer identically, on purpose: distinguishing them would confirm which keys exist.
403The key is valid but may not do this: it lacks the required scope, its IP allowlist does not include you, or this endpoint does not accept API keys.
404No such resource in this organization.
422The request was understood but the values were not acceptable.
429Too many requests, or the organization has spent its sending allowance. `Retry-After` says how long to wait.

Every status, with what causes it and what to do, is on the error reference.