Resumen al . Los seis puntos son: 1) tope por operación y tope diario, 2) activos o comercios permitidos, 3) vencimiento, 4) quién autorizó, 5) quién absorbe la disputa y 6) recibo. Los puntos 1, 3, 4 y 5 son los mínimos. Si falta uno, la auditoría llega tarde. Es un criterio editorial de LupaRiel, no un estándar ni asesoramiento legal. Ninguna fuente pública que revisamos define los seis en un solo formato.
Por qué una llave sola no alcanza
Una llave o una tarjeta prueba que alguien pudo firmar o cobrar. No dice qué se autorizó. Si el agente se equivoca, recibe un prompt malicioso o ejecuta una orden real, el cobro se ve igual. La especificación de AP2 parte de ese riesgo: cuando un rol es agéntico, el agente mismo es un potencial atacante, y hacen falta mecanismos que dejen evidencia de lo que se autorizó (especificación AP2 v0.2).
Cómo lo llama AP2
La especificación actual de AP2 define dos tipos de mandato: Checkout Mandate y Payment Mandate. Un mandato puede estar abierto, con restricciones y la clave pública del agente, o cerrado, atado a una transacción concreta. El usuario lo aprueba en una Trusted Surface (Agent Authorization). Una versión anterior, cuya especificación ya no está en la rama principal del repo (se puede leer en el commit 61f5de49), hablaba de Intent Mandate y Cart Mandate (especificación anterior). Mandato AR, el prototipo de LupaRiel, tiene su propio esquema, Intent Mandate v0.1.0, con los campos del schema.ts del repo.
El checklist, punto por punto
Cada punto dice qué escribir, y debajo qué dicen las fuentes y qué cubre Mandato AR v0.1.0. Lo que no encontramos en la fuente figura como no figura.
1. Tope por operación y tope diario · mínimo
Escribí dos montos: el máximo por pago y el máximo por período, por ejemplo por día, en el activo del pago. Son dos topes distintos. El primero frena un error grande y el segundo frena muchos errores chicos.
- x402: el cliente oficial paga por defecto solo
activos USD reconocidos, con un tope de 1 USD por pago que se
ajusta con
maxAmountPerPayment(Spend Controls). Tope por período: no figura en esa documentación. - AP2: el Payment Mandate abierto define
payment.amount_range(monto máximo por pago),payment.budget(total acumulado, se usa junto conpayment.agent_recurrence) ypayment.agent_recurrence(frecuencia, por ejemploDAILY,WEEKLYoMONTHLY, ymax_occurrences) (Payment Mandate). Un tope en monto por día como restricción propia: no figura. - Mandato AR: tiene
budgetUsdc, un presupuesto total del mandato. Tope por operación y tope diario: no figuran en el esquema.
2. Activos o comercios permitidos · recomendado
Escribí una lista cerrada de comercios o endpoints (dominio o URL base), el activo con el que se puede pagar y la red. Lo que no está en la lista, no se paga.
- AP2: el ejemplo de mandato abierto del spec usa
las restricciones
checkout.allowed_merchantsycheckout.line_items(Agent Authorization). - x402:
allowedAssetspermite optar por tokens fuera de los activos USD por defecto, con un tope atómico por pago (Spend Controls). - Mandato AR:
allowlistde URLs,resourceBaseynetwork. El endpoint/api/mandate/scopecompruebaresourceAllowedy que la red sea Base (eip155:8453).
3. Vencimiento · mínimo
Escribí una fecha y hora de vencimiento en formato ISO 8601. Cuanto más corto, menos tiempo tiene un mandato filtrado para hacer daño. Si la tarea sigue, se firma uno nuevo.
- AP2: los mandatos abiertos pueden llevar el claim
exp, un timestamp Unix. El spec recomienda fijarlo en el valor más chico que le permita al agente completar la tarea (especificación). - Mandato AR:
expiresAt, y el endpoint de scope compruebanotExpired.
4. Quién autorizó · mínimo
Escribí quién firma (persona o empresa), con qué clave, y qué clave del agente puede usar el mandato. Que cualquiera pueda verificar la firma sin preguntarle al agente.
- AP2: el usuario aprueba el contenido en una
Trusted Surface y se crea el mandato, ya sea con una credencial del
usuario o con un Trusted Agent Provider en el que confía el
verificador. Un mandato abierto lleva la clave pública del agente en
el claim
cnf(Agent Authorization). - Mandato AR:
principal,nonceysignature(HMAC o ed25519). El endpoint de scope verifica la firma, pero el HMAC con secreto demo sirve solo de prueba. No crea ni firma mandatos.
5. Quién absorbe la disputa · mínimo
Escribí qué parte responde si el pago fue un error: quien autorizó, el operador del agente, el comercio o el proveedor de pago. Anotá también el plazo para reclamar y qué evidencia vale. Es un acuerdo entre las partes, no un campo técnico.
- AP2: el Checkout Mandate y el Payment Mandate, junto con sus recibos, sirven como evidencia de lo que vio cada rol. Resolución de disputas, retención y acceso a la evidencia quedan fuera del alcance de la especificación (sección Dispute Evidence). Quién absorbe la pérdida: no figura.
- Mandato AR: no tiene campo de disputa.
6. Recibo · recomendado
Pedí que quien verifica el mandato devuelva un comprobante firmado de que lo aceptó o lo rechazó, que referencie al mandato, y guardalo junto con él.
- AP2: el verificador devuelve un recibo firmado
(JWT) con
result(successoerror) yreference, el hash del mandato recibido (Agent Authorization, Action Authorization). - x402: los clientes oficiales leen el resultado de
la liquidación,
settledosettle_failed(quickstart para compradores). - Mandato AR: el mandato no incluye recibo. LupaRiel ofrece settle-receipt para una liquidación ya hecha, que es otra cosa: prueba el settle por hash de transacción, no el consentimiento.
Cómo se conecta con x402
En x402 el pago va por llamada: el 402 trae el monto exacto, el activo
y la red (hay un ejemplo decodificado en
la guía de USDC en Argentina). Un
mandato encima le permite al comercio verificar antes de cobrar y a la
empresa explicar después qué pasó. Para probar la verificación,
LupaRiel tiene /api/mandate/scope:
seis checks sobre un mandato de Mandato AR (esquema, firma,
vencimiento, red, recurso permitido y presupuesto), a 0.02 USDC por
llamada en Base.
Qué no resuelve esta guía
- No es un estándar. Los seis puntos son un criterio editorial de LupaRiel.
- No es asesoramiento legal. La disputa se define en un contrato entre las partes.
- Mandato AR es un prototipo. Su README dice que el pago on-chain real con facilitador es un stub y que el MVP demuestra el flujo mandato, allowlist, 402 y respuesta (repo mswitach/mandato-ar).
- AP2 y x402 pueden cambiar. Revisá las fuentes antes de implementar.
Preguntas frecuentes
Qué es un mandato firmado para un agente
Es un documento que firma una persona o una empresa y que dice qué puede hacer un agente: con qué comercios o endpoints, hasta qué monto y hasta cuándo. Quien cobra lo verifica antes de aceptar el pago. En AP2 el mandato puede quedar abierto, con restricciones y la clave pública del agente, y se cierra cuando se ata a una transacción concreta.
Intent Mandate y Cart Mandate en AP2
La especificación actual de AP2 (v0.2) habla de Checkout Mandate y Payment Mandate. Una versión anterior, cuya especificación ya no está en la rama principal del repo (se consulta en el commit 61f5de49), definía Intent Mandate y Cart Mandate. Mandato AR, el prototipo de LupaRiel, usa su propio esquema llamado Intent Mandate v0.1.0, que no es el de AP2.
Quién absorbe la disputa según AP2
La especificación no lo define. AP2 describe cómo el mandato y el recibo sirven como evidencia de lo que vio cada parte, y deja fuera de alcance los detalles de resolución de disputas. Quién absorbe la pérdida es un acuerdo entre las partes y conviene escribirlo antes del primer pago.
Si LupaRiel crea o firma mandatos
No. El endpoint /api/mandate/scope de LupaRiel solo verifica el alcance de un mandato de Mandato AR contra un gasto propuesto. Crear y firmar mandatos es local en Mandato AR.
Fuentes
- AP2 · Agent Payments Protocol v0.2, especificación (consultado )
- AP2 · Agent Authorization (consultado )
- AP2 · Payment Mandate (consultado )
- AP2 · especificación anterior con Intent Mandate y Cart Mandate (GitHub, commit 61f5de49)
- AP2 · tipos IntentMandate y CartMandate (GitHub, commit 61f5de49)
- x402 · Quickstart for buyers, sección Spend Controls (consultado )
- Mandato AR · schema.ts del Intent Mandate v0.1.0
- Mandato AR · repositorio y README
- LupaRiel · ruleset mandate-scope-v1
- LupaRiel · ruleset settle-receipt-v1