Endpoint
POST /api/liveness — x402 v2 Exact,
$0.02 USDC en Base (eip155:8453, amount
atómico 20000). Sin pago responde HTTP 402 +
PAYMENT-REQUIRED. Body ausente, ids vacío
o más de 10 ids responde 400
{ error, hint } antes del cobro.
GET responde 405.
Probe unpaid (debe ser 402 tras el deploy):
curl -i -X POST https://lupariel.com/api/liveness \
-H 'Content-Type: application/json' \
-d '{"ids":["lupapago-consent-hop","lupaplaza-plaza-discover","lupaplaza-plaza-probe","lupariel-rail-matrix","lupapago-psp-recommend"]}'
Lookup sigue en
/api/lookup. Rail matrix sigue
en
/api/rail/matrix. HTML y
/rieles.json no cambian.
Body
-
ids(1–10): slug de ficha, plaza_id o URL canónica que ya esté en el catálogo.
Reglas
-
Cada id se resuelve contra el snapshot de fichas (mismo que el
sitio). Si no hay match,
live: falsey no se fetchea. - Si hay match, se usa la URL canónica de la ficha. Solo http(s) público. No se siguen redirects (3xx cuenta como reachable).
-
Probe unpaid corto (GET, ~6s).
live=truesi el status es 2xx, 3xx o 402. 5xx, timeout, error de red o id desconocido →live=false. -
is_402esstatus === 402. Hasta 4 probes en paralelo.
Respuesta 200 (post-pago)
{
"product": "LupaRiel",
"kind": "liveness",
"ruleset": "riel-liveness-v1",
"results": [
{
"id": "lupapago-consent-hop",
"live": true,
"http_status": 402,
"is_402": true,
"notes": "HTTP 402 Payment Required"
}
],
"count": 1,
"disclaimer": "Checks LupaRiel catalog URLs; no es asesoramiento."
} Qué no es
- No sondea URLs arbitrarias del caller (anti-SSRF).
- No autoriza ni mueve fondos. El cobro de la llamada es x402 Exact USDC Base.
- No reemplaza a
/api/lookupni a rail-matrix.
Discovery: /openapi.json y
/.well-known/x402.
Facilitator por defecto: PayAI
(https://facilitator.payai.network).