title: ‘AFK API v1’ description: ‘Visão geral e convenções da AFK Crypto API v1’
Visão geral
- Caminho base:
/api/v1 - Autenticação: chave de API via cabeçalho
x-api-key - Idempotência: endpoints de escrita requerem cabeçalho
Idempotency-Key(UUID) - Formato de resposta: todas as respostas incluem o cabeçalho
x-request-idpara rastreamento
Endpoints
GET /api/v1/wallets– Listar carteiras do usuárioGET /api/v1/wallets/balances– Saldos da carteira do chamador (por chain; usa a carteira padrão)GET /api/v1/wallets/:address/balances– Saldos para um endereço de carteira próprio específicoGET /api/v1/tx/:id– Detalhes de transaçãoPOST /api/v1/send– Enviar ativos nativos e tokens (EVM + Solana)POST /api/v1/token/approve– Aprovação de token ERC20 (somente EVM)POST /api/v1/contracts/send– Interação genérica com contratos (somente EVM)POST /api/v1/trade/quote– Obter cotações de swap (EVM + Solana)POST /api/v1/trade/swap– Executar swaps (EVM + Solana)
Chains
Veja a lista completa em Redes suportadas. Use o slugchain (por exemplo, base, solana-devnet).
Limitação de taxa
- Escritas (incluindo
POST /api/v1/trade/quote): 15 requisições por minuto por usuário - Leituras: 60 requisições por minuto por usuário
- Resposta: HTTP 429 quando excedido
- Cabeçalhos:
Retry-After(segundos até a próxima janela)
Idempotência (escritas)
- Todos os endpoints mutáveis exigem
Idempotency-Key. - Reutilizar a chave com o mesmo corpo retorna a resposta 200 original.
- Reutilizar a chave com corpo diferente retorna HTTP 409 com
code: IDEMPOTENT_BODY_MISMATCH. - Reutilizar a chave sem resposta de sucesso armazenada retorna HTTP 409 com
code: IDEMPOTENT_REPLAY. - As chaves são vinculadas ao usuário autenticado; o caminho do endpoint é registrado para rastreio.
- Aplica-se a:
POST /api/v1/send,POST /api/v1/token/approve,POST /api/v1/contracts/send,POST /api/v1/trade/swap.
Tratamento de erros
Formato de erro
Códigos de erro
UNAUTHORIZED– Autenticação ausente/inválida ou chave de API (HTTP 401)FORBIDDEN– Autenticado mas sem permissão para realizar a ação (HTTP 403)NOT_FOUND– Recurso não encontrado (HTTP 404)RATE_LIMITED– Limite de taxa excedido (HTTP 429)INVALID_INPUT– Parâmetros de solicitação inválidos (HTTP 400)WALLET_NOT_FOUND– Carteira especificada não encontradaUSER_NOT_LINKED– Usuário não vinculado ao PrivyWALLET_NOT_DELEGATED– Carteira não delegada ao assinante do servidorWALLET_ID_REQUIRED– ID de carteira Privy ausenteCHAIN_UNKNOWN– Chain desconhecida ou não suportadaINSUFFICIENT_FUNDS– Remetente sem fundos para valor/taxaIDEMPOTENT_BODY_MISMATCH– Corpo de solicitação diferente com a mesma chave de idempotência (HTTP 409)IDEMPOTENT_REPLAY– Chave de idempotência já utilizada (HTTP 409)PRIVY_RPC_ERROR– Erro do serviço RPC PrivySEND_FAILED– Falha no envio da transaçãoSERVICE_UNAVAILABLE– Serviço necessário não configuradoQUOTE_FAILED– Erro do serviço de cotação (HTTP 400)INTERNAL_ERROR– Erro do servidor
Detalhes do QUOTE_FAILED:
- Solana/Jupiter: Alguns mints Solana não são negociáveis no Jupiter (lista permitida). Nesses casos, esta API retorna HTTP 400 com
code: QUOTE_FAILEDe uma mensagem de erro como: “Token not tradable on Jupiter”. - EVM/1inch: Se um token não é suportado pelo 1inch, a API retorna HTTP 400 com
code: QUOTE_FAILEDe uma mensagem como: “Token not tradable on 1inch”. - Isso é esperado quando o token/mint de saída solicitado está marcado como não negociável pelo provedor upstream, mesmo que existam pools em outros lugares.
Validações
Formatos de endereço
- EVM: deve corresponder a
/^0x[a-fA-F0-9]{40}$/ - Solana: deve ser uma chave pública base58 válida
Parâmetros comuns
- Valores (EVM): Apenas strings inteiras (decimal ou 0x-hex). Devem ser não negativos. Para ERC20 e
value, devem caber em uint256. - Valores (Solana): Strings inteiras em unidades base. Valores SPL devem caber em faixa sem sinal de 64 bits.
- Remetente (
from): Opcional. Se omitido, usa a carteira padrão do usuário para a chain especificada. - Idempotência: Todos os endpoints de escrita exigem cabeçalho
Idempotency-Key. Repetições com o mesmo corpo retornam a resposta original.
Palavra-chave de token nativo
Os endpoints de negociação (/api/v1/trade/quote, /api/v1/trade/swap) aceitam a palavra-chave NATIVE (insensível a maiúsculas/minúsculas) para fromToken/toToken:
- EVM:
NATIVEé resolvido para0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE - Solana:
NATIVEé resolvido para o mint SOL encapsuladoSo11111111111111111111111111111111111111112 - As respostas retornam endereços resolvidos (não
NATIVE) - O endpoint de envio usa
asset: "native"em vez de endereços de token para transferências nativas
Convenções
- Seleção de chain: use o slug
chain(por exemplo,base,base-sepolia,solana-devnet). - Mapeamento sentinela de
Transaction.chainIdem Solana:0= mainnet,-2= testnet,-3= devnet. - Idempotência: única por usuário e chave; repetições retornam a resposta original; corpos divergentes → 409.