Pular para o conteúdo principal
POST
curl

Carteiras autocustodiadas

Quando a carteira da contraparte foi declarada autocustodiada (counterparty.payment_method.method_type: "unhosted_wallet"), a transferência fica aguardando em UNCONFIRMED_OWNERSHIP. Chamar este endpoint com confirmed: true registra que o seu cliente verificou quem controla essa carteira e conclui a transferência (COMPLETED), tanto para saques de saída quanto para depósitos de entrada. Um depósito de entrada cujo hash on-chain já é conhecido avança para FINISHED. A carteira verificada é a da contraparte: o destino de um saque de saída ou a origem (a carteira do remetente) de um depósito de entrada. A Didit a adiciona ao catálogo de endereços de carteiras com a propriedade verificada, em nome da contraparte, para que seja comparada ao nome da contraparte (o remetente, no caso de um depósito). Se o catálogo de endereços já tiver essa carteira registrada sob um nome de titular diferente, a transferência passa para COUNTERPARTY_MISMATCHED_DATA. Se a transferência não indicar nenhuma carteira da contraparte, envie wallet_address no corpo da requisição. Quando nem a transferência nem a requisição fornecem um endereço de carteira, a requisição é rejeitada com 400. confirmed: false recusa a transferência (COUNTERPARTY_VASP_GENERAL_DECLINE).

Autorizações

x-api-key
string
header
obrigatório

Chave de API da sua aplicação, em Developers -> API keys no Business Console. A chave principal tem acesso total. Uma chave nomeada pode ter escopo restrito: nenhum acesso, leitura ou escrita por recurso, limitada a alguns fluxos ou a sessões aprovadas, a uma lista de endereços IP e a uma data de validade. 401 significa que a chave está errada, revogada ou expirada; 403 significa que nenhuma chave foi enviada, que a chave não tem acesso a este recurso ou ação, ou que a requisição veio de um endereço fora da sua lista de IPs; 404 em uma rota de sessão significa que a sessão está fora dos fluxos ou status da chave. Uma chave sem acesso a mídia recebe URLs de imagem, vídeo e PDF como null, e uma chave sem permissão de escrita em sessões recebe links e tokens de sessão como null. Consulte https://docs.didit.me/console/api-keys.

Parâmetros de caminho

transaction_id
string<uuid>
obrigatório

UUID estável da Didit da transação que sua aplicação mantém para esta transferência: a transação do lado do beneficiário em uma transferência pelo trilho INTERNAL, ou a transação que você criou (de saída ou de entrada) quando a carteira da contraparte foi declarada autocustodiada.

Corpo

application/json
confirmed
boolean
obrigatório

true para confirmar a propriedade, false para negá-la.

wallet_address
string
padrão:""

Transferências TRP recebidas: o endereço de pagamento que a Didit retorna ao VASP de origem quando você aprova. O padrão é o endereço da entrada correspondente no catálogo de endereços e, depois, beneficiary_data.wallet_address. Em uma transferência declarada de carteira autocustodiada que não indica nenhuma carteira da contraparte, é a carteira cuja propriedade você verificou; sem ela, a requisição é rejeitada com 400. Ignorado nas demais transferências.

Resposta

A transferência atualizada. Em uma transferência recebida, os originator_data/beneficiary_data da contraparte permanecem mascarados (data_masked: true) até que a propriedade seja confirmada; então data_unmasked registra quando, por que e por quem.

Objeto de transferência completo retornado pelos endpoints de confirmação de propriedade e de finalização/cancelamento. Enquanto a propriedade da carteira de uma transferência recebida não for confirmada, os campos originator_data e beneficiary_data da contraparte são retornados mascarados (a primeira letra de cada palavra é mantida; a carteira, a blockchain e o roteamento do VASP continuam legíveis) e data_masked é true.

uuid
string<uuid>
status
enum<string>
Opções disponíveis:
AWAITING_COUNTERPARTY,
ON_HOLD,
COMPLETED,
FINISHED,
CANCELLED,
EXPIRED,
COUNTERPARTY_MISMATCHED_DATA,
COUNTERPARTY_VASP_NOT_FOUND,
COUNTERPARTY_VASP_NOT_REACHABLE,
UNCONFIRMED_OWNERSHIP,
COUNTERPARTY_VASP_GENERAL_DECLINE,
NOT_ENOUGH_COUNTERPARTY_DATA,
NOT_APPLICABLE
direction
enum<string>
Opções disponíveis:
INBOUND,
OUTBOUND
rail
enum<string> | null

O canal pelo qual a transferência foi roteada, ou null quando nenhum canal foi selecionado (por exemplo, abaixo do limiar, uma carteira autocustodiada da contraparte, um registro após o depósito ou nenhuma contraparte alcançável). INTERNAL significa que ambos os lados são aplicações da Didit; EMAIL significa que a contraparte foi alcançada por um link de retirada enviado por e-mail. TEST_VASP significa que o Didit Test VASP respondeu à transferência no sandbox. Em GTR, VERIFYVASP e SYGNA, a Didit lê a resposta da contraparte a partir da resposta da rede ou consultando-a a cada 5 minutos. TRUST apenas envia, portanto uma transferência TRUST permanece em AWAITING_COUNTERPARTY até expirar. Um canal de rede só é usado quando você conectou sua própria associação a essa rede. Ele é escolhido depois que a criação da transação retorna, por isso é null nessa resposta.

Opções disponíveis:
INTERNAL,
TRP,
GTR,
TRUST,
VERIFYVASP,
SYGNA,
EMAIL,
TEST_VASP,
null
protocol
string | null
ivms_version
string
Exemplo:

"ivms101.2023"

required
boolean
ownership_confirmed
boolean | null
deadline_at
string<date-time> | null
timeline
object[]
counterparty_vasp
object | null
originator_data
object

Parte remetente. Em uma transferência de entrada, os valores da contraparte ficam mascarados até que a propriedade seja confirmada.

beneficiary_data
object

Parte beneficiária. Em uma transferência recebida, os valores da contraparte ficam mascarados até que a propriedade seja confirmada.

name_match
object · null · null

A comparação de nomes que decidiu a transferência, ou nula até que uma seja executada. Enquanto as partes estão mascaradas, e na cópia do outro cliente de uma troca INTERNAL, transfer_name, compared_name, matched_names e mismatched_names ficam ocultos. score e matched podem divergir: matched segue o rigor, enquanto score é a similaridade entre os dois nomes completos.

data_match
object | null

Comparação campo a campo entre os dados das partes da transferência e o que o outro lado sabe sobre o titular da carteira. Ela indica campos e resultados, nunca valores, por isso continua legível enquanto os dados da contraparte estão mascarados. Nulo até que uma comparação seja executada.

mismatched_fields
string[]

Atalho para data_match.mismatched_fields. Vazio quando nada difere.

data_unmasked
object | null

Registro de auditoria do momento em que os dados da contraparte foram desmascarados. É nulo enquanto os dados ainda estão mascarados e em transferências de saída.

data_masked
boolean

True enquanto os dados pessoais da contraparte estão mascarados nesta resposta.

created_at
string<date-time>
delivery
object | null

Situação da mensagem mais recente que esta transferência deve à outra parte. Nulo quando a transferência nunca deveu uma mensagem (por exemplo, abaixo de threshold_amount, em uma carteira autocustodiada declarada ou em um registro de sunrise).

discovery
object[]

Como a Didit procurou a contraparte, com uma entrada por etapa executada. Vazio quando nenhuma descoberta foi executada, por exemplo, em uma transferência de entrada.

reason
string

Motivo pelo qual uma transferência COUNTERPARTY_VASP_NOT_FOUND ou COUNTERPARTY_VASP_NOT_REACHABLE está parada; "" para qualquer outro status. Uma falha de entrega decide primeiro, apenas em COUNTERPARTY_VASP_NOT_REACHABLE: email_undeliverable (o provedor de e-mail recusou o e-mail de conformidade e não resta nenhum endereço para tentar: no envio, em um lembrete ou como uma devolução permanente informada depois) ou delivery_failed (o canal que fazia a entrega falhou definitivamente: um canal de rede recusou a mensagem ou esgotou as novas tentativas, um host de identidade TRP não respondeu ou o host TRP da contraparte não aceitou a consulta). Caso contrário, o rastro de discovery decide: awaiting_end_user (nenhuma etapa indicou uma contraparte que a Didit consiga alcançar), directory_match_no_route (uma etapa indicou um VASP do diretório que não tem rota), picked_member_without_proven_wallet (o usuário final escolheu um cliente da Didit que não comprovou o controle da carteira) ou no_directory_match quando o rastro não indica nenhum outro motivo. Um reenvio faz a transferência avançar, e o motivo é então limpo. Veja Por que uma transferência está parada.

next_actions
object[]

O que faz a transferência avançar; [] para qualquer status que não seja COUNTERPARTY_VASP_NOT_FOUND ou COUNTERPARTY_VASP_NOT_REACHABLE. email_undeliverable oferece update_compliance_email e depois resend. delivery_failed oferece resend. Um motivo de descoberta oferece select_counterparty_vasp, declare_self_hosted, add_vasp_hint e resend.

chain_details
object

Como a blockchain da transferência identifica suas duas carteiras, quando isso vai além de um endereço pagando a outro. Vazio ({}) para uma transferência em blockchain baseada em contas (EVM, Solana, Tron), em que os dois endereços são as próprias carteiras. A correspondência, o roteamento e o catálogo de endereços leem as carteiras primeiro a partir daqui.

Última modificação em 1 de novembro de 2026