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-25 or later. ACP 2026-04-17 mapping 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 from comercioia.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

FieldRuleSource
document_choiceboleta (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
receiverRequired 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[]

FieldRuleSource
type, folioDTE type and the folio number authorized by the SII.DTE format
issuer_rut, receiver_rutA boleta to an unidentified consumer carries the generic RUT 66666666-6.DTE format
issued_at, issue_triggerIssued 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, exemptInteger pesos. The total includes VAT.DL 825
sii_track_id, sii_statusEach boleta reaches the SII within one hour of issue.SII Res. Ex. 74/2020
representation_urlAn 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.

FieldRuleSource
sellerThe 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_disclosureThe 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_taxMUST be true for consumer sales: the total price includes taxes.Ley 19.496 art. 30
deliveryShipping cost and estimated delivery, shown before payment.DS 6/2021
installmentsOnly 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

FieldDefault and rule
window_days10 calendar days from receipt of the goods, or from contracting for services.
window_days_without_confirmation90, if the art. 12 A written confirmation wasn't sent.
refund_within_days45, with no deductions.
excluded, exclusion_reasonGoods 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

FieldDefault and rule
months6 months from receipt.
remediesrepair, replace or refund, at the buyer's choice.
remote_claim_channelA 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.

FieldRule
type, folio, issued_at, totalThe document issued, in integer pesos.
ref_type, ref_folio, ref_dateThe original document it refers to (for example, boleta 39).
cod_ref1 cancels the document, 2 corrects text, 3 corrects amounts.
razonReason 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:

  1. The store creates the payment with its own account at the provider.
  2. The checkout answers status: "requires_escalation" with a continue_url and a message with severity: "requires_buyer_input".
  3. The buyer pays on the provider's page.
  4. 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

SituationcodeseverityWhat the agent does
The issuer declines the paymentpayment_failedrecoverableOffers a retry or another payment method.
Insufficient fundspayment_failedrecoverableSame as a decline; the detail goes in content.
The buyer didn't pay in time (the provider session expires)payment_failedrecoverableA new attempt creates a new transaction.
Provider unavailable or network errorpayment_failedrecoverableRetries later; the store checks the status before creating another payment.
The buyer must pay on the provider's page(checkout status)requires_buyer_inputSends the buyer to continue_url.

Webpay Plus · cl.comercioia.webpay_plus

Provider
Transbank
Create
POST /rswebpaytransaction/api/webpay/v1.2/transactions with 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, so continue_url points to a store page that submits it automatically.
Confirmation
Commit (PUT …/transactions/{token}) when the buyer returns. Approved only if response_code = 0 and status = 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_user and the store's commerce code inside the Mall.
How the buyer pays
Only once, at enrollment. With no active enrollment, the response sets enrollment_required and sends the buyer to continue_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-Key header.
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/session with 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/payments with 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.

PieceAlready in ACPWhat Comercio IA adds
Boleta or facturaOrder.confirmation (invoice_number, receipt_url)DTE type, folio, issuer RUT, SII status
Factura buyerbuyer.company.tax_id, nameLine of business, address, comuna; boleta-or-factura choice
Right of withdrawalreturn_policy link; feed field return_deadline_in_daysStructured withdrawal fields
Legal warrantyPer-item disclosures[]Structured warranty fields
Credit noteOrder.adjustments[]DTE 61 reference
Paymentcapabilities.payment.handlers[] with pspThe 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.

NameSchema
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