Agent-readable invoices and checkout links
Let accounts-payable assistants read what is owed as structured data from existing payer URLs
An accounts-payable assistant triaging a mailbox can read a RevKeen invoice or checkout link as structured data — no scraping, no new route, no new token, no new auth. This is a read capability: retrieving the representation moves no money.
The discriminator
Request the existing payer URL with Accept: application/json and without
text/html:
curl -H "Accept: application/json" \
https://pay.revkeen.com/i/INV_TOKENA browser navigation always accepts text/html, so pages keep rendering
unchanged. Anything else asking for JSON gets the representation.
Discovery
A client that landed on HTML can discover the JSON the standard way — every invoice and checkout-link page sends:
Link: </i/INV_TOKEN>; rel="alternate"; type="application/json"Agents that only render get the same facts from JSON-LD in the page head
(schema.org Invoice on /i, Offer on /p).
Invoice representation (/i)
Amount, currency, issue and due dates, merchant, reference, line items,
status, accepted rails, plus an agentPayable block:
{
"success": true,
"data": {
"number": "INV-2026-0417",
"status": "sent",
"currency": "GBP",
"totalCents": 5400,
"amountDueCents": 5400,
"dueDate": "2026-08-30T00:00:00.000Z",
"client": { "name": "Islands Wellness" },
"lineItems": [],
"agentPayable": { "enabled": false, "reason": "not_enabled" }
}
}Terminal states
Paid, void, uncollectible and draft invoices return 200 with their status
in the payload — never a 410 that reads as an error. Expired invoices
return their expired state the same way. Unknown tokens return a JSON 404.
agentPayable is reserved
The block is currently always { "enabled": false }. Do not build payment
flows against it — agent payment does not exist yet.
Checkout-link representation (/p)
Checkout links return products and amount only:
{
"success": true,
"data": {
"surface": "checkout_link",
"status": "ready",
"merchant": { "name": "Islands Wellness" },
"currency": "GBP",
"totalCents": 5400,
"products": [{ "name": "Wellness Membership", "unitAmountMinor": 4500 }],
"agentPayable": { "enabled": false, "reason": "not_enabled" }
}
}A checkout link does not know the payer, so the shape does not pretend to:
no customer block, no invoice reference, no identifiers. Inactive, archived
and expired links return 200 with that terminal status; unknown links
return a JSON 404.
Field types
All money is integer minor units (totalCents, amountDueCents,
unitAmountMinor). Dates are ISO-8601 strings or null. The JSON-LD
price/value floats are display markup only — the integers are canonical.