Propuesta abierta · versión 2026-10-09
Especificación Comercio IA
Extensión chilena para el Universal Commerce Protocol (UCP) y el Agentic Commerce Protocol (ACP). Define cómo un agente de IA y una tienda intercambian la información que la ley chilena exige para cerrar una venta a distancia, y cómo se paga con medios de pago chilenos.
- Versión
2026-10-09(propuesta abierta: lista para implementar y comentar)- Espacio de nombres
cl.comercioia.*- Esquemas servidos desde
https://comercioia.cl/ucp/…- Requiere
- UCP
2026-08-25o posterior. Equivalencias para ACP2026-04-17en la sección ACP. - Licencia
- Apache-2.0
Esta especificación describe reglas tributarias y de protección al consumidor, pero no es asesoría legal. Cada tienda es responsable de decidir qué avisos le aplican.
1. Convenciones
- DEBE, NO DEBE, DEBERÍA y PUEDE tienen el sentido de MUST, MUST NOT, SHOULD y MAY del RFC 2119.
- Montos en pesos chilenos enteros. El peso no tiene decimales, así que la unidad mínima es el peso, igual que en los estándares.
- RUT sin puntos, con guion y dígito verificador módulo 11, por ejemplo
76123456-0. Quien recibe un RUT DEBE validar el dígito verificador. - Fechas en RFC 3339 con zona horaria, por ejemplo
2026-12-03T14:22:05-03:00. - Objetos abiertos. Como pide UCP, los esquemas no cierran objetos ni usan listas cerradas: los códigos se documentan como ejemplos, y un valor desconocido DEBE tratarse como se indica en cada campo.
- Autoridad del dominio. Todo esquema
cl.comercioia.*se sirve desdecomercioia.cl, sin redirecciones ni CDN con otro nombre. Si un esquema llega desde otro dominio, el agente lo ignora.
2. Declaración en el perfil de la tienda
La tienda declara las extensiones en capabilities y los medios de pago en payment_handlers de su perfil /.well-known/ucp. Los agentes negocian por nombre y versión: una extensión que el agente no anuncia queda inactiva y el checkout sigue con los campos del núcleo.
{
"ucp": {
"version": "2026-08-25",
"services": { "dev.ucp.shopping": [ … ] },
"capabilities": {
"dev.ucp.shopping.checkout": [{ "version": "2026-08-25" }],
"dev.ucp.shopping.order": [{ "version": "2026-08-25" }],
"cl.comercioia.shopping.tax_document": [{
"version": "2026-10-09",
"extends": ["dev.ucp.shopping.checkout", "dev.ucp.shopping.order"],
"spec": "https://comercioia.cl/spec/#tax-document",
"schema": "https://comercioia.cl/ucp/schemas/tax_document/2026-10-09.json" }],
"cl.comercioia.shopping.consumer_terms": [{
"version": "2026-10-09",
"extends": ["dev.ucp.shopping.checkout", "dev.ucp.shopping.order"],
"spec": "https://comercioia.cl/spec/#consumer-terms",
"schema": "https://comercioia.cl/ucp/schemas/consumer_terms/2026-10-09.json" }],
"cl.comercioia.shopping.credit_note": [{
"version": "2026-10-09",
"extends": "dev.ucp.shopping.order",
"spec": "https://comercioia.cl/spec/#credit-note",
"schema": "https://comercioia.cl/ucp/schemas/credit_note/2026-10-09.json" }]
},
"payment_handlers": {
"cl.comercioia.webpay_plus": [{
"id": "webpay_1", "version": "2026-10-09",
"spec": "https://comercioia.cl/spec/#webpay-plus",
"schema": "https://comercioia.cl/ucp/handlers/webpay_plus/2026-10-09.json",
"available_instruments": [{ "type": "redirect" }],
"config": { "environment": "production" } }]
}
}
}
3. Documento tributario cl.comercioia.shopping.tax_document
Extiende dev.ucp.shopping.checkout y dev.ucp.shopping.order. En el checkout, el comprador elige boleta o factura. En el pedido, la tienda devuelve los documentos que emitió.
En el checkout: tax_document
| Campo | Regla | Fuente |
|---|---|---|
document_choice | boleta (por defecto) o factura. Las personas reciben boleta (39, o 41 exenta); la factura (33 o 34) es solo para compradores con inicio de actividades. Un valor desconocido DEBE tratarse como boleta, avisando en messages[]. | DL 825 arts. 52–53 |
receiver | Obligatorio si se pide factura: rut, razon_social (≤100), giro (≤40), direccion (≤70), comuna (≤20); opcionales ciudad y email. | Formato DTE del SII; DS 55 art. 69 |
En el pedido: tax_documents[]
| Campo | Regla | Fuente |
|---|---|---|
type, folio | Tipo de DTE y folio autorizado por el SII. | Formato DTE |
issuer_rut, receiver_rut | Una boleta a un consumidor no identificado lleva el RUT genérico 66666666-6. | Formato DTE |
issued_at, issue_trigger | Se emite a más tardar en la entrega. Lo recomendado es emitir al confirmarse el pago (payment_confirmed). Una factura emitida después del despacho requiere guía de despacho (52) al despachar. | DL 825 art. 55 |
total, net, iva, exempt | Pesos enteros. El total incluye IVA. | DL 825 |
sii_track_id, sii_status | Cada boleta se envía al SII dentro de una hora desde su emisión. | Res. Ex. SII 74/2020 |
representation_url | Enlace https a una representación que el comprador pueda guardar, entregado de inmediato por correo, chat, enlace o QR. | Res. Ex. SII 74/2020 |
4. Términos del consumidor cl.comercioia.shopping.consumer_terms
Extiende checkout y pedido con la información que un vendedor a distancia debe dar antes y después de la venta.
| Campo | Regla | Fuente |
|---|---|---|
seller | razon_social, rut, domicilio y contacto del vendedor, visibles antes de pagar; opcional platform_role con el rol de cualquier plataforma intermediaria. | DS 6/2021 |
ai_disclosure | El agente declara que es un agente de IA (is_ai_agent, agent_name, purpose, human_contact). La tienda lo repite en su respuesta. Sin patrones engañosos; los rechazos automáticos deben explicar el motivo. | SERNAC Res. Ex. 33/2022 |
price_includes_tax | DEBE ser true en ventas a consumidores: el precio total incluye impuestos. | Ley 19.496 art. 30 |
delivery | Costo de despacho y plazo estimado, informados antes del pago. | DS 6/2021 |
installments | Solo si se ofrecen cuotas: count, installment_amount, tasa mensual, cae, total_cost y cash_price. El precio contado DEBE ser al menos igual de visible que el precio en cuotas. | Ley 19.496 arts. 17 G y 37 |
confirmation (pedido) | Confirmación escrita con copia íntegra del contrato, enviada al cerrarse la venta: channel, sent_at, contract_copy_url. Sin ella, el plazo de retracto se extiende de 10 a 90 días. | Ley 19.496 art. 12 A |
5. Retracto y garantía legal
Ambas son tipos de política dentro de policies[] del núcleo, que UCP permite definir bajo el dominio propio. Como toda política de UCP, llevan type y description, un objeto con plain, markdown o html. Sus esquemas están en consumer_terms.
cl.comercioia.policy.retracto
| Campo | Valor por defecto y regla |
|---|---|
window_days | 10 días corridos desde la recepción del producto, o desde la contratación en servicios. |
window_days_without_confirmation | 90, si no se envió la confirmación escrita del art. 12 A. |
refund_within_days | 45, sin descuentos. |
excluded, exclusion_reason | Un producto solo puede excluirse por su naturaleza: no retornable, perecible, hecho a medida o de higiene personal abierto (DS 52/2022). Los servicios pueden excluirse por decisión del vendedor. Ejemplos de código: not_returnable, perishable, made_to_order, hygiene_opened, service_excluded_by_seller. |
Fuente: Ley 19.496 art. 3 bis b), modificada por la Ley 21.398. El aviso se muestra antes de pagar, junto al precio y con un tamaño no menor, con las palabras «derecho a retracto».
cl.comercioia.policy.garantia_legal
| Campo | Valor por defecto y regla |
|---|---|
months | 6 meses desde la recepción. |
remedies | repair, replace o refund, a elección del comprador. |
remote_claim_channel | Un vendedor a distancia ofrece un canal de reclamo a distancia o retiro gratuito. |
Fuente: Ley 19.496 arts. 20 y 21; SERNAC Res. Ex. 779/2023.
Avisos que llegan aunque el agente no conozca la extensión
La tienda DEBE enviar además cada aviso de retracto y garantía como un mensaje warning del núcleo en messages[], con presentation: "disclosure", code igual al tipo de la política y path apuntando a ella. UCP exige que las plataformas no oculten, colapsen ni descarten esos avisos, y que deriven al comprador a continue_url si no pueden mostrarlos. Así los avisos legales llegan incluso a través de un agente que no sabe nada de Chile.
6. Notas de crédito cl.comercioia.shopping.credit_note
Extiende dev.ucp.shopping.order. Cada entrada de adjustments[] del núcleo (devolución, retracto, anulación) PUEDE llevar un tax_document con la nota de crédito (61) o de débito (56) emitida.
| Campo | Regla |
|---|---|
type, folio, issued_at, total | Documento emitido, en pesos enteros. |
ref_type, ref_folio, ref_date | Documento original al que se refiere (por ejemplo, boleta 39). |
cod_ref | 1 anula el documento, 2 corrige texto, 3 corrige montos. |
razon | Motivo impreso en el documento (≤90). |
El IVA de una nota de crédito solo se recupera dentro de los 6 meses siguientes a la entrega (DL 825 arts. 21 N°2 y 70).
7. Medios de pago
Los cinco medios de pago siguen el mismo patrón, que en UCP es el patrón de escalamiento del núcleo:
- La tienda crea el pago con su propia cuenta en el proveedor.
- El checkout responde
status: "requires_escalation"con uncontinue_urly un mensaje conseverity: "requires_buyer_input". - El comprador paga en la página del proveedor.
- La tienda confirma el resultado directamente con el proveedor y crea el pedido.
El agente nunca recibe datos de tarjeta ni credenciales. La configuración pública (config) NO DEBE incluir claves ni secretos. Estos medios de pago están publicados por la iniciativa Comercio IA hasta que cada proveedor publique el suyo; cada proveedor está invitado a revisarlo, cofirmarlo o asumirlo.
Fallas y su equivalente en UCP
| Situación | code | severity | Qué hace el agente |
|---|---|---|---|
| El emisor rechaza el pago | payment_failed | recoverable | Ofrece reintentar u otro medio de pago. |
| Fondos insuficientes | payment_failed | recoverable | Igual que un rechazo; el detalle va en content. |
| El comprador no pagó a tiempo (vence la sesión del proveedor) | payment_failed | recoverable | Un nuevo intento crea una nueva transacción. |
| Proveedor no disponible o error de red | payment_failed | recoverable | Reintenta después; la tienda consulta el estado antes de crear otro pago. |
| El comprador debe pagar en la página del proveedor | (estado del checkout) | requires_buyer_input | Lleva al comprador a continue_url. |
Webpay Plus · cl.comercioia.webpay_plus
- Proveedor
- Transbank
- Crear
POST /rswebpaytransaction/api/webpay/v1.2/transactionscon el código de comercio de la tienda.buy_order≤26 caracteres,session_id≤61, monto en pesos enteros,return_url≤256.- Cómo paga
- Webpay exige un formulario POST con
token_ws, así quecontinue_urlapunta a una página de la tienda que lo envía automáticamente. - Confirmación
- Commit (
PUT …/transactions/{token}) al volver el comprador. Aprobado solo siresponse_code = 0ystatus = AUTHORIZED. - Vencimiento
- Token de 5 minutos; el formulario da 4 minutos en producción (
token_ttl_seconds,payment_window_seconds). - Diseñar para
- No hay webhook: la tienda DEBE revisar por consulta de estado los pagos abandonados (el estado se puede consultar por 7 días). No hay clave de idempotencia: la tienda usa la suya.
- Devoluciones
- Reversa o anulación, total o parcial, según los plazos de Transbank.
Oneclick Mall · cl.comercioia.oneclick_mall (propuesto)
- Proveedor
- Transbank
- Crear
- Inscripción única de la tarjeta en la página de Transbank. Después, cobros servidor a servidor con el
tbk_userde la inscripción y el código de comercio de la tienda dentro del Mall. - Cómo paga
- Solo una vez, al inscribir. Si no hay inscripción vigente, la respuesta indica
enrollment_requiredy deriva acontinue_url. - Confirmación
- Respuesta síncrona de la autorización.
- Diseñar para
- Es lo más parecido a pagar dentro del chat que existe hoy en Chile. Los límites diarios por usuario se fijan al afiliarse. Antes de usarlo hay que confirmar con Transbank si un cobro iniciado a través de un agente de IA calza con sus condiciones.
Mercado Pago · cl.comercioia.mercadopago
- Proveedor
- Mercado Pago
- Crear
- API de órdenes o preferencias con las credenciales de la tienda.
external_reference≤64,notification_url≤248, precios unitarios enteros en Chile, encabezadoX-Idempotency-Key. - Cómo paga
- En la URL de checkout que devuelve Mercado Pago.
- Confirmación
- Webhook firmado (
x-signature) más conciliación. - Devoluciones
- Totales o parciales, dentro de los plazos de Mercado Pago.
Getnet · cl.comercioia.getnet
- Proveedor
- Getnet (Web Checkout sobre la plataforma PlacetoPay)
- Crear
POST /api/sessioncon las credenciales de la tienda;reference≤32. La sesión dura 30 minutos por defecto (session_ttl_seconds).- Cómo paga
- En el
processUrldevuelto. - Confirmación
- La notificación se envía una sola vez, así que la tienda DEBE además consultar
/api/session/{requestId}. - Diseñar para
- Qué funciones tiene habilitadas Getnet Chile está por confirmar con Getnet.
Khipu · cl.comercioia.khipu
- Proveedor
- Khipu (transferencia bancaria)
- Crear
POST https://payment-api.khipu.com/v3/paymentscon la API key de la tienda.- Cómo paga
- Desde su cuenta bancaria, en el
payment_urldevuelto. - Confirmación
- Webhook firmado (
x-khipu-signature), que Khipu reintenta, más consulta de estado (pending,verifying,done). - Diseñar para
- No hay clave de idempotencia documentada. Iniciar pagos desde cuentas bancarias es una actividad regulada: el registro lo tiene Khipu, no quien implementa esta especificación.
8. Ejemplos
Los ejemplos muestran solo los campos relevantes. Los RUT de ejemplo pasan la validación módulo 11.
Respuesta a complete_checkout: pagar con Webpay Plus
{
"id": "chk_7f3a",
"status": "requires_escalation",
"continue_url": "https://tienda-ejemplo.cl/pagar/chk_7f3a",
"currency": "CLP",
"totals": [
{ "type": "subtotal", "display_text": "Productos (IVA incluido)", "amount": 189990 },
{ "type": "fulfillment", "display_text": "Despacho RM, 3 días hábiles", "amount": 4990 },
{ "type": "total", "amount": 194980 }
],
"policies": [
{ "type": "cl.comercioia.policy.retracto",
"description": { "plain": "Derecho a retracto: 10 días desde que recibes el producto." },
"url": "https://tienda-ejemplo.cl/retracto",
"window_days": 10, "window_days_without_confirmation": 90, "refund_within_days": 45 },
{ "type": "cl.comercioia.policy.garantia_legal",
"description": { "plain": "Garantía legal de 6 meses: reparación, cambio o devolución." },
"months": 6, "remedies": ["repair", "replace", "refund"] }
],
"messages": [
{ "type": "warning", "code": "cl.comercioia.policy.retracto",
"path": "$.policies[0]", "presentation": "disclosure",
"content": "Tienes derecho a retracto por 10 días desde que recibes el producto." },
{ "type": "error", "code": "payment_redirect", "severity": "requires_buyer_input",
"content": "Completa el pago en Webpay." }
],
"tax_document": { "document_choice": "boleta" },
"consumer_terms": {
"seller": { "razon_social": "Tienda Ejemplo SpA", "rut": "76123456-0",
"domicilio": "Av. Ejemplo 123, Santiago", "contacto": "ayuda@tienda-ejemplo.cl" },
"ai_disclosure": { "is_ai_agent": true, "purpose": "purchase_assistance" },
"price_includes_tax": true,
"delivery": { "cost": 4990, "estimated_delivery": "3 días hábiles" }
}
}
El pedido después del pago y de un retracto
{
"id": "ord_5521",
"checkout_id": "chk_7f3a",
"currency": "CLP",
"totals": [{ "type": "total", "amount": 194980 }],
"tax_documents": [{
"type": 39, "folio": 4512330, "issuer_rut": "76123456-0", "receiver_rut": "66666666-6",
"issued_at": "2026-12-03T14:22:05-03:00", "total": 194980, "net": 163849, "iva": 31131,
"issue_trigger": "payment_confirmed", "sii_status": "accepted",
"representation_url": "https://tienda-ejemplo.cl/dte/39/4512330" }],
"consumer_terms": {
"confirmation": { "channel": "email", "sent_at": "2026-12-03T14:22:40-03:00",
"contract_copy_url": "https://tienda-ejemplo.cl/contrato/ord_5521" } },
"adjustments": [{
"id": "adj_1", "type": "refund", "status": "completed",
"occurred_at": "2026-12-09T10:00:00-03:00",
"description": "Retracto dentro de 10 días",
"tax_document": { "type": 61, "folio": 88213, "issued_at": "2026-12-09T10:05:00-03:00",
"total": 194980, "ref_type": 39, "ref_folio": 4512330,
"ref_date": "2026-12-03", "cod_ref": 1,
"razon": "Anula boleta por retracto" } }]
}
9. Equivalencias en ACP
Los objetos base de ACP son cerrados (additionalProperties: false), así que los campos de esta extensión solo validan contra un esquema que combine el de ACP con el nuestro. La versión para ACP se activará cuando el programa de OpenAI incluya Chile; hoy sus catálogos de productos cubren Estados Unidos, Canadá y México.
| Pieza | Ya existe en ACP | Lo que agrega Comercio IA |
|---|---|---|
| Boleta o factura | Order.confirmation (invoice_number, receipt_url) | Tipo de DTE, folio, RUT del emisor, estado en el SII |
| Comprador de factura | buyer.company.tax_id, nombre | Giro, dirección, comuna; elección de boleta o factura |
| Retracto | Enlace return_policy; campo de catálogo return_deadline_in_days | Campos estructurados de retracto |
| Garantía legal | disclosures[] por producto | Campos estructurados de garantía |
| Nota de crédito | Order.adjustments[] | Referencia al DTE 61 |
| Pago | capabilities.payment.handlers[] con psp | Los cinco medios de pago chilenos; los pagos con redirección aún no están definidos en ACP (propuesta #142) |
10. Esquemas
JSON Schema draft 2020-12, autodescriptivos ($id, name, version), con una entrada en $defs por cada capacidad que extienden, compuesta con allOf, y un bloque requires con la versión mínima del núcleo.
| Nombre | Esquema |
|---|---|
cl.comercioia.shopping.tax_document | /ucp/schemas/tax_document/2026-10-09.json |
cl.comercioia.shopping.consumer_terms | /ucp/schemas/consumer_terms/2026-10-09.json |
cl.comercioia.shopping.credit_note | /ucp/schemas/credit_note/2026-10-09.json |
cl.comercioia.webpay_plus | /ucp/handlers/webpay_plus/2026-10-09.json |
cl.comercioia.oneclick_mall | /ucp/handlers/oneclick_mall/2026-10-09.json |
cl.comercioia.mercadopago | /ucp/handlers/mercadopago/2026-10-09.json |
cl.comercioia.getnet | /ucp/handlers/getnet/2026-10-09.json |
cl.comercioia.khipu | /ucp/handlers/khipu/2026-10-09.json |
11. Versionado y gobernanza
- Cada versión tiene fecha (
AAAA-MM-DD) y queda publicada en su propia dirección. Una versión publicada no se modifica: los cambios salen en una versión nueva. - Las extensiones de terceros se versionan de forma independiente del núcleo, como permiten UCP y ACP. Cada versión declara qué versiones del núcleo requiere.
- Se mantiene compatibilidad con la versión vigente de UCP y la anterior.
- Comentarios abiertos hasta el 30 de noviembre de 2026 en el repositorio público. Primera versión estable prevista para enero de 2027, al cumplir el camino a la 1.0.
- Si un proveedor publica un medio de pago oficial, esta especificación lo adopta y marca el suyo como obsoleto.
- Cuando haya adopción amplia, las piezas que sirvan a otros países se propondrán al núcleo de UCP o ACP por sus procesos formales.
12. Preguntas abiertas
Temas que deben revisar abogados antes de la versión estable:
- En una venta a distancia, cuándo ocurre la entrega para efectos del DL 825 art. 55, y si emitir la boleta al confirmarse el pago es el criterio correcto por defecto.
- Si un agente de IA que completa una compra cuenta como «plataforma» u «operador» bajo el DS 6/2021, y qué responsabilidad le corresponde.
- Si un orquestador que no retiene fondos queda fuera del capítulo III.J.2 del Banco Central y de la NCG 541 de la CMF.
- Los roles de tratamiento de datos bajo la Ley 21.719 (vigente desde el 1 de diciembre de 2026) cuando un agente comparte datos del comprador con la tienda, y la forma del mandato del comprador.
- Si SERNAC fija un plazo para la confirmación del art. 12 A.
13. Fuentes
- UCP, especificación y esquemas, versión 2026-08-25: ucp.dev
- ACP, versión 2026-04-17: repositorio ACP
- Transbank Developers, Webpay Plus y Oneclick: transbankdevelopers.cl
- Mercado Pago Developers Chile: mercadopago.cl/developers
- Getnet Web Checkout (PlacetoPay): docs.placetopay.dev
- Khipu API v3: docs.khipu.com
- SII, Res. Ex. 74/2020 y formato DTE: sii.cl
- DL 825, Ley 19.496, Ley 21.398, DS 6/2021 y Ley 21.719: BCN Ley Chile
- SERNAC, Res. Ex. 33/2022 y 779/2023: sernac.cl