Cada track.* registra um sinal e o SDK o manda sozinho. Nunca lança erro nem espera a rede: chame sem await, no handler do clique.

Os métodos

Todos recebem a recomendação (na API, Decision: a lista de produtos recomendados para aquele momento) ou seu decision_id. Exceto a impressão e o checkout, também o resultado (ou seu item_id).
Cada método devolve o id do sinal, ou undefined se não deu para montá-lo (onSignalError diz por quê). Aceitam signalId, um id próprio e estável; cartId, que substitui o da instância; e occurredAt, por padrão agora.

A compra não é um sinal

Quem diz que uma venda foi fechada é o pedido da sua loja, não o navegador. Para a CrossUp ligá-lo à recomendação, passe o id do carrinho uma vez, ao criar a instância; ele viaja sozinho em cada pedido e cada sinal:
Como ele é cruzado com o pedido: Sinais e atribuição.
checkoutStarted e cartId ainda não estão na versão publicada no npm (0.1.0), que traz um track.purchase que o contrato já não aceita. Até a próxima versão, mande checkout_started e cart_id pela API.
Cada sinal leva sozinho o visitante e o contexto, sem dados pessoais: Visitante e contexto.

Escutar os resultados

Em testes, ou antes de fechar uma sessão de compra no servidor:

Se você não vê

Sinais e atribuição

Quando mandar cada sinal e o que a CrossUp mede com eles.

Registrar sinais pela API

A operação, com playground.