---
skill: agent_ready_cert
service: virohanalife.com
endpoint: GET /api/verify?domain=<domain>
price_display: EUR 149 / year
rail: Stripe Checkout
payment: stripe-checkout
verify_url: https://www.virohanalife.com/verify
badge_url: https://www.virohanalife.com/badge/<domain>.svg
report_schema: virohana.agent-readiness-audit/2
generated_at: 2026-09-06T11:24:17Z
---

# Agent-Ready Certification

**Agent-Ready Certification: an audited, dated, publicly verifiable claim that a
domain is legible and transactable by AI agents. EUR 149 / year, bought on the
website, re-verified daily, and expires on its own after a year.**

| | |
| --- | --- |
| What it is | The Agent-Readiness Audit, plus a public register entry, a badge, and daily re-verification |
| Buy it | https://www.virohanalife.com/audit — **EUR 149 / year** via Stripe Checkout |
| Verify anyone | `GET https://www.virohanalife.com/api/verify?domain=<domain>` (JSON) or https://www.virohanalife.com/verify?domain=&lt;domain&gt; (human) |
| Badge | `GET https://www.virohanalife.com/badge/<domain>.svg` — SVG, grey when not certified |
| Payment | Stripe Checkout. **There is no x402 route for this SKU** — the machine-payable product is `agent_surface_audit`. |

### Why it is checkable rather than claimed

A certification that cannot be independently checked is a logo. This one is a row in
a register that answers to anyone, and a job that re-measures it every day:

- The badge is a **picture**; `https://www.virohanalife.com/api/verify` is the **fact**. Never trust the image.
- Re-verification runs daily and updates the score. It does **not** extend the expiry —
  re-verifying is not renewing, and a certification that quietly extended itself every
  night would never expire.
- A certification that lapses goes grey **on its own**, with nobody at Virohana awake.
  `certified` is true only when the row is `active` **and** `expires_at` is in the future.

### Verify a domain

```json
{
  "method": "GET",
  "url": "https://www.virohanalife.com/api/verify?domain=example.com"
}
```

Response:

```json
{
  "domain": "example.com",
  "certified": true,
  "score": 88,
  "last_verified_at": "2026-09-06T03:12:00Z",
  "expires_at": "2027-09-06T00:00:00Z"
}
```

An **uncertified** domain is a `200` with `certified: false` and `score: null` — not a
404. A verifier that has to tell "not certified" apart from "endpoint moved" is a
verifier nobody wires up. A malformed domain is a `400`.

CORS is open (`Access-Control-Allow-Origin: *`) and the response is cached for 5
minutes; the badge is cached for an hour.

### What the response will never contain

No buyer. No email, no email hash, no order id, no payment identity. The register
table has no such column, and the JSON above is built field by field rather than
serialised from the row — so a column added tomorrow cannot appear here by accident.
A certification is a public fact about a **domain**, and that is all it is.

### Embedding the badge

```json
{
  "html": "<a href=\"https://www.virohanalife.com/verify?domain=example.com\"><img src=\"https://www.virohanalife.com/badge/example.com.svg\" alt=\"Agent-Ready certified by Virohana\" height=\"28\"></a>"
}
```

### Failure modes

| Status | Meaning | What to do |
| --- | --- | --- |
| `200` + `certified:false` | Not certified, expired, or revoked | This is the normal "no". Not an error. |
| `400` | `domain` missing or not a public hostname | Send a bare hostname, e.g. `example.com` |
| badge, grey | Same as above, or the register was unreachable | The badge never errors — it degrades to grey, so a hiccup here cannot put a broken image on a customer's homepage |

