Saltar para o conteúdo principal

Documentation Index

Fetch the complete documentation index at: https://docs.blockradar.co/llms.txt

Use this file to discover all available pages before exploring further.

Swap e Bridge
Em resumo
A API Swap da Blockradar permite que você troque ativos na mesma cadeia (swap) ou movimente ativos entre cadeias diferentes (bridge) usando um único endpoint unificado.

Pré-requisitos

Antes de usar a API Swap, garanta que você tem:
1

Chave de API

Obtenha sua chave de API no Dashboard da Blockradar. Vá até Developers para gerar uma.
2

Wallet criada

Crie uma wallet pela API Create Wallet ou pelo dashboard. Você precisará do walletId para as operações de swap.
3

IDs de ativos

Obtenha o assetId dos seus ativos de origem e destino em Assets no dashboard ou pela API Get Assets.
4

Saldo suficiente

Garanta que sua wallet tenha saldo suficiente do ativo de origem para cobrir o valor do swap mais as taxas de rede.

Como funciona

A Blockradar determina automaticamente se sua transação é um swap ou um bridge com base na seleção dos ativos:

Swap

Troque diferentes ativos na mesma blockchain.Exemplo: USDC → USDT na Base

Bridge

Movimente ativos entre blockchains diferentes.Exemplo: USDC na BSC → USDC na Optimism
Você não precisa especificar se é um swap ou um bridge — a API trata isso automaticamente com base no fromAssetId e no toAssetId que você fornecer.

Ativos e cadeias suportados

A API Swap suporta as principais stablecoins nas cadeias compatíveis com a Blockradar:
StablecoinDescrição
USDTTether USD
USDCUSD Coin
DAIDai Stablecoin
BUSDBinance USD
cNGNStablecoin de Naira
EURCEuro Coin
IDRXStablecoin da Indonésia
JPYCStablecoin de Iene Japonês
A disponibilidade dos ativos varia por cadeia. Use sempre a API Get Assets para obter a lista atualizada de ativos suportados e seus valores de assetId para as cadeias de destino.
Consulte Integrações para a lista completa de redes e stablecoins suportadas.

Master Wallet vs Child Address

A API Swap está disponível em dois níveis:

Master Wallet

Execute swaps diretamente da sua master wallet. Ideal para operações de tesouraria.

Child Address

Execute swaps a partir de child addresses individuais. Perfeito para operações específicas de cada usuário.

Endpoints

OperaçãoMaster WalletChild Address
Obter cotaçãoPOST /v1/wallets/{walletId}/swaps/quotePOST /v1/wallets/{walletId}/addresses/{addressId}/swaps/quote
ExecutarPOST /v1/wallets/{walletId}/swaps/executePOST /v1/wallets/{walletId}/addresses/{addressId}/swaps/execute

Passo 1: Obter uma cotação

Sempre solicite uma cotação antes de executar um swap para mostrar ao usuário o resultado esperado.

Parâmetros da requisição

ParâmetroTipoObrigatórioDescrição
fromAssetIdstringSimO asset ID de origem do swap
toAssetIdstringSimO asset ID de destino do swap
amountstringSimO valor a ser trocado
orderstringNãoPreferência da cotação: FASTEST, CHEAPEST, RECOMMENDED, NO_SLIPPAGE
recipientAddressstringNãoEndereço de wallet externa (para envios a wallets que não são da Blockradar)

Exemplo de cotação

curl --request POST \
  --url https://api.blockradar.co/v1/wallets/{walletId}/swaps/quote \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '{
    "fromAssetId": "asset_usdc_base_mainnet",
    "toAssetId": "asset_usdt_bsc_mainnet",
    "amount": "100",
    "order": "RECOMMENDED"
  }'

Resposta da cotação

{
  "message": "Swap quote fetched successfully",
  "statusCode": 200,
  "data": {
    "amount": "99.45",
    "minAmount": "98.95",
    "rate": "0.9945",
    "impact": "0.12",
    "slippage": "0.5",
    "networkFee": "0.002",
    "networkFeeInUSD": "0.15",
    "estimatedArrivalTime": 180
  }
}

Entendendo os campos da cotação

CampoDescrição
amountValor estimado que você receberá após o swap
minAmountValor mínimo garantido (considerando o slippage)
rateTaxa de câmbio efetiva (toAmount / fromAmount)
impactPercentual de impacto no preço
slippagePercentual máximo de variação de preço permitida
networkFeeTaxa de gás em unidades do token nativo
networkFeeInUSDTaxa de gás convertida em USD
estimatedArrivalTimeTempo estimado de conclusão em segundos
Sempre exiba, no mínimo: valor a receber, tempo estimado de chegada e taxas antes do usuário confirmar o swap.

Passo 2: Executar o Swap

Assim que o usuário confirmar a cotação, execute o swap.

Parâmetros da requisição

ParâmetroTipoObrigatórioDescrição
fromAssetIdstringSimO asset ID de origem do swap
toAssetIdstringSimO asset ID de destino do swap
amountstringSimO valor a ser trocado
orderstringNãoPreferência da cotação: FASTEST, CHEAPEST, RECOMMENDED, NO_SLIPPAGE
recipientAddressstringNãoEndereço de wallet externa (para envios a wallets que não são da Blockradar)
referencestringNãoSeu ID interno de rastreamento
metadataobjectNãoDados personalizados encaminhados via webhooks

Exemplo de execução

curl --request POST \
  --url https://api.blockradar.co/v1/wallets/{walletId}/swaps/execute \
  --header 'Content-Type: application/json' \
  --header 'x-api-key: <api-key>' \
  --data '{
    "fromAssetId": "asset_usdc_base_mainnet",
    "toAssetId": "asset_usdt_bsc_mainnet",
    "amount": "100",
    "order": "RECOMMENDED",
    "reference": "swap-order-12345",
    "metadata": {
      "userId": "user_abc123",
      "orderId": "order_xyz789"
    }
  }'

Resposta da execução

{
  "message": "Swap transaction created successfully",
  "statusCode": 200,
  "data": {
    "id": "swap-uuid-123",
    "type": "SWAP",
    "status": "PENDING",
    "fromAsset": {
      "symbol": "USDC",
      "amount": "100",
      "blockchain": "base"
    },
    "toAsset": {
      "symbol": "USDT",
      "amount": "99.45",
      "blockchain": "bsc"
    },
    "reference": "swap-order-12345",
    "metadata": {
      "userId": "user_abc123",
      "orderId": "order_xyz789"
    },
    "createdAt": "2024-01-15T10:30:00Z"
  }
}
As operações de swap são assíncronas. A resposta inicial mostra o status PENDING. Escute o webhook swap.success ou swap.failed para confirmar a conclusão.

Tipos de ordem

Escolha o tipo de ordem adequado ao seu caso de uso:
Tipo de ordemDescriçãoIndicado para
FASTESTPrioriza velocidade em relação ao custoTransações com restrição de tempo
CHEAPESTMinimiza as taxasOperações sensíveis ao custo
RECOMMENDEDAbordagem equilibrada (padrão)Maioria dos casos
NO_SLIPPAGEValor exato ou falhaRequisitos de valor preciso

Eventos de Webhook

Monitore a conclusão do swap por meio de webhooks:
EventoDescrição
swap.successSwap concluído com sucesso
swap.failedSwap falhou

Payload do Webhook

{
  "event": "swap.success",
  "data": {
    "id": "swap-uuid-123",
    "type": "SWAP",
    "status": "SUCCESS",
    "fromAsset": {
      "symbol": "USDC",
      "amount": "100",
      "blockchain": "base",
      "hash": "0xabc..."
    },
    "toAsset": {
      "symbol": "USDT",
      "amount": "99.45",
      "blockchain": "bsc",
      "hash": "0xdef..."
    },
    "reference": "swap-order-12345",
    "metadata": {
      "userId": "user_abc123",
      "orderId": "order_xyz789"
    },
    "completedAt": "2024-01-15T10:33:00Z"
  }
}

Exemplo de fluxo completo

A seguir, uma implementação completa demonstrando o fluxo cotação → confirmação → execução:
async function executeSwap(walletId, fromAssetId, toAssetId, amount) {
  const apiKey = process.env.BLOCKRADAR_API_KEY;
  const baseUrl = 'https://api.blockradar.co/v1';

  // Step 1: Get quote
  const quote = await fetch(
    `${baseUrl}/wallets/${walletId}/swaps/quote`,
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-key': apiKey
      },
      body: JSON.stringify({
        fromAssetId,
        toAssetId,
        amount,
        order: 'RECOMMENDED'
      })
    }
  ).then(r => r.json());

  // Step 2: Display quote to user
  console.log(`You will receive: ${quote.data.amount}`);
  console.log(`Minimum amount: ${quote.data.minAmount}`);
  console.log(`Network fee: $${quote.data.networkFeeInUSD}`);
  console.log(`Estimated time: ${quote.data.estimatedArrivalTime}s`);

  // Step 3: Execute swap (after user confirmation)
  const swap = await fetch(
    `${baseUrl}/wallets/${walletId}/swaps/execute`,
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-api-key': apiKey
      },
      body: JSON.stringify({
        fromAssetId,
        toAssetId,
        amount,
        order: 'RECOMMENDED',
        reference: `swap-${Date.now()}`
      })
    }
  ).then(r => r.json());

  console.log('Swap initiated:', swap.data.id);
  console.log('Status:', swap.data.status);

  // Step 4: Listen for webhook to confirm completion
  return swap.data;
}

// Usage
executeSwap(
  'wallet-uuid',
  'asset_usdc_base_mainnet',
  'asset_usdt_bsc_mainnet',
  '100'
);

Respostas de erro

{
  "message": "Insufficient balance for swap",
  "statusCode": 400,
  "error": "INSUFFICIENT_BALANCE",
  "data": {
    "required": "100",
    "available": "50.25",
    "asset": "USDC"
  }
}
{
  "message": "Asset not found",
  "statusCode": 404,
  "error": "ASSET_NOT_FOUND",
  "data": {
    "assetId": "invalid_asset_id"
  }
}
{
  "message": "No swap route available for this pair",
  "statusCode": 400,
  "error": "NO_ROUTE_AVAILABLE",
  "data": {
    "fromAsset": "USDC",
    "toAsset": "CUSTOM_TOKEN"
  }
}
{
  "message": "Amount below minimum swap threshold",
  "statusCode": 400,
  "error": "AMOUNT_TOO_LOW",
  "data": {
    "minimum": "10",
    "provided": "1"
  }
}
{
  "message": "Price moved beyond slippage tolerance",
  "statusCode": 400,
  "error": "SLIPPAGE_EXCEEDED",
  "data": {
    "expectedAmount": "99.45",
    "actualAmount": "97.00",
    "slippageTolerance": "0.5%"
  }
}

Boas práticas

Experiência do usuário

  • Sempre exiba cotações: mostre valor, taxas e tempo estimado antes da execução
  • Trate o slippage: informe os usuários sobre possíveis variações de preço
  • Mostre o progresso: use webhooks para atualizar os usuários sobre o status do swap

Segurança

  • Valide os valores: garanta que os valores do swap estejam dentro de faixas aceitáveis
  • Use referências: rastreie os swaps com IDs de referência únicos
  • Monitore os webhooks: sempre verifique a conclusão do swap por meio de webhooks

Desempenho

  • Faça cache dos asset IDs: armazene os asset IDs localmente para evitar consultas repetidas
  • Use os tipos de ordem adequados: escolha FASTEST para casos sensíveis ao tempo e CHEAPEST para os sensíveis ao custo
  • Implemente retentativas: trate falhas transitórias com backoff exponencial

Referência da API

EndpointDescrição
Master Wallet Get QuoteObter cotação de swap pela master wallet
Master Wallet ExecuteExecutar swap pela master wallet
Child Address Get QuoteObter cotação de swap por uma child address
Child Address ExecuteExecutar swap por uma child address

Suporte

A API Swap fornece uma interface unificada para swaps na mesma cadeia e bridges entre cadeias. Comece com pequenos valores de teste em testnets antes de migrar para produção.