Lock por usuário e tipo
Um cliente final só pode ter uma conversão offramp aberta por vez. Por que, qual erro você recebe, quando o lock libera.
A BlendFi limita cada cliente final a uma conversão aberta por tipo (pix_offramp ou pix_onramp) por vez. Tentar criar uma segunda conversão offramp para o mesmo cliente final enquanto a primeira está aberta retorna erro.
A regra
Para qualquer (user_id, transaction_type), no máximo uma conversão pode estar nos estados abertos: awaiting_deposit, partially_funded (transiente, nunca observado) e standby.
A regra é cross-direction permissiva: o mesmo cliente final pode ter uma onramp aberta e uma offramp aberta simultaneamente, mas não duas do mesmo tipo.
Por que essa regra existe
USDT é fungível. O endereço de depósito é por conversão. Se um cliente final tivesse duas offramps abertas ao mesmo tempo, um depósito ambíguo poderia ser matchado em mais de uma operação aberta. A regra elimina a ambiguidade na origem: cada depósito tem uma única conversão de destino.
Quando o lock libera
O lock é liberado assim que a conversão entra em estado terminal:
completed,failed,expired,canceled,abandoned,liquidated(transitório terminal antes decompleted/failed).
Em liquidated, o lock segue ativo apenas até a liquidação avançar para completed ou failed. Na prática a janela é de segundos.
O erro que você recebe
Tentar POST /v1/quotes/:id/accept para um user_id que já tem uma conversão offramp aberta retorna um erro com código estável (a especificação completa vai na referência da API quando publicada). O request_id no erro permite rastrear a chamada no suporte.
Tratamento sugerido
Quando você recebe o erro de lock:
- Cheque se a conversão aberta é deste mesmo fluxo. Se for o mesmo cliente final tentando re-confirmar uma operação que ainda está válida, a UX correta é levá-lo de volta ao estado da conversão existente, não criar uma nova.
- Se a conversão aberta é antiga e o cliente final desistiu, cancele a anterior (se ainda em
awaiting_deposit) ou aguarde a janela expirar (expired). Aí a nova chamada de aceite passa. - Se a conversão aberta está em
standby, decida entre liquidar ou esperar a janela de 7 dias terminar emabandoned. Veja Standby e liquidação manual.
Não tente burlar o lock
O lock é enforced no banco via índice único parcial. Não há flag para desabilitá-lo, e não há caminho lateral para criar duas conversões abertas do mesmo tipo para o mesmo cliente final. Modele sua UX em torno disso.
Próximos passos
- Cancelamento: como liberar o lock antes do depósito chegar.
- Standby e liquidação manual: caminho de saída quando há depósito presente.
