Skip to content

Agent identity check ​

Inspect a public agent credential or agent card and see, separately, who signed it, who it says operates the agent, whether that operator controls the claimed domain, whether a legal entity was validated, and the current status of each key, each with the time it was checked and how long the result stays fresh. Optionally run a live key-possession challenge.

The claim that a vendor operates an agent, a domain-control check and legal-entity vetting are different assertions. The check never merges them into one "verified" badge.

Console: https://sectigoaxiom.com/tools/identity-check (no account needed).

Run a check ​

POST /v1/public/identity-check with one of:

FieldWhat it is
agent_cardAn agent card as inline JSON, or an Axiom-signed card.
urlAn https URL to fetch the card from.
jwkA bare public JWK (EC P-256 or OKP Ed25519). Private key material (d) is refused.
refreshOptional true to ignore a cached result and check again.
sh
curl -sS https://api.sectigoaxiom.com/v1/public/identity-check \
  -H 'content-type: application/json' \
  -d '{"url":"https://agents.example.com/.well-known/agent-card.json"}'

Read the result ​

json
{
  "id": "chk_01…",
  "checked_at": "2026-11-15T10:02:11.000Z",
  "fresh_until": "2026-11-15T10:17:11.000Z",
  "cached": false,
  "subject": { "kind": "agent_card", "url": "https://agents.example.com/.well-known/agent-card.json" },
  "issuer": { "name": "Example Agents Ltd", "kind": "self_declared", "verified": false },
  "operator": {
    "claimed": {
      "result": "claimed",
      "value": "Example Agents Ltd",
      "source": "self_declared",
      "checked_at": "…",
      "fresh_until": null,
      "detail": "…"
    },
    "domain_control": {
      "result": "verified",
      "value": "example.com",
      "source": "https_origin",
      "checked_at": "…",
      "fresh_until": "…",
      "detail": "…"
    },
    "legal_entity": { "result": "not_validated", "value": null, "source": "none", "checked_at": "…", "fresh_until": null, "detail": "…" }
  },
  "self_declared": { "…": "fields the card asserts about itself" },
  "keys": [{ "kid": "…", "status": "unknown", "source": "self_declared", "checked_at": "…" }],
  "evidence": [{ "kind": "card_fetch", "result": "fetched", "checked_at": "…", "detail": "…" }]
}
AssertionPossible resultsWhat it proves
issuerkind: axiom, self_declared, noneWho signed or published the card. verified: true only for a valid Axiom signature.
operator.claimedclaimed, absentWhat the card says. Always self-declared.
operator.domain_controlverified, mismatch, not_found, not_verified, not_checkedThe card is served over HTTPS from the claimed domain (or matches the card at its well-known location, /.well-known/agent-card.json or /.well-known/agent.json), or the domain is a verified domain of a Sectigo-validated organisation.
operator.legal_entityvalidated, validated_stale, not_validatedOnly validated when an Axiom-signed card binds the agent to an organisation Sectigo validated, with the evidence time and its freshness bound.
keys[].statusactive, rotating, revoked, expired, suspended, retired, unknownRead live from Axiom's credential records (source: axiom); unknown when Axiom has never seen the key. Certificate status is checked with the CA where one exists.

Verifying a signature and establishing a key's current status are separate: the result reports both.

Freshness and caching ​

A result is stored and reused until fresh_until (at most 15 minutes, shorter if any evidence expires sooner); cached: true says you got a stored result. Pass refresh: true to check again. Every result can be linked from a review:

sh
curl -sS https://api.sectigoaxiom.com/v1/public/identity-check/chk_01…

The stored result is returned with stale: true once fresh_until has passed.

Live key-possession challenge ​

A card can list a key that the live agent does not hold. The challenge proves possession now; it is never cached.

  1. Request a nonce for the key:

    sh
    curl -sS https://api.sectigoaxiom.com/v1/public/identity-check/challenge \
      -H 'content-type: application/json' -d '{"jwk":{"kty":"EC","crv":"P-256","x":"…","y":"…"}}'

    Response: { challenge_id, nonce, expires_in: 300, sign: { typ: "axiom-possession+jws", payload: { nonce, aud } } }.

  2. The agent signs a compact JWS with header typ: axiom-possession+jws over { "nonce": "…", "aud": "https://api.sectigoaxiom.com" } (aud is optional, but must match when present).

  3. Submit the proof:

    sh
    curl -sS https://api.sectigoaxiom.com/v1/public/identity-check/challenge/verify \
      -H 'content-type: application/json' -d '{"challenge_id":"chk_01…","proof":"eyJ…"}'

    Response: { possession: true, thumbprint, checked_at }. Each challenge is single-use and expires after five minutes.

Axiom-signed agent cards (opt-in) ​

An agent's owner can publish an Axiom-signed card for a registered agent. It is off by default; an unpublished card and a non-existent agent both return 404, so the endpoint cannot be used to enumerate agents.

  • Publish (tenant admin, requires agent.write):

    http
    PUT /v1/agents/agt_01…/card/publication
    { "enabled": true, "domain": "agents.example.com" }

    The response includes card_url. A domain is shown as claimed unless it is one of the organisation's verified domains.

  • Read (public): GET /v1/agents/agt_01…/card returns { card, jws }: the card (v: axiom.agent-card.v1, with the agent's keys and their current status, card_url and jwks_uri) and the same card as a compact JWS (typ: axiom-agent-card+jws) signed by Axiom's identity key. Submit either to the identity check. A valid signature says Axiom issued the card at its issued_at; it says nothing about the agent's status now, which the check reads live.

Trust anchors ​

GET /v1/public/ca/trust-anchors returns the CA name, its mode and the PEM trust anchors that agent certificates chain to. Agent credentials chain only to these purpose-specific anchors: browser trust for website TLS does not extend to agent credentials.

Status

Sectigo SCM runs in mock mode in this preview, backed by a local development CA that issues real X.509 certificates; mode in the response says which. Organisation validation through SCM is only as real as the configured CA.

Developer preview. Contract version 2026-11-14.