Contrato v1.0

Envía una cotización al nuevo sistema

Esta API recibe una cotización que ya fue formalizada en tu sistema. Envías un JSON, la plataforma lo valida y te devuelve el número creado.

Recursos de integración

Descargar colección Postman

Contrato v1.0

Descarga la colección una sola vez y luego importa el ambiente correspondiente. Los archivos de ambiente son plantillas seguras: debes completar la URL y el token entregados para cada servidor.

  1. Importa la colección en Postman.
  2. Importa uno de los tres ambientes y selecciónalo en la esquina superior derecha.
  3. Reemplaza baseUrl e integrationToken con los valores entregados para ese ambiente.
Ninguna descarga contiene credenciales reales. Solicita las credenciales del ambiente por el canal autorizado y no las incluyas en código ni archivos compartidos.

Tu primer envío, paso a paso

  1. Usa la URL del ambiente donde estás trabajando: DEV, QA o Producción.
  2. Agrega el token de integración en el header X-Integration-Token.
  3. Envía un POST con JSON a /api/v1/integraciones/cotizaciones.
  4. Guarda la respuesta. Allí vendrán el id y el numero de la cotización creada.
POSThttps://<ambiente>/api/v1/integraciones/cotizaciones
Content-Type: application/json
X-Integration-Token: <TOKEN_DEL_AMBIENTE>
La credencial de integración es obligatoria. Si aún no la tienes, solicítala al responsable del ambiente por el canal autorizado.

JSON mínimo funcional

Este ejemplo crea una cotización con pago pendiente y una línea reservada desde bodega. Reemplaza los valores de ejemplo por los de tu sistema.

{
  "versionContrato": "1.0",
  "idSolicitud": "8f7d55a2-4a5a-4c16-9c7a-eec9dbfaa1a0",
  "claveIdempotencia": "3c3b33af-529c-4a45-a662-89c617683ac2",
  "fechaHoraEnvio": "2026-07-28T10:30:00-04:00",
  "origen": {
    "software": { "identificador": "ERP", "nombre": "Mi ERP", "version": "1.0", "ambiente": "DEV" },
    "evento": "FORMALIZAR_COTIZACION",
    "fechaHoraEvento": "2026-07-28T10:29:00-04:00",
    "usuario": { "idUsuarioOrigen": "15", "nombreUsuario": "maria", "nombreCompleto": "María Pérez", "correo": "maria@empresa.cl" }
  },
  "destino": { "codigoEmpresa": "REVESTIMIENTOS-CHILE", "codigoOrganizacion": "RC-SCL" },
  "cotizacion": {
    "idCotizacionOrigen": "COT-1042",
    "fechaHoraFormalizacion": "2026-07-28T10:29:00-04:00",
    "clienteCotizacion": { "rut": "76.123.456-7", "nombreORazonSocial": "Constructora Ejemplo SpA" },
    "lineas": [{
      "numeroLinea": 1,
      "producto": { "sku": "PORC-90X90-GRIS", "nombre": "Porcelanato gris 90x90", "unidadMedida": "M2" },
      "cantidad": 10, "precioUnitarioNeto": 10000, "montoNeto": 100000, "montoIva": 19000, "montoTotal": 119000,
      "asignacionesStock": [{ "secuencia": 1, "tipoStock": "FISICO", "cantidad": 10, "bodega": { "codigo": "SCL-01", "nombre": "Bodega Santiago" } }]
    }],
    "totales": { "montoNeto": 100000, "montoIva": 19000, "montoTotal": 119000, "montoPagado": 0, "saldo": 119000 },
    "estadoPago": "PAGO_PENDIENTE",
    "pagos": []
  }
}

Para una cotización pagada, usa estadoPago: "PAGADO", deja saldo en 0, informa el total en montoPagado y agrega al menos un elemento en pagos.

Antes de enviar: cinco reglas simples

  1. No repitas una clave de idempotencia para otra cotización. Un GUID funciona bien.
  2. Los totales deben cuadrar: neto + IVA = total, tanto en cada línea como en la cotización.
  3. La suma de pagos debe coincidir con montoPagado. Si no hay pagos, envía "pagos": [].
  4. Cada línea debe indicar su stock: FISICO con bodega o EN_CAMINO con número de envío.
  5. Una cotización PAGADA debe tener saldo cero. Si está pendiente, después un aprobador de pago decidirá si se habilita para facturar.

Mapa completo del contrato

Usa el índice lateral para llegar al objeto que necesitas y abre su bloque para consultar todos sus campos. Cada sección explica qué representa el objeto, sus tipos de datos y sus reglas; el JSON mínimo anterior muestra cómo se combinan en una solicitud real.

Obligatorio significa que la API lo exige; Condicional, que depende de otro valor; Opcional, que puedes omitir.

bodySolicitud completa
CampoTipoUso
versionContratostringObligatorio. Envía 1.0. La API rechaza versiones diferentes.
idSolicitudstringObligatorio. Identifica este intento de envío; puede ser GUID.
claveIdempotenciastringObligatorio. Clave única de la operación. Reúsala solo al reintentar exactamente el mismo JSON.
fechaHoraEnviofecha ISO 8601Opcional. Momento en que tu sistema envió el mensaje.
origenQuién y desde qué sistema envía
eventostringOpcional. Recomendado: FORMALIZAR_COTIZACION.
fechaHoraEventofecha ISO 8601Opcional. Fecha de formalización en el sistema de origen.
softwareDatos del sistema de origen
identificadorstringOpcional. Código corto del sistema, por ejemplo ERP.
nombrestringOpcional. Nombre legible del software.
versionstringOpcional. Versión del software.
ambientestringOpcional. Ambiente de origen, por ejemplo DEV.
usuarioUsuario que formalizó
idUsuarioOrigenstringOpcional. ID del usuario en origen.
nombreUsuariostringOpcional. Usuario de acceso.
nombreCompletostringOpcional. Nombre que verá el historial.
correostringOpcional. Correo del usuario.
destinoEmpresa y sucursal que reciben la cotización
codigoEmpresastringObligatorio. Empresa receptora, por ejemplo REVESTIMIENTOS-CHILE.
codigoOrganizacionstringObligatorio. Sucursal u organización, por ejemplo RC-SCL.
cotizacionDocumento, cliente, líneas, pagos y stock
idCotizacionOrigenstringObligatorio. ID estable de tu cotización. No se puede repetir en la misma empresa y sucursal.
numeroCotizacionstringOpcional. Número visible en el sistema de origen.
versionOrigenenteroOpcional. Versión del documento en origen.
fechaHoraFormalizacionfecha ISO 8601Opcional. Fecha de formalización.
monedastringOpcional. Por defecto CLP.
estadoPagostringObligatorio. PAGADO, PAGO_PENDIENTE, PENDIENTE o PARCIAL.
clienteCotizacionCliente asociado a la venta
idClienteOrigenstringOpcional. ID del cliente en origen.
rutstringObligatorio. Identificador del cliente. Se usa para crear o actualizar el maestro.
nombreORazonSocialstringOpcional. Nombre preferido del cliente.
razonSocialstringOpcional. Alternativa a nombreORazonSocial.
girostringOpcional. Giro comercial.
correostringOpcional. Correo general.
correoDtestringOpcional. Correo para documentos tributarios; tiene prioridad sobre correo.
telefonostringOpcional. Teléfono de contacto.
direccion y direccionTributariaDirecciones del cliente

Ambos objetos son opcionales y tienen la misma estructura. Si envías direccionTributaria, tiene prioridad al guardar el cliente.

lineastringDirección o calle.
comunastringComuna.
ciudadstringCiudad.
regionstringRegión.
paisstringPaís.
clienteFacturacionCliente que aparecerá al facturar

Es opcional. Si no lo envías, se usa clienteCotizacion. Tiene exactamente los mismos campos de cliente indicados arriba y agrega:

inicialmenteIgualAClienteCotizacionbooleanOpcional. Marca informativa para el sistema de origen.
lineas[]Productos cotizados; debe existir al menos una
numeroLineaenteroPrácticamente obligatorio. Debe ser único dentro de la cotización.
idLineaOrigenstringOpcional. ID de la línea en origen.
cantidaddecimalObligatorio. Mayor que cero.
precioUnitarioNetodecimalOpcional. Precio unitario sin IVA.
montoNetodecimalObligatorio en la práctica. Debe cuadrar con los totales.
montoIvadecimalObligatorio en la práctica. Debe cuadrar con los totales.
montoTotaldecimalObligatorio en la práctica. Neto + IVA.
productoProducto o material de la línea
idProductoOrigenstringOpcional. ID en origen.
skustringObligatorio. Código único del producto dentro de la empresa.
nombrestringObligatorio. Nombre que se mostrará.
descripcionstringOpcional. Descripción ampliada.
unidadMedidastringOpcional. Por defecto UN.
descuentoDescuento aplicado a la línea
porcentajedecimalOpcional. Porcentaje de descuento.
montodecimalOpcional. Monto de descuento usado en la cotización.
asignacionesStock[]Origen del stock; debe cubrir toda la cantidad de la línea
secuenciaenteroOpcional. Orden de la asignación.
tipoStockstringObligatorio. FISICO o EN_CAMINO.
cantidaddecimalObligatorio en la práctica. La suma de asignaciones debe ser igual a la cantidad de la línea.
numeroEnviostringCondicional. Obligatorio si tipoStock es EN_CAMINO.
bodegaBodega del stock físico
idBodegaOrigenstringOpcional. ID de bodega en origen.
codigostringCondicional. Obligatorio para FISICO.
nombrestringOpcional. Nombre visible de la bodega.
totalesResumen monetario
montoNetodecimalObligatorio en la práctica. Suma de netos de las líneas.
montoIvadecimalObligatorio en la práctica. Suma de IVA de las líneas.
montoTotaldecimalObligatorio en la práctica. Neto + IVA.
montoPagadodecimalObligatorio en la práctica. Suma de los pagos enviados.
saldodecimalObligatorio en la práctica. Total menos monto pagado.
pagos[]Pagos informados; usa un arreglo vacío si no hay pagos
idPagoOrigenstringObligatorio. ID único del pago en tu sistema.
fechaHoraPagofecha ISO 8601Obligatorio. Fecha y hora del pago.
montodecimalObligatorio. Mayor que cero.
medioPagostringObligatorio. Por ejemplo, TRANSFERENCIA.
referenciastringObligatorio. Número de transacción o comprobante verificable.
observacionstringOpcional. Nota sobre el pago.
pagadorPersona o empresa que pagó
rutstringObligatorio. RUT del pagador.
nombreORazonSocialstringObligatorio. Nombre verificable del pagador.
correostringOpcional. Correo del pagador.
registradoPorUsuario que registró el pago

Es opcional. Si lo omites, se usa origen.usuario. Tiene los mismos campos de usuario.

observacionesNotas de la cotización
comercialstringOpcional. Nota que acompaña la venta.
internastringOpcional. Nota interna.
embarquesEnCamino[]Envíos que contienen stock aún no recibido
numeroEnviostringOpcional. Debe coincidir con numeroEnvio de una asignación EN_CAMINO.
fechaTentativaArribofechaOpcional. Formato AAAA-MM-DD.
estadostringOpcional. Estado descriptivo del envío.
Puedes enviar campos adicionales en los objetos del JSON. La API los conserva en el payload original para trazabilidad, pero no les aplica reglas de negocio en esta versión.

Documentación viva

Historial de cambios del contrato

Versión vigente: v1.0

Consulta esta sección antes de actualizar tu integración. Aquí se resumen los cambios que pueden afectar el JSON enviado, sus validaciones o la interpretación de una respuesta.

  1. v1.0 Vigente

    Primera versión documentada

    • Define la solicitud de cotización formalizada, sus clientes, líneas, totales, pagos, observaciones y stock asignado.
    • Establece idempotencia mediante claveIdempotencia y trazabilidad mediante los identificadores del sistema de origen.
    • Exige declarar una versión de contrato soportada; una versión desconocida responde HTTP 422.
    • Documenta los estados de pago, las validaciones monetarias y las reglas para stock físico o en camino.
La documentación es parte del contrato. Toda modificación de campos, validaciones, ejemplos, errores o comportamiento de la API debe publicarse aquí junto con su versión correspondiente.

Qué significa cada respuesta

HTTPQué pasóQué hacer
201La cotización fue creada.Guarda el id y el numero retornados.
200Es un reintento del mismo envío.Es correcto; no se creó un duplicado.
401La solicitud no está autorizada.Verifica la credencial del ambiente y, si el problema continúa, contacta al responsable de la integración.
409La clave idempotente o el ID de origen ya se usó con datos distintos.No reintentes cambiando el JSON; revisa el envío original.
422El JSON no cumple una regla.Lee el detalle de errores y corrige los campos antes de reenviar.