Open proposal · version 2026-10-09
Comercio IA specification
A Chilean extension to the Universal Commerce Protocol (UCP) and the Agentic Commerce Protocol (ACP). It defines how an AI agent and a store exchange the information Chilean law requires to close a distance sale, and how to pay with Chilean payment methods.
- Version
2026-10-09(open proposal: ready to implement and comment on)- Namespace
cl.comercioia.*- Schemas served from
https://comercioia.cl/ucp/…- Requires
- UCP
2026-08-25or later. ACP2026-04-17mapping in the ACP section. - License
- Apache-2.0
This specification describes tax and consumer-protection rules, but it is not legal advice. Each store is responsible for deciding which notices apply to it.
1. Conventions
- MUST, MUST NOT, SHOULD and MAY are used as in RFC 2119.
- Amounts are integer Chilean pesos. The peso has no minor unit, so the minor unit is the peso, as in the standards.
- RUT (Chilean taxpayer ID) without dots, with a hyphen and the modulo 11 check digit, e.g.
76123456-0. Anyone receiving a RUT MUST validate the check digit. - Dates in RFC 3339 with a time zone, e.g.
2026-12-03T14:22:05-03:00. - Open objects. As UCP asks, the schemas don't close objects or use closed lists: codes are documented as examples, and an unknown value MUST be handled as each field says.
- Domain authority. Every
cl.comercioia.*schema is served fromcomercioia.cl, with no redirects and no CDN under another name. A schema fetched from another domain is ignored by agents.
2. Declaring it in the store profile
The store declares the extensions under capabilities and the payment methods under payment_handlers in its /.well-known/ucp profile. Agents negotiate by name and version: an extension the agent doesn't announce stays inactive, and checkout continues on the core fields.
{
"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/en/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/en/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/en/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/en/spec/#webpay-plus",
"schema": "https://comercioia.cl/ucp/handlers/webpay_plus/2026-10-09.json",
"available_instruments": [{ "type": "redirect" }],
"config": { "environment": "production" } }]
}
}
}
3. Tax document cl.comercioia.shopping.tax_document
Extends dev.ucp.shopping.checkout and dev.ucp.shopping.order. At checkout the buyer chooses a boleta or a factura. On the order, the store returns the documents it issued.
On checkout: tax_document
| Field | Rule | Source |
|---|---|---|
document_choice | boleta (default) or factura. Consumers get a boleta (39, or 41 exempt); a factura (33 or 34) is only for VAT-registered buyers. An unknown value MUST be treated as a boleta, with a notice in messages[]. | DL 825 arts. 52–53 |
receiver | Required for a factura: rut, razon_social (≤100), giro (line of business, ≤40), direccion (≤70), comuna (≤20); optional ciudad and email. | SII DTE format; DS 55 art. 69 |
On the order: tax_documents[]
| Field | Rule | Source |
|---|---|---|
type, folio | DTE type and the folio number authorized by the SII. | DTE format |
issuer_rut, receiver_rut | A boleta to an unidentified consumer carries the generic RUT 66666666-6. | DTE format |
issued_at, issue_trigger | Issued no later than delivery. The recommended default is to issue on payment confirmation (payment_confirmed). A factura issued after dispatch needs a dispatch guide (52) at dispatch. | DL 825 art. 55 |
total, net, iva, exempt | Integer pesos. The total includes VAT. | DL 825 |
sii_track_id, sii_status | Each boleta reaches the SII within one hour of issue. | SII Res. Ex. 74/2020 |
representation_url | An https link to a representation the buyer can keep, delivered immediately by email, chat, link or QR. | SII Res. Ex. 74/2020 |
Sales to companies
A factura (33 or 34) is for VAT-registered buyers: the agent sends document_choice: "factura" and a receiver with the company's RUT, legal name, line of business, address and comuna. The consumer-law right of withdrawal and legal warranty do not apply to these sales, except the protections for micro and small businesses under Ley 20.416, which are under legal review.
Credit payment terms, for example net 30, use the UCP core extension dev.ucp.common.payment.terms. Version 2026-10-16 proposes adding the references large buyers require: purchase order (801), HES, contract (803) and dispatch guide (52). Comment on the proposal.
4. Consumer terms cl.comercioia.shopping.consumer_terms
Extends checkout and order with the information a distance seller must give a consumer before and after the sale. It is used in consumer sales.
| Field | Rule | Source |
|---|---|---|
seller | The seller's razon_social, rut, domicilio and contacto, visible before payment; optional platform_role stating the role of any intermediary platform. | DS 6/2021 |
ai_disclosure | The agent declares it is an AI agent (is_ai_agent, agent_name, purpose, human_contact). The store echoes it in its response. No dark patterns; automated refusals must explain why. | SERNAC Res. Ex. 33/2022 |
price_includes_tax | MUST be true for consumer sales: the total price includes taxes. | Ley 19.496 art. 30 |
delivery | Shipping cost and estimated delivery, shown before payment. | DS 6/2021 |
installments | Only when installments are offered: count, installment_amount, monthly rate, cae (annual equivalent cost), total_cost and cash_price. The cash price MUST be at least as visible as the installment price. | Ley 19.496 arts. 17 G and 37 |
confirmation (order) | Written confirmation with a full copy of the contract, sent once the sale closes: channel, sent_at, contract_copy_url. Without it, the withdrawal window extends from 10 to 90 days. | Ley 19.496 art. 12 A |
5. Right of withdrawal and legal warranty
Both are policy types inside core policies[], which UCP lets anyone define under their own domain. Like every UCP policy they carry type and description, an object with plain, markdown or html. Their schemas live in consumer_terms.
cl.comercioia.policy.retracto
| Field | Default and rule |
|---|---|
window_days | 10 calendar days from receipt of the goods, or from contracting for services. |
window_days_without_confirmation | 90, if the art. 12 A written confirmation wasn't sent. |
refund_within_days | 45, with no deductions. |
excluded, exclusion_reason | Goods can only be excluded by their nature: not returnable, perishable, made to order, or opened personal-hygiene items (DS 52/2022). Services can be excluded by the seller. Example codes: not_returnable, perishable, made_to_order, hygiene_opened, service_excluded_by_seller. |
Source: Ley 19.496 art. 3 bis b), as amended by Ley 21.398. The notice is shown before payment, next to the price and no smaller, with the words «derecho a retracto».
cl.comercioia.policy.garantia_legal
| Field | Default and rule |
|---|---|
months | 6 months from receipt. |
remedies | repair, replace or refund, at the buyer's choice. |
remote_claim_channel | A distance seller offers a remote claim channel or free pickup. |
Source: Ley 19.496 arts. 20 and 21; SERNAC Res. Ex. 779/2023.
Notices that arrive even when the agent doesn't know the extension
The store MUST also send each withdrawal and warranty notice as a core warning in messages[], with presentation: "disclosure", a code equal to the policy type and a path pointing to it. UCP requires platforms not to hide, collapse or auto-dismiss these notices, and to send the buyer to continue_url if they can't show them. So the legal notices reach the buyer even through an agent that knows nothing about Chile.
6. Credit notes cl.comercioia.shopping.credit_note
Extends dev.ucp.shopping.order. Each core adjustments[] entry (refund, return, withdrawal, cancellation) MAY carry a tax_document with the credit note (61) or debit note (56) issued.
| Field | Rule |
|---|---|
type, folio, issued_at, total | The document issued, in integer pesos. |
ref_type, ref_folio, ref_date | The original document it refers to (for example, boleta 39). |
cod_ref | 1 cancels the document, 2 corrects text, 3 corrects amounts. |
razon | Reason printed on the document (≤90). |
The VAT on a credit note can only be recovered within 6 months of delivery (DL 825 arts. 21 N°2 and 70).
7. Payment methods
All five payment methods follow the same pattern, which in UCP is the core escalation pattern:
- The store creates the payment with its own account at the provider.
- The checkout answers
status: "requires_escalation"with acontinue_urland a message withseverity: "requires_buyer_input". - The buyer pays on the provider's page.
- The store confirms the result directly with the provider and creates the order.
The agent never receives card data or credentials. Public configuration (config) MUST NOT include keys or secrets. These payment methods are published by the Comercio IA initiative until each provider publishes its own; every provider is invited to review, co-sign or take theirs over.
Failures and their UCP equivalents
| Situation | code | severity | What the agent does |
|---|---|---|---|
| The issuer declines the payment | payment_failed | recoverable | Offers a retry or another payment method. |
| Insufficient funds | payment_failed | recoverable | Same as a decline; the detail goes in content. |
| The buyer didn't pay in time (the provider session expires) | payment_failed | recoverable | A new attempt creates a new transaction. |
| Provider unavailable or network error | payment_failed | recoverable | Retries later; the store checks the status before creating another payment. |
| The buyer must pay on the provider's page | (checkout status) | requires_buyer_input | Sends the buyer to continue_url. |
Webpay Plus · cl.comercioia.webpay_plus
- Provider
- Transbank
- Create
POST /rswebpaytransaction/api/webpay/v1.2/transactionswith the store's commerce code.buy_order≤26 characters,session_id≤61, amount in integer pesos,return_url≤256.- How the buyer pays
- Webpay requires a form POST of
token_ws, socontinue_urlpoints to a store page that submits it automatically. - Confirmation
- Commit (
PUT …/transactions/{token}) when the buyer returns. Approved only ifresponse_code = 0andstatus = AUTHORIZED. - Expiry
- 5-minute token; the form allows 4 minutes in production (
token_ttl_seconds,payment_window_seconds). - Design for
- There is no webhook: the store MUST sweep abandoned payments by status query (status can be queried for 7 days). There is no idempotency key: the store uses its own.
- Refunds
- Reversal or nullification, full or partial, within Transbank's time limits.
Oneclick Mall · cl.comercioia.oneclick_mall (proposed)
- Provider
- Transbank
- Create
- A one-time card enrollment on Transbank's page. After that, server-to-server charges with the enrollment's
tbk_userand the store's commerce code inside the Mall. - How the buyer pays
- Only once, at enrollment. With no active enrollment, the response sets
enrollment_requiredand sends the buyer tocontinue_url. - Confirmation
- Synchronous authorization response.
- Design for
- The closest thing to in-chat payment available in Chile today. Daily per-user limits are set at affiliation. Before use, confirm with Transbank whether a charge initiated through an AI agent fits its terms.
Mercado Pago · cl.comercioia.mercadopago
- Provider
- Mercado Pago
- Create
- Orders or Preferences API with the store's credentials.
external_reference≤64,notification_url≤248, integer unit prices in Chile,X-Idempotency-Keyheader. - How the buyer pays
- At the checkout URL Mercado Pago returns.
- Confirmation
- Signed webhook (
x-signature) plus reconciliation. - Refunds
- Full or partial, within Mercado Pago's time limits.
Getnet · cl.comercioia.getnet
- Provider
- Getnet (Web Checkout on the PlacetoPay platform)
- Create
POST /api/sessionwith the store's credentials;reference≤32. Sessions last 30 minutes by default (session_ttl_seconds).- How the buyer pays
- At the returned
processUrl. - Confirmation
- The notification is sent only once, so the store MUST also query
/api/session/{requestId}. - Design for
- Which features Getnet Chile enables is to be confirmed with Getnet.
Khipu · cl.comercioia.khipu
- Provider
- Khipu (bank transfer)
- Create
POST https://payment-api.khipu.com/v3/paymentswith the store's API key.- How the buyer pays
- From their bank account, at the returned
payment_url. - Confirmation
- Signed webhook (
x-khipu-signature), retried by Khipu, plus status query (pending,verifying,done). - Design for
- No idempotency key is documented. Initiating payments from bank accounts is a regulated activity: Khipu holds that registration, not whoever implements this specification.
8. Examples
The examples show only the relevant fields. Example RUTs pass the modulo 11 check. Buyer-facing text is in Spanish, as a Chilean store would send it.
Response to complete_checkout: pay with 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" }
}
}
The order after payment and after a withdrawal
{
"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. ACP mapping
ACP's base objects are closed (additionalProperties: false), so this extension's fields only validate against a schema that combines ACP's with ours. The ACP version will be switched on when OpenAI's program includes Chile; today its product feeds cover the United States, Canada and Mexico.
| Piece | Already in ACP | What Comercio IA adds |
|---|---|---|
| Boleta or factura | Order.confirmation (invoice_number, receipt_url) | DTE type, folio, issuer RUT, SII status |
| Factura buyer | buyer.company.tax_id, name | Line of business, address, comuna; boleta-or-factura choice |
| Right of withdrawal | return_policy link; feed field return_deadline_in_days | Structured withdrawal fields |
| Legal warranty | Per-item disclosures[] | Structured warranty fields |
| Credit note | Order.adjustments[] | DTE 61 reference |
| Payment | capabilities.payment.handlers[] with psp | The five Chilean payment methods; redirect payments are not yet specified in ACP (proposal #142) |
10. Schemas
JSON Schema draft 2020-12, self-describing ($id, name, version), with one $defs entry per capability they extend, composed with allOf, and a requires block with the minimum core version.
| Name | Schema |
|---|---|
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. Versioning and governance
- Every version is dated (
YYYY-MM-DD) and stays published at its own address. A published version is never modified: changes ship in a new version. - Third-party extensions version independently of the core, as UCP and ACP allow. Each version states which core versions it requires.
- Compatibility is kept with the current UCP release and the previous one.
- Comments are open until 30 November 2026 in the public repository. The first stable release is planned for January 2027, once the path to 1.0 is complete.
- If a provider publishes an official payment handler, this specification adopts it and marks its own as deprecated.
- Once adoption is broad, pieces useful to other countries will be proposed to the UCP or ACP core through their formal processes.
12. Open questions
Topics for legal review before the stable release:
- When delivery happens in a distance sale for the purposes of DL 825 art. 55, and whether issuing the boleta on payment confirmation is the right default.
- Whether an AI agent that completes a purchase counts as a "platform" or "operator" under DS 6/2021, and what liability follows.
- Whether an orchestrator that never holds funds is outside Banco Central chapter III.J.2 and CMF NCG 541.
- Data-processing roles under Ley 21.719 (in force from 1 December 2026) when an agent shares buyer data with the store, and the form of the buyer's mandate.
- Whether SERNAC sets a deadline for the art. 12 A confirmation.
13. Sources
- UCP specification and schemas, release 2026-08-25: ucp.dev
- ACP, release 2026-04-17: ACP repository
- Transbank Developers, Webpay Plus and 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 and DTE format: sii.cl
- DL 825, Ley 19.496, Ley 21.398, DS 6/2021 and Ley 21.719: BCN Ley Chile
- SERNAC, Res. Ex. 33/2022 and 779/2023: sernac.cl