Cada track.* registra una señal y el SDK la manda solo. Nunca tira ni espera la red: llamalo sin await, desde el handler del clic.

Los métodos

Todos reciben la recomendación (en la API, Decision: la lista de productos recomendados para ese momento) o su decision_id. Salvo la impresión y el checkout, también el resultado (o su item_id).
Cada método devuelve el id de la señal, o undefined si no se pudo armar (onSignalError dice por qué). Aceptan signalId, un id propio y estable; cartId, que pisa el de la instancia; y occurredAt, por defecto ahora.

La compra no es una señal

Que una venta se cerró lo dice la orden de tu tienda, no el navegador. Para que CrossUp la ate a la recomendación, pasale el id del carrito una vez, al crear la instancia; viaja solo en cada pedido y cada señal:
Cómo se cruza con la orden: Señales y atribución.
checkoutStarted y cartId todavía no están en la versión publicada en npm (0.1.0), que trae un track.purchase que el contrato ya no acepta. Hasta la próxima versión, mandá checkout_started y cart_id por la API.
Cada señal lleva sola el visitante y el contexto, sin datos personales: Visitante y contexto.

Escuchar los resultados

En tests, o antes de cerrar una sesión de compra en el servidor:

Si no lo ves

Señales y atribución

Cuándo mandar cada señal y qué mide CrossUp con ellas.

Registrar señales por API

La operación, con playground.