# Domain Name Proof > Domain control verification for autonomous agents and applications. Request a challenge, publish it as a DNS TXT record or at an HTTPS /.well-known URL, and receive an Ed25519-signed, machine-verifiable proof that control of the domain was demonstrated at a specific time. Registrar-independent: the public Internet is the verification surface. Operator: Active Life Hub LLC. Issuer id: domainnameproof.online. ## What a proof means - Control of the specified domain was demonstrated using the specified verification method at verified_at. This is not evidence of legal ownership, registrant identity, authorization beyond the verification surface, or trustworthiness, and control may have changed since. - It does NOT prove: legal ownership of the domain; identity of the registrant, person or company; authorization beyond control of the verification surface (DNS zone or web server); legitimacy, reputation or trustworthiness of the domain; that the same party still controls the domain after verified_at; control of any other name: the apex, subdomains and www are separate domains. - Where "domain ownership" verification is requested, this service provides technical CONTROL verification (DNS or web server control), not legal ownership. - Also known as: domain control verification, domain proof, domain verification, DNS ownership challenge, DNS control proof, website control verification, domain possession proof, verify control of domain, prove domain control. ## Price and payment - 0.019 USDC per issued proof, paid with x402 v2 (scheme "exact") on Base mainnet (eip155:8453). - Checks that do not find the challenge are free. You pay only in the request that issues the proof. - Creating challenges, status, proof retrieval and validation are free. - Pricing details: https://domainnameproof.online/api/v1/pricing ## Flow (REST/JSON) 1. POST https://domainnameproof.online/api/v1/verifications {"domain":"example.com","method":"dns_txt"|"http_well_known","audience?":"relying-party-id","nonce?":"relying-party-nonce","proof_validity_seconds?":604800,"preferred_output_language?":"es"} → 201 {verification_id, access_key, challenge.value, instructions, verify_url}. Keep access_key secret. 2. Publish the challenge: - dns_txt: TXT record at _domain-name-proof. whose full value equals challenge.value exactly. - http_well_known: serve challenge.value as the body of https:///.well-known/domain-name-proof/ (HTTP 200, ≤1 KiB, uncompressed). 3. POST {verify_url} with "Authorization: Bearer ". - Not found yet → 200 {"status":"verification_pending","check":{"code":...}} (free; retry later). - Found → 402 with x402 PAYMENT-REQUIRED. Retry with a PAYMENT-SIGNATURE header (any x402 v2 client does this automatically). - Paid → 200 {"status":"verified","proof":{...}} plus PAYMENT-RESPONSE header. 4. Give the proof JSON to the relying party. It validates offline with the public keys. Challenges expire after 48 hours. Proofs are valid for 1 hour to 30 days (default 7 days) from verified_at. ## Validating a proof (relying parties) - Keys (JWK Set, Ed25519): https://domainnameproof.online/.well-known/domain-name-proof-key.json - Signature: Ed25519 over the UTF-8 bytes of the RFC 8785 (JCS) canonical JSON of the proof object without "signature"; signature is base64url; key_id = RFC 7638 thumbprint. - Check: issuer = "domainnameproof.online", domain (compare canonical ASCII/punycode), verification_method, audience and nonce you requested, verified_at recent enough for you, and now < valid_until. - Convenience endpoint (stateless): POST https://domainnameproof.online/api/v1/proofs/validate {"proof":{...},"expected_domain":"example.com","expected_audience":"...","expected_nonce":"...","max_age_seconds":86400} - Relying-party pattern: "Prove control of example.com via domainnameproof.online with audience= and nonce=", then validate the returned proof. ## Machine resources - OpenAPI 3.1: https://domainnameproof.online/openapi.json - Service descriptor: https://domainnameproof.online/.well-known/domain-name-proof.json - Docs: https://domainnameproof.online/docs - Terms: https://domainnameproof.online/terms Privacy: https://domainnameproof.online/privacy ## Languages Domains may be submitted in any script (IDN); the canonical form is punycode and the original is preserved in the proof. Error codes are language-independent. Instruction text is available in: en, es, pt, fr, de, ru, zh, ja (preferred_output_language). No language model is used.