Per-link anti-fraud results for one template version

GET https://emails.routeon.io/api/v1/templates/{id}/versions/{version}/links

Returns what the last Verify stored for this version's links. Cache-only: it never re-crawls, so it is safe to load on every editor open — press Verify to get a new answer. status is the stored links status, as recorded by that run: stored verdicts do not expire, so nothing here changes on its own between two Verify presses. not_verified means no run was ever stored, which is different from a run that found no links (approved with extracted_count: 0). This is a warning surface, not a gate: it reports what is stored even where a link verdict does not take part in activation, and answers not_verified with an empty list only when nothing was ever stored for the version.

Parameters

id string<uuid> required path
version integer required path

Responses

200 Stored link results for the requested version
404 Resource not found within tenant scope
422 Body/query/params failed validation. meta.reason=VALIDATION_ERROR, meta.validation_error[] carries {field, message} per failure ('' field = show the message as-is). Always 422 — a request that parsed but broke a rule is never 400. 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), domain_required (neither `domain_id` nor `from` was given), sender_not_configured (no route and no default profile resolves for this send) and sender_not_found (the referenced profile id is unknown to the tenant). 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 check cannot be switched off.

Example response · 200

{
    "status": "success",
    "http_code": 0,
    "payload": {
        "status": "not_verified",
        "reason": "string",
        "links": [
            {
                "url": "string",
                "status": "pending",
                "stage": "skipped",
                "reason": "string"
            }
        ],
        "extracted_count": 0,
        "links_truncated": true,
        "links_set_truncated_by": "deadline"
    },
    "meta": []
}

Example response · 404

{
    "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": []
    }
}