/ docs

Endpoints, checks, records and verification

Everything on this site is callable and the scan is open. No key is needed to verify anything, by design: a verification layer that requires an account is not a verification layer.


/ quickstart

Scan a domain

two endpoints, no key
curl 'https://connect.arliwork.com/api/check?url=yourcompany.com' curl 'https://connect.arliwork.com/agent-readiness?url=yourcompany.com' # readable alias

A real response, trimmed to three checks, from the run against dxpe.com. Every check carries its own verdict and its own evidence, so you can reproduce the reasoning instead of trusting the score.

GET /api/check?url=dxpe.com (trimmed)
{ "host": "dxpe.com", "score": 5.1, "band": "partly readable", "counts": { "pass": 3, "warning": 7, "fail": 2, "total": 12 }, "checks": [ { "key": "machine_access", "name": "A non-browser client can read the site", "result": "pass", "detail": "HTTP 200 and readable content (441864 bytes) with no browser fingerprints" }, { "key": "bot_rules", "name": "Rules for AI agents are published and permit them", "result": "warning", "detail": "robots.txt exists but never mentions an AI agent: 2 agents named, none of them AI" }, { "key": "product_markup", "name": "Products are stated in machine terms", "result": "fail", "detail": "no Product markup on the product page we located" } ] }

Private and internal addresses are refused before any request leaves the scanner, so the endpoint cannot be pointed at a network you do not own.


/ the twelve checks

What each check reports, and what it weighs

The score is ten times the weight earned over the total weight available. A pass earns its weight, a warning earns half, a fail earns nothing. The weights are published so you can disagree with them and re-score our data yourself.

CheckWeightWhat it reports
machine_access3.0Whether a client without browser fingerprints is served at all, how much content it receives, and whether a 200 is a real page rather than a block, a "not found" placeholder or an empty shell
bot_rules2.0Whether robots.txt names AI agents and permits them, or leaves the decision to the crawler
product_markup2.0Whether products are stated in machine terms on a real product page
price_and_stock2.0Whether price and availability are machine-readable
catalogue_query2.0Whether the catalogue can be queried rather than browsed, including any MCP surface
api_surface1.5Whether a callable API exists within the surface a machine can reach
discovery_map1.0A sitemap, including a sitemap index
agent_description1.0agents.txt or ai.txt describing what may be requested
agent_card1.0Whether the site describes itself to other agents at a well-known path
llms_txt0.5Whether llms.txt is present and is a real file rather than an error page served with code 200
authorisation0.5Whether a way to authorise an agent is declared (RFC 9728 protected resource metadata)
machine_payment0.5Whether per-call payment is declared

/ records

Verify a batch record

record endpoints
GET /v1/batch/{gtin}/{lot} -> every check, with its own line GET /v1/records -> records published on this host GET /v1/attestations/{id} -> the signed record GET /.well-known/issuer-keys.json -> publisher keys GET /status/pilot-1 -> revocation status list

A record is a verifiable credential: signed statements about one batch, each carrying how it is known, with evidence bound by sha256 and a status that can be withdrawn. This host publishes demonstration records with synthetic data, clearly labelled, so the format can be inspected without anyone's commercial data being involved.

GET /v1/batch/09506000134352/LOT-2026-09-A (trimmed)
{ "gtin": "09506000134352", "lot": "LOT-2026-09-A", "status": "verified_with_warnings", "checks": [ { "claim": "capacity tested to 100Ah at 0.5C", "basis": "manufacturer_declaration", "evidence": { "sha256": "9f2c...a1", "bytes": 481203 }, "verdict": "warning", "note": "the test report is the manufacturer's own document, not an independent one" } ], "signatures": [ { "issuer": "factory", "alg": "Ed25519", "kid": "fac-2026-09" }, { "issuer": "inspector", "alg": "Ed25519", "kid": "ins-17020-04", "accreditation": "ISO/IEC 17020" }, { "issuer": "our-layer", "alg": "Ed25519", "kid": "vl-2026" } ] }

/ verification

How to verify a record without trusting us

One

Fetch the record

Retrieve the document from any host that serves it. The document is self-contained and does not call back to us.

Two

Fetch the keys

Get the publisher keys once from /.well-known/issuer-keys.json, or keep a copy. They are published, long-lived, and rotated with notice.

Three

Check signatures and fingerprints

Verify each signature against its key, then hash the evidence and compare it with the fingerprint in the record. Any change to the evidence breaks the check.

Four

Check the status list

A record that has been withdrawn reads as withdrawn. Nothing disappears quietly, which is the difference between a record and a claim.

The record format is host-agnostic. The same documents verify whether they are served from a container, a CDN or a public canister on a decentralised host such as the Internet Computer, which we offer when a record has to remain verifiable even if we are gone. Customer catalogues are never hosted there and never leave the customer's own systems. Standards in use: W3C Verifiable Credentials, GS1 identifiers, GS1 Digital Link, sha256, Ed25519, C2PA for image provenance.


/ operation

Limits, errors and the machine surface

Limits and errors

The public scan is rate limited per address and takes one to four seconds per domain. Private, loopback, link-local and reserved addresses are refused with 400 before any connection is attempted. A domain that times out returns a partial result with the failed checks marked, never a fabricated pass.

Machine surface of this site

We publish what we ask others to publish. The files below are real files, not placeholders, because a site that advises on machine-readiness and ships a placeholder has no standing.

error codes
400 target refused: not a public address 403 issue or revoke denied: missing X-Issue-Token 404 record not found, or batch unknown 429 rate limited, retry after the stated interval 503 upstream catalogue unreachable, retry
published for machines
/agents.txt -> what this service is, for an agent /llms.txt -> the same, in the convention models look for /robots.txt -> AI agents permitted and named /sitemap.xml -> map of this site /field-run.json -> the raw field run behind /evidence

Versioning: the scan contract is versioned by path and additive only. Adding a check does not change the weight or the meaning of an existing one, so a score you recorded last month stays comparable.


$ connect.arliwork.com --integration-guide

Ask for the integration guide

We send the endpoint contract, the access model, the log format and the deployment options before any commitment is discussed.

hq@arliwork.com · Shenzhen Capernaum Technology Co., Ltd · PIAKHOUSKI DZMITRY