Tarjetas para agentes (Stripe Issuing)
Un agente con tarjeta puede pagar a cualquier comercio que acepte tarjetas, no solo a APIs x402. Por eso mismo una tarjeta necesita política: una inyección de prompt que convence a un agente de comprar algo funciona igual con un número de tarjeta. Con las autorizaciones en tiempo real de Stripe Issuing, Stripe pregunta a Burnbound antes de cada cargo en la tarjeta del agente, y responde la política del agente en Burnbound: los mismos topes, hosts permitidos, reglas e historial que sus pagos x402. El dinero sigue en tu cuenta de Stripe, y Burnbound nunca guarda una clave de Stripe, solo el secreto de firma del endpoint, cifrado.
Cómo se decide un pago con tarjeta
- El agente paga en un comercio con su tarjeta de Stripe Issuing.
- Stripe envía
issuing_authorization.requesta la URL de tu organización en Burnbound. - Burnbound comprueba la firma de Stripe con el secreto de tu endpoint y lee el agente en los metadatos de la tarjeta (
burnbound_agent_id). - Decide la política del agente, como en cualquier pago: método permitido, comercio en los hosts permitidos, máximo por pago, tope diario, presupuestos de subequipo y tus reglas propias. Los importes en EUR o GBP se pasan a USD redondeando hacia arriba.
- Burnbound responde
approved: trueoapproved: falsedentro de la ventana de 2 segundos de Stripe, y el pago aparece en Gasto con el comercio, su categoría y el importe en las dos monedas. - Los eventos posteriores de Stripe lo cierran: una captura lo liquida; una reversión o una autorización caducada liberan el gasto.
Una tarjeta no puede esperar a una persona. Si un pago necesitaría aprobación (está en el umbral de aprobación del agente o por encima), se rechaza con approval_required. Pon el umbral por encima de lo que la tarjeta deba pagar sola.
Qué necesitas
- Una cuenta de Stripe con Issuing activado. Empieza en modo de prueba: tarjetas y autorizaciones de prueba, sin dinero real.
- Un agente en Burnbound y un owner o admin de la organización para configurar el conector.
- El id del agente (lo muestra su página en el panel).
Paso 1: Crea el conector de tarjetas en Burnbound
En el panel, abre Organización → Tarjetas (Stripe Issuing) y pulsa Crear el conector. Elige qué responde Burnbound si una decisión se queda sin tiempo (rechazar es lo predeterminado y lo recomendado). El conector muestra la URL del webhook para Stripe, en el host de la app:
https://app.burnbound.dev/v1/cards/stripe/<id del conector>/webhook
Cópiala. Hasta que pegues el secreto de firma (paso 4), el conector está pendiente: Burnbound responde 400 a todo lo que llega a la URL y Stripe aplica tu opción por defecto de Issuing, así que no se aprueba nada.
Paso 2: Apunta ahí las autorizaciones en tiempo real de Stripe
En Stripe, abre los ajustes de Issuing (dashboard.stripe.com/account/issuing), activa las autorizaciones en tiempo real y pon como endpoint la URL del paso 1. A ese endpoint Stripe solo le envía issuing_authorization.request, y le pregunta antes de aprobar cada autorización de tus tarjetas.
En los mismos ajustes, elige qué hace Stripe si no recibe respuesta en 2 segundos. Rechazar es lo seguro.
Paso 3: Añade el endpoint de los eventos
Stripe envía el resto de eventos a un endpoint de webhook normal. Abre Desarrolladores → Webhooks → Añadir endpoint, pega la misma URL y elige estos tres eventos:
issuing_authorization.createdissuing_authorization.updatedissuing_transaction.created
Guarda el endpoint. Burnbound los usa para liquidar las capturas y liberar las retenciones. Sin ellos, un pago con tarjeta aprobado sigue contando hasta que su retención caduca, 31 días después.
Paso 4: Pega los secretos de firma
Cada endpoint de Stripe tiene su propio secreto de firma (empieza por whsec_). En Burnbound, en el mismo conector, rellena:
- Secreto de firma de las autorizaciones en tiempo real (obligatorio): el del endpoint de los ajustes de Issuing.
- Secreto de los eventos (opcional): el del endpoint de Desarrolladores → Webhooks, si Stripe le da otro distinto.
Guárdalo. La URL no cambia. Burnbound guarda los dos cifrados y solo enseña sus 4 últimos caracteres. Un evento firmado con cualquiera de los dos se acepta; uno firmado con cualquier otro secreto se rechaza.
Paso 5: Etiqueta cada tarjeta con su agente
Cada tarjeta nombra en sus metadatos el agente que paga con ella: clave burnbound_agent_id, valor el id del agente. En Stripe: Issuing → Tarjetas → la tarjeta → Metadatos. Con la CLI de Stripe:
stripe issuing cards update ic_… -d "metadata[burnbound_agent_id]=<agent id>"
Una tarjeta sin esa clave, o que nombra un agente de otra organización, se rechaza con card_not_linked.
Paso 6: Permite el método y los comercios en el agente
En la página del agente en Burnbound:
- En Métodos de pago, activa Stripe Issuing · card. Está apagado por defecto, en todos los agentes.
- Añade los comercios a los hosts permitidos. El host de un pago con tarjeta es la web del comercio cuando Stripe la da (
openai.com) y, si no, su categoría:mcc-<categoría>.card, con guiones, por ejemplomcc-computer-software-stores.card. La web es la que declara el propio comercio, así que no prueba quién es. Para permitir o bloquear un comercio concreto, escribe una regla por su destinatario (stripe-merchant:<network id>) o por su categoría de comercio. - Revisa el máximo por pago y el tope diario: los pagos con tarjeta cuentan para ellos en USD, como cualquier otro pago.
La categoría y el país del comercio también son hechos que pueden usar tus reglas propias. El resto de controles está en cómo limitar el gasto de un agente de IA.
Paso 7: Pruébalo en modo de prueba
Crea una autorización de prueba en la tarjeta etiquetada con los test helpers de Stripe. Dentro del tope se aprueba; por encima del máximo por pago se rechaza:
stripe post /v1/test_helpers/issuing/authorizations \
-d card=ic_… -d amount=500 -d currency=eur \
-d "merchant_data[category]=computer_software_stores"
Captúrala para ver el pago liquidado en Burnbound:
stripe post /v1/test_helpers/issuing/authorizations/iauth_…/capture
stripe trigger issuing_authorization.request también sirve para comprobar rápido la URL y el secreto: crea una tarjeta propia, sin burnbound_agent_id, así que Burnbound la rechaza con card_not_linked. Cada decisión está en Gasto y en Auditoría (card.authorization.approved, card.authorization.declined, card.authorization.captured, card.authorization.released).
Divisas
- USD siempre funciona. EUR, GBP y el resto de monedas que publica el Banco Central Europeo se convierten con su tipo del día (se actualiza cada hora y redondea hacia arriba). Una tarjeta en una moneda sin tipo (por ejemplo KWD, salvo que el servidor fije uno en
FIAT_USD_RATES) se rechaza concurrency_not_supported, antes de cualquier regla. - Los decimales son los de Stripe, no los de ISO 4217: el
amountde la autorización va en unidades menores de la moneda de la tarjeta. 12,50 EUR es1250, 500 JPY es500, 1,500 KWD es1500(milésimas) y 5 ISK es500(Stripe cuenta ISK y UGX con dos decimales). - Las conversiones redondean hacia arriba al micro-dólar, para que un pago nunca parezca más pequeño de lo que es. Los topes comparan el importe en USD; el importe original y el tipo usado se guardan con la decisión y en Auditoría.
Límites de esta versión
- Sin aprobaciones en tarjetas. Un pago que necesitaría una persona se rechaza (
approval_required). - Tipos de cambio diarios. Las otras monedas usan el tipo de referencia del día del Banco Central Europeo, no el del mercado al minuto (ver Divisas, arriba).
- El gasto es el importe autorizado, más lo que se capture de más. Una captura parcial no lo baja. Una captura por encima de lo autorizado, o de una autorización que Burnbound no aprobó, se registra igualmente como gasto y queda marcada (
over_capture,unreserved_capture). Un reembolso en la tarjeta solo se audita. - Un conector por organización. Crear otro lo reemplaza, con otra URL: actualiza los dos endpoints en Stripe. Un conector reemplazado o revocado rechaza autorizaciones nuevas, pero sigue registrando capturas y liberaciones durante 30 días.
- Sin tiempo. Burnbound decide en 1,5 segundos. Si no puede, responde lo que diga el conector (rechazar por defecto) y audita
decision_timeout.
Burnbound se configura en la guía de inicio. La misma política cubre los reembolsos de Stripe del agente y sus pagos x402 a las APIs del catálogo; todos los controles están en Cómo limitar el gasto de un agente de IA.