quore/Documentación de la API

Widget y embed

El cotizador embebible: una etiqueta script en cualquier sitio, con branding, pre-llenado y eventos. Esta es la referencia general; cada producto tiene su propio snippet en su configuración de distribución.

Snippet básico

  • Usa siempre una clave pública (pk_…). data-channel elige el canal: public (cliente final) o intermediary.
  • Con una clave de intermediario el widget opera siempre como ese intermediario.
  • Cada canal se habilita por producto (widget público y widget de intermediarios).

HTML

<script
  src="/widget/v1/embed.js"
  data-product-id="PRODUCT_ID"
  data-api-key="pk_live_…"
  data-channel="public"
  async
></script>

Eventos

El widget avisa a tu página cada cotización, póliza y pago: escucha los eventos en la etiqueta script, o usa onQuote, onPolicy y onPayment con la API JS.

Escuchar eventos

const el = document.querySelector('script[src*="embed.js"]');
el.addEventListener('quore:quote', (e) => console.log(e.detail));
el.addEventListener('quore:policy', (e) => console.log(e.detail));
el.addEventListener('quore:payment', (e) => console.log(e.detail));

Contenido (e.detail)

// quore:quote
{ quoteId, coverages, … }
// quore:policy
{ id, policyNumber, status, payment? }
// quore:payment
{ policyId, policyStatus, paymentMethodStatus, settling }
  • quore:quote: cada cotización calculada.
  • quore:policy: la póliza emitida, con payment si el cobro sigue online.
  • quore:payment: el resultado de un pago o del registro del medio de pago dentro del widget.

Embed firmado (portal propio de la aseguradora)

  • Para embeber el widget de intermediarios dentro de tu propio portal, con el intermediario ya identificado.
  • Tu servidor firma intermediaryRef.timestamp.nonce (con un nonce aleatorio por carga de página) con HMAC-SHA256 y el secreto de firma de embed de tu cuenta, y escribe la etiqueta con la firma y el nonce.
  • La firma vale 5 minutos y un solo uso; el widget la canjea por una sesión de 15 minutos que se renueva sola.
  • Usa tu clave pública de la cuenta, no una clave de intermediario.

Cómo funciona: el intermediario ya inició sesión en tu portal, así que no vuelve a iniciar sesión en Quore.

  1. Tu servidor, que ya sabe quién está logueado, firma intermediaryRef.timestamp.nonce y escribe la etiqueta del widget con esa firma y el nonce.
  2. El widget envía la firma a POST /api/embed/sessions. Quore verifica la firma, su vigencia y que no se haya usado antes, y busca al intermediario por su referencia externa.
  3. Quore devuelve una sesión de 15 minutos que se renueva sola. El intermediario cotiza y emite con su vista, sus productos y su comisión.

Qué desarrolla tu equipo y qué resuelve Quore:

  • Tu equipo: firmar en tu servidor (unas pocas líneas, con ejemplos más abajo) y cargar en Quore la referencia externa de cada intermediario, que debe ser el mismo ID que usa tu portal. El secreto de firma nunca debe llegar al navegador.
  • Quore: verificar la firma, crear y renovar la sesión, aplicar la jerarquía y los permisos, cotizar, emitir y cobrar.

Operar en nombre de un sub-productor: un intermediario de nivel superior puede trabajar como alguien de su estructura.

  • Para abrir el widget ya operando como un sub-productor, envía su referencia externa en data-acting-as-ref.
  • El intermediario también puede elegir a quién representa desde el propio widget.
  • Solo puede elegir intermediarios que estén debajo suyo en la jerarquía, y Quore lo verifica de nuevo en cada solicitud. La sesión siempre tiene permisos de intermediario, nunca de administrador, aunque el usuario también lo sea.
  • La cotización y la póliza quedan a nombre del intermediario representado y se calculan con su comisión. Quore también guarda quién operó realmente (actorUserId) y registra cada inicio de sesión en la auditoría.

Etiqueta

<!-- data-acting-as-ref (opcional): referencia del sub-productor a preseleccionar -->
<!-- data-quote-id (opcional): reabre esa cotización guardada directo en la emisión -->
<script src="/widget/v1/embed.js"
  data-api-key="pk_live_..."
  data-product-id="ID_DEL_PRODUCTO"
  data-intermediary-ref="<%= intermediaryRef %>"
  data-timestamp="<%= ts %>"
  data-signature="<%= sig %>"
  data-nonce="<%= nonce %>"
  data-acting-as-ref=""
  data-quote-id=""
  async
></script>

Firma en tu servidor

const crypto = require('crypto');
const ts = Math.floor(Date.now() / 1000);
const nonce = crypto.randomBytes(16).toString('hex');
const sig = crypto.createHmac('sha256', process.env.QUORE_EMBED_SECRET).update(`${intermediaryRef}.${ts}.${nonce}`).digest('hex');

Referencia completa

Atributos, branding, pre-llenado, API JS, pagos y seguridad. Los campos que se pueden pre-llenar dependen de cada producto.

  • data-variables (o variables en el JS API) es un JSON con las claves de las variables del producto. Los valores pre-llenados se pueden editar, salvo los listados en data-readonly-variables.
  • Tipos: números como número o texto ("20000000" o "20.000.000"); moneda con o sin "$"; booleanos true/false (también "si"/"no", 1/0); fechas ISO YYYY-MM-DD; opciones por su valor exacto (sin distinguir mayúsculas).
  • Un valor inválido (fuera de rango, opción inexistente, tipo incorrecto) no se carga: el campo muestra el error y conserva su valor por defecto. Nunca rompe el widget.
  • Las claves que no son variables del producto se ignoran con un aviso en la consola del navegador.
  • Las claves de campos de emisión (por ejemplo email o CUIT) se cargan en el paso de emisión.
  • data-holder carga los datos de contacto del titular en los campos de emisión que corresponden (nombre o razón social, email, teléfono, DNI/CUIT, domicilio). data-variables tiene prioridad sobre data-holder.
  • data-readonly-variables='["clave"]' bloquea esos campos (solo si llegaron con un valor válido).
  • Con data-autoquote="true", si todos los campos de cotización visibles llegaron pre-llenados y válidos, el widget muestra directo los resultados; si falta o es inválido alguno, abre el paso de ese campo.

Visibilidad por rol (Variables → Visibilidad)

  • Visible — se muestra y se puede pre-llenar.
  • Pre-llenada — no se muestra; el valor lo fija el producto y el embed no puede cambiarlo.
  • Oculta — no se muestra y el embed no puede setearla: desde una clave pública el backend ignora los valores enviados para variables ocultas al cliente (por ejemplo descuentos o sumas internas).