Pular para o conteúdo principal

Criar Pedido de Saque para Carteira Externa

Este endpoint permite que o cliente realize um saque das criptomoedas para uma carteira externa.


Endpoint​

  • Método: POST
URL do Endpoint
https://api.xgateglobal.com/withdraw

Testar Integração​

Utilize o formulário abaixo para simular a criação de um pedido de saque crypto para carteira externa.

🔐

Saque para Carteira Externa

1. Suas Credenciais

2. Identificação do Cliente
Não possui cliente? Clique aqui para criar.

3. Dados do Saque

Requisição​

É necessário enviar o Header de autenticação e o Body com os dados do pedido.

Headers Obrigatórios​

HeaderValorDescrição
AuthorizationBearer <seu_token>O token JWT obtido no login.

Body (Corpo da Requisição)​

CampoTipoObrigatórioDescrição
amountnumberSimO valor do saque em USDT (ex: 0.1 min).
customerIdstringSimO ID único (_id) do cliente que fará o saque.
cryptocurrencyobjectSimA criptomoeda da transação (ex: USDT ou USDC).
blockchainNetworkobjectSimInformações sobre a rede blockchain.
walletstringSimA carteira para onde os valores serão enviados.
externalIdstringNãoIdempotência.

Respostas (Responses)​

Sucesso (201 Created)​

Retorna o objeto do pedido criado, contendo informações do status e o _id da transação.

{
"message": "Solicitação de Saque realizada com sucesso",
"status": "PENDING",
"_id": "69849e8c50****************"
}

Erros Comuns​

StatusMensagemMotivo Provável
401Unauthorized• Token inválido ou expirado.
• Header inválido ou não informado.
• IP não permitido.
404Not FoundCliente informado no campo customerId não existe.
500Internal Server ErrorErro interno de servidor. Entrar em contato com suporte.

Como usar​

A finalidade deste endpoint é iniciar o fluxo de saída de dinheiro com conversão Crypto para BRL (Cash-out).

O Fluxo de Integração​

  1. Identifique o Cliente: Certifique-se de que o usuário existe na XGate (POST /customer) e tenha o _id dele.
  2. Dados da Criptomoeda: Será necessário buscar os dados da criptomoeda para adicionar na requisição, você pode obter em Criptomoedas.
  3. Dados da rede: Será necessário buscar os dados da rede (network), você pode obter em Redes Blockchain.
  4. Destino: Adicione a chave pública da carteira de quem receberá o saque na carteira externa.
  5. Envie o pedido: Envie a solicitação para a XGate, o tempo de aprovação pode variar dependendo da rede.

Exemplo Prático​

Para criar pedidos de saque para carteira externa, você deve seguir esses 4 passos:

Recomendação

É necessário criar um cliente antes de processeguir para criação de saque.

Você pode estar clicando aqui para ir para a página de documentação de criação de cliente.

1. Passo: Informe o valor em USDT em amount e o _id do cliente como customerId, igual nos campos destacados:

{
"amount": 2,
"customerId": "672f40**************",
"cryptocurrency": {
"_id": "6733a2a900**************",
"name": "USDT",
"symbol": "USDT",
"coinGecko": "tether"
},
"blockchainNetwork": {
"_id": "69ea849098**************",
"chain": "Solana",
"name": "Solana",
"symbol": "SOL"
},
"wallet": "0x7A00e4a***************",
"externalId": "6dd37763a2***************"
}

2. Passo: Você deve obter a criptomoeda com os dados para saque.

Você pode obter a lista delas clicando aqui.

{
"amount": 2,
"customerId": "672f40**************",
"cryptocurrency": {
"_id": "67c0dd903***************",
"name": "USDT",
"symbol": "USDT",
"coinGecko": "tether",
"updatedDate": "202*********************",
"createdDate": "202*********************",
"__v": 0
},
"blockchainNetwork": {
"_id": "69ea849098**************",
"chain": "Solana",
"name": "Solana",
"symbol": "SOL"
},
"wallet": "0x7A00e4a***************",
"externalId": "6dd37763a2***************"
}
Criptomoeda

Os dados de cryptocurrency também podem ser retirados da resposta vinda da listagem de redes blockchain, o exemplo de integração em Node.Js mostra como funciona.

Detalhes do Objeto​

Veja os detalhes de cada informação no objeto cryptocurrency para montar sua requisição.

CampoTipoObrigatórioDescrição
_idstringSimIdentificador único da criptomoeda.
namestringSimNome da criptomoeda.
symbolstringSimSímbolo da criptomoeda.
coinGeckostringNãoIdentificador da criptomoeda no CoinGecko.
updatedDatestringNãoData da última atualização das informações da criptomoeda.
createdDatestringNãoData em que a criptomoeda foi criada no sistema.
__vnumberNãoVersão do registro da criptomoeda no banco de dados.

3. Passo: Você deve obter os dados da rede blockchain.

Você pode obter a lista delas clicando aqui.

{
"amount": 2,
"customerId": "672f40**************",
"cryptocurrency": {
"_id": "6733a2a900**************",
"name": "USDT",
"symbol": "USDT",
"coinGecko": "tether"
},
"blockchainNetwork": {
"_id": "69ea849098**************",
"chain": "Solana",
"name": "Solana",
"symbol": "SOL"
},
"wallet": "0x7A00e4a***************",
"externalId": "6dd37763a2***************"
}
Recomendação

Caso sua integração utilize uma rede fixa para todas as operações de saque, recomendamos enviar os valores obrigatórios via hard-code. Isso otimiza a performance da sua aplicação, evitando chamadas repetitivas ao endpoint de listagem de redes, que possui um volume de dados elevado.

Detalhes do Objeto​

Veja os detalhes de cada informação no objeto blockchainNetwork para montar sua requisição.

CampoTipoObrigatórioDescrição
_idstringSimIdentificador único da rede blockchain no sistema.
namestringSimNome técnico do padrão da rede (ex: TRC-20, ERC-20, Solana ou Polygon).
chainIdstringSimID numérico da rede (ex: 1 para Ethereum).
cryptocurrenciesarrayNãoLista de IDs das criptomoedas suportadas nesta rede.
updatedDatestringNãoData da última atualização dos parâmetros da rede.
createdDatestringNãoData de criação do registro da rede no sistema.
__vnumberNãoVersão interna do registro no banco de dados.
chainstringSimNome simplificado da blockchain (ex: ETH).
symbolstringSimSímbolo da moeda nativa da rede (ex: ETH).

3. Passo: Você deve obter a chave publica da carteira para onde será enviado os valores do saque.

{
"amount": 2,
"customerId": "672f40**************",
"cryptocurrency": {
"_id": "6733a2a900**************",
"name": "USDT",
"symbol": "USDT",
"coinGecko": "tether"
},
"blockchainNetwork": {
"_id": "69ea849098**************",
"chain": "Solana",
"name": "Solana",
"symbol": "SOL"
},
"wallet": "0x7A00e4a***************",
"externalId": "6dd37763a2***************"
}

4. Passo (Opcional): Adicione o externalId ao final do código, ele irá evitar que o cliente envie mais de 1 (uma) vez a solicitação de saque, evitando duplicidade.

{
"amount": 2,
"customerId": "672f40**************",
"cryptocurrency": {
"_id": "6733a2a900**************",
"name": "USDT",
"symbol": "USDT",
"coinGecko": "tether"
},
"blockchainNetwork": {
"_id": "69ea849098**************",
"chain": "Solana",
"name": "Solana",
"symbol": "SOL"
},
"wallet": "0x7A00e4a***************",
"externalId": "6dd37763a2***************"
}

Integração​

O exemplo de integração utiliza a biblioteca Axios em Node.js.

Instalando Axios:

npm install axios

Exemplo Javascript:

const axios = require("axios");

(async () => {
const email = "your_email@domain.com";
const password = "**********";
const amount = 10.90;
const wallet = "0x*****************";
const customerId = "**************";

try {
const url_api = "https://api.xgateglobal.com"
const login = await axios.post(`${url_api}/auth/token`, { email, password });
const blockchains = await axios.get(`${url_api}//withdraw/company/blockchain-networks`, {
headers: {
"Authorization": `Bearer ${login.data.token}`
}
});
const { data } = await axios.post(`${url_api}/withdraw`, {
amount,
wallet,
customerId,
cryptocurrency: blockchains.data[0].cryptocurrencies[1].cryptocurrency, // USDT
blockchainNetwork: blockchains.data[0],
}, {
headers: {
"Authorization": `Bearer ${login.data.token}`
}
});
console.log(data); // Response
} catch (error) {
console.log(error.response.data.message) // Error
}
})()