Se você já tentou exibir a taxa de câmbio da Wise dentro do seu próprio produto, provavelmente descobriu que a API de taxas de câmbio da Wise não é bem o que você esperava. A Wise publica dados de taxa média de mercado realmente excelentes e os expõe por um endpoint REST — mas eles ficam atrás de um processo de aprovação de parceiros, vivem dentro de uma API de pagamentos em vez de uma API de dados de mercado, e a taxa retornada deliberadamente não é o preço que seu usuário vai pagar.
Este guia mostra exatamente o que a Wise expõe, como autenticar, o que cada endpoint realmente retorna e os cinco limites estruturais que decidem se a Wise é a fonte certa para o seu projeto. Também responde com honestidade à pergunta que a maioria está de fato fazendo: se você só precisa de taxas médias de mercado confiáveis em um aplicativo, a Wise é a ferramenta para isso?
O que a API de taxas de câmbio da Wise realmente é
A Wise é uma empresa de transferência de dinheiro. Sua API — com a marca Wise Platform — foi construída para movimentar dinheiro: criar cotações, registrar destinatários, financiar transferências, conciliar saldos, emitir cartões. As taxas de câmbio aparecem nessa API porque não se precifica uma transferência sem elas, não porque a Wise venda dados de mercado.
Esse enquadramento explica quase todas as surpresas que os desenvolvedores encontram. As taxas são um módulo pequeno dentro de uma plataforma de pagamentos e estão limitadas às rotas de moeda que a Wise de fato atende.
Três superfícies separadas, três caminhos de acesso diferentes
A maior fonte de confusão é que "a API de taxas da Wise" se refere a pelo menos três coisas distintas:
GET /rates— o endpoint de taxas de câmbio. Retorna a taxa média de mercado da Wise para um par de moedas, atual ou histórica. É o que a maioria quer dizer.POST /quotes— o endpoint de cotações. Retorna uma transferência precificada: taxa, tarifa, prazo estimado de entrega e um carimbo de expiração da taxa.GET /comparisons— o endpoint de comparação. Retorna estimativas de preço e velocidade da Wise e de provedores e bancos concorrentes em uma rota.
Estão documentados na mesma referência, usam esquemas de autenticação diferentes e respondem a perguntas muito distintas. Escolher o endpoint errado é a causa habitual do "por que esta taxa é diferente da que vejo em wise.com?".
Como obter acesso aos dados de taxas da Wise
Não existe chave de API self-service. O acesso se divide em duas trilhas:
Parceiros de plataforma. Você faz o onboarding como parceiro Wise Platform e se autentica com OAuth 2.0 (client ID e client secret) para obter um token. A referência de /rates observa que o endpoint "só suporta autenticação Bearer para parceiros não afiliados", via User Token ou Personal Token.
Parceiros afiliados. Você entra no programa de afiliados da Wise e depois escreve para partnerwise@wise.com solicitando credenciais. A Wise analisa o pedido e, se aprovado, emite credenciais Basic auth que liberam exatamente dois endpoints: Exchange Rates List e Get Temporary Quote. Nada mais.
Aqui está a bifurcação. Se você está construindo um comparador, um widget para blog de viagens ou uma página de marketing fintech, a trilha de afiliados foi feita para você. Se está construindo uma funcionalidade de produto — preços multimoeda, faturamento, uma tela de conversão, um relatório interno — você está pedindo a um time de parcerias de pagamentos que o aprove para dados de mercado, algo que nenhum dos dois lados quer dessa relação.
Note também que a Wise fixa a versão da API no caminho da URL: produção é https://api.wise.com/2026Q3/rates, com sandbox em https://api.wise-sandbox.com/2026Q3/rates. A documentação legada de afiliados ainda referencia /v1/rates em api.transferwise.com. Versões embutidas em caminhos significam que sua integração envelhece silenciosamente a menos que alguém assuma a atualização.
Chamando o endpoint de taxas da Wise
Com o token em mãos, o endpoint é limpo e bem projetado. Quatro formatos de chamada são documentados:
# Latest rates for every supported currency
curl -X GET 'https://api.wise.com/2026Q3/rates' \
-H 'Authorization: Bearer <YOUR_TOKEN>'
# Latest rate for a single pair
curl -X GET 'https://api.wise.com/2026Q3/rates?source=EUR&target=USD' \
-H 'Authorization: Bearer <YOUR_TOKEN>'
# Rate at a specific historical moment
curl -X GET 'https://api.wise.com/2026Q3/rates?source=EUR&target=USD&time=2019-02-13T14:53:01' \
-H 'Authorization: Bearer <YOUR_TOKEN>'
# A time series, grouped by day, hour or minute
curl -X GET 'https://api.wise.com/2026Q3/rates?source=EUR&target=USD&from=2019-02-13&to=2019-03-13&group=day' \
-H 'Authorization: Bearer <YOUR_TOKEN>'A resposta é um array, um objeto por intervalo:
[
{
"rate": 1.166,
"source": "EUR",
"target": "USD",
"time": "2018-08-31T10:43:31+0000"
}
]Dois detalhes merecem destaque. Primeiro, group aceita day, hour ou minute — histórico em nível de minuto é incomumente generoso e realmente útil para backtesting. Segundo, a resposta é sempre um array, mesmo para um único par, então faça o parse adequadamente:
import requests
TOKEN = "<YOUR_TOKEN>"
BASE = "https://api.wise.com/2026Q3"
def wise_rate(source: str, target: str) -> float:
r = requests.get(
f"{BASE}/rates",
params={"source": source, "target": target},
headers={"Authorization": f"Bearer {TOKEN}"},
timeout=10,
)
r.raise_for_status()
payload = r.json()
if not payload:
raise LookupError(f"No rate returned for {source}/{target}")
return payload[0]["rate"] # array, even for one pair
print(wise_rate("EUR", "USD"))Mais uma armadilha, bem documentada na prática: se você enviar time e from/to na mesma requisição, os parâmetros de intervalo prevalecem e time é ignorado. Isso causou um bug duradouro no node Wise do n8n que exigiu um patch upstream. Envie um ou outro, nunca ambos.
A taxa média de mercado não é o preço que seu usuário paga
O endpoint /rates da Wise retorna a taxa média de mercado (mid-market) — o ponto médio entre os preços de compra e venda no mercado interbancário. É a taxa "real" e é sobre ela que a Wise constrói seu marketing. Também é, por definição, uma taxa pela qual ninguém transaciona.
Se você precisa saber quanto uma transferência custará de fato, precisa de /quotes:
curl -X POST 'https://api.wise.com/2026Q3/quotes' \
-H 'Authorization: Bearer <YOUR_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{
"sourceCurrency": "GBP",
"targetCurrency": "USD",
"sourceAmount": 100
}'A resposta da cotação traz os campos de que a lógica de precificação realmente precisa: rate, rateType (por exemplo FIXED), rateExpirationTime, um detalhamento de fee, feePercentage e um array paymentOptions com estimatedDelivery por método de entrada. Também retorna notices — o próprio exemplo documentado da Wise alerta que um cliente pode manter no máximo três transferências abertas com taxa garantida antes que as seguintes passem à taxa ao vivo.
A consequência prática: uma cotação é um objeto efêmero e com estado, vinculado a uma transferência, não uma consulta de taxa que você possa fazer em intervalos regulares. Se seu caso de uso é "mostrar o preço em USD de hoje numa página de preços", cotações são a primitiva errada e taxas a certa. Se é "dizer ao usuário exatamente quanto ele receberá", só as taxas vão superestimar. Confundir essa distinção é fonte comum dos descasamentos de arredondamento e conciliação descritos em nosso guia sobre arredondamento de moedas e casas decimais.
O que a API de comparação realmente retorna
O endpoint de comparação é a parte mais interessante e mais mal compreendida da plataforma. Ele retorna estimativas de preço e velocidade, provedor a provedor, para bancos e serviços de transferência em uma rota:
curl -X GET 'https://api.wise.com/2026Q3/comparisons?sourceCurrency=GBP&targetCurrency=EUR&sendAmount=10000&filter=POPULAR'Antes de construir qualquer coisa em cima disso, leia com atenção a nota metodológica da própria Wise. A Wise afirma que coleta taxas e tarifas anunciadas em sites de terceiros, calcula a margem de cada provedor sobre a taxa média de mercado no momento da coleta e depois reaplica essa margem armazenada à taxa média atual para produzir o número que você recebe. A coleta roda aproximadamente uma vez por hora.
Em outras palavras, os preços de concorrentes desse endpoint são estimativas modeladas derivadas de coletas horárias, não cotações ao vivo. A Wise diz isso abertamente, o que é mérito dela — mas significa que o dado é inadequado para qualquer coisa em que você precisasse responder pelo número do concorrente. A Wise ainda restringe as estimativas a entrada e saída apenas por transferência bancária, e observa que muitos provedores precificam cartão e dinheiro de forma bem diferente.
Estruturalmente, a resposta é desnormalizada: um mesmo provedor pode retornar várias cotações para o mesmo par porque preço e velocidade variam por país de destino. Você recebe um array providers, cada um com seu array quotes, e reduzir isso a um número por provedor é tarefa sua, não da API.
Cinco limites a conhecer antes de construir sobre as taxas da Wise
- O acesso é uma relação comercial, não um cadastro. Aprovação como afiliado ou onboarding de plataforma antecede cada chamada. Não há painel onde você gere uma chave em trinta segundos.
- A cobertura segue as rotas de transferência. A Wise suporta as moedas com as quais consegue movimentar dinheiro. Um provedor de dados dedicado cobre as moedas que consegue precificar, um conjunto mais amplo — a Finexly cobre mais de 170 moedas, incluindo algumas sem corredor de transferência.
- Taxas são um módulo dentro de uma API de pagamentos. Ao redor há cotações, destinatários, KYC, cartões e webhooks. É uma integração grande e sensível em segurança para manter quando tudo o que você queria era um número.
- Sem cota publicada. A referência de
/ratesdocumenta uma resposta429, mas não publica um limite de requisições, então você dimensiona capacidade contra um teto não declarado. Compare com um modelo explícito, com cabeçalhos em toda resposta. - Duas moedas por chamada.
/ratesaceita um únicosourceetarget. Precificar uma página em oito moedas significa oito chamadas ou baixar a tabela inteira e filtrar no cliente.
Nenhum desses pontos é um defeito. É a cara de uma API de pagamentos quando usada como API de dados.
Quando a Wise é a escolha certa — e quando não é
| Seu caso de uso | Melhor opção | Por quê |
|---|---|---|
| Comparador ou conteúdo de afiliado "bancos vs Wise" | API Comparison da Wise | É a única fonte desse dado, e a trilha de afiliados existe exatamente para isso |
| Enviar dinheiro de fato pela Wise | Quotes + Transfers da Wise | Você precisa do objeto de cotação precificado e com expiração |
| Mostrar a taxa da marca Wise porque seus usuários pedem | /rates da Wise | A atribuição de marca é o objetivo inteiro |
| Preços multimoeda, checkout ou tela de conversão | API de moedas dedicada | Você precisa de amplitude, chave imediata e contrato simples |
| Faturamento, cobrança e relatórios de receita | API de moedas dedicada | Você precisa de série histórica estável e trilha de auditoria |
| Backtesting ou analytics | Qualquer uma | O histórico por minuto da Wise é forte; uma API de dados é mais fácil de obter |
Usando uma API de taxas de câmbio dedicada
Uma API de dados inverte o trade-off: sem reunião de onboarding, cobertura mais ampla, cota explícita e uma resposta que não contém nada além da taxa.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.finexly.com/v1/rate?from=EUR&to=USD"{ "pair": "EUR_USD", "rate": 1.0852 }Precificar uma página em várias moedas é uma ida e volta em vez de uma chamada por par:
const apiKey = process.env.FINEXLY_API_KEY;
async function priceTable(base, quotes) {
const q = quotes.map((c) => `${base}_${c}`).join(',');
const res = await fetch(`https://api.finexly.com/v1/convert?q=${q}`, {
headers: { Authorization: `Bearer ${apiKey}` },
});
if (!res.ok) throw new Error(`Finexly ${res.status}`);
return res.json();
}
const rates = await priceTable('USD', ['EUR', 'GBP', 'JPY', 'CAD', 'AUD']);
// { "USD_EUR": { "rate": 0.9215 }, "USD_GBP": { "rate": 0.7892 }, ... }E quando você quiser o valor convertido em vez do multiplicador, deixe a API fazer a aritmética para que o arredondamento aconteça em um só lugar:
import requests
def convert(amount, src, dst, api_key):
r = requests.get(
"https://api.finexly.com/v1/convert-amount",
params={"from": src, "to": dst, "amount": amount},
headers={"Authorization": f"Bearer {api_key}"},
timeout=10,
)
r.raise_for_status()
return r.json()["result"]
print(convert(100, "USD", "EUR", "YOUR_API_KEY"))Toda resposta carrega X-RateLimit-Limit, X-RateLimit-Used e X-RateLimit-Units, então a cota é observável em vez de inferida. As taxas são atualizadas a cada minuto durante o horário de mercado. O plano gratuito oferece 1.000 requisições por mês a 10 requisições por minuto, com planos pagos a partir de US$ 6,99/mês por 3.500 requisições até 100.000 no plano Professional — o detalhamento completo está na página de preços.
Uma nota rápida sobre volume: 1.000 requisições por mês parece pouco até você usar cache. Um único job agendado que atualiza a tabela completa de taxas a cada quinze minutos consome cerca de 2.900 chamadas por mês; a cada sessenta minutos, cerca de 730. O cache transforma seu volume de chamadas em função do tempo e não do tráfego, e é isso que torna um plano pequeno viável em qualquer escala. Os padrões estão em cache e tratamento de erros para APIs de moedas.
Migrando do /rates da Wise
Se você está movendo uma integração existente, o mapeamento é quase um para um:
| Wise | Equivalente | Observação |
|---|---|---|
GET /rates | GET /v1/currencies e depois /v1/rate | O /rates sem parâmetros da Wise retorna tudo; busque a lista de moedas uma vez |
GET /rates?source=X&target=Y | GET /v1/rate?from=X&to=Y | Retorna um objeto, não um array de um elemento |
| Vários pares, várias chamadas | GET /v1/convert?q=X_Y,X_Z | Uma única requisição |
amount * rate manual | GET /v1/convert-amount | Arredondamento resolvido no servidor |
Ponto histórico ?time= | Endpoint histórico | Requer plano pago; veja o guia de taxas históricas |
| Token Basic ou OAuth | Authorization: Bearer | Chave pelo painel, sem etapa de aprovação |
Por fim: por favor, não faça scraping do wise.com. Vários anúncios de marketplace oferecem exatamente isso, e são frágeis, juridicamente nebulosos e quebram na primeira mudança de marcação da página. Se você precisa especificamente do número da Wise, siga a trilha de afiliados e obtenha-o da API do jeito certo. Se precisa de um número, use uma API construída para servi-lo. Nossa comparação de APIs de moedas gratuitas e o guia de alternativas ao Frankfurter cobrem as opções sem chave com mais profundidade.
Perguntas frequentes
A API de taxas de câmbio da Wise é gratuita? Não há um custo por requisição publicado para o endpoint de taxas, mas o acesso não é aberto. Você precisa ser parceiro Wise Platform aprovado ou parceiro afiliado aprovado, o que significa uma candidatura e uma análise em vez de um formulário de cadastro. Para a maioria dos projetos, o custo é tempo, não dinheiro.
Posso usar a API da Wise sem conta?
Não. As duas trilhas documentadas exigem credenciais — tokens Bearer para parceiros de plataforma, client ID e secret em Basic auth para afiliados. O único endpoint cujo exemplo documentado omite o cabeçalho de autorização é /comparisons, e construir tráfego de produção sobre essa premissa seria imprudente.
A API da Wise retorna a mesma taxa mostrada em wise.com?
/rates retorna a taxa média de mercado, que é o número de destaque anunciado pela Wise. O valor que o cliente de fato recebe vem de /quotes e inclui a tarifa da Wise. Se seus números não batem com o site, você quase certamente está comparando uma taxa média com uma cotação precificada.
Até onde vai o histórico de taxas da Wise?
O endpoint aceita carimbos from/to arbitrários com agrupamento por day, hour ou minute; a Wise não publica uma data inicial fixa na referência, então teste o intervalo específico de que você precisa em vez de presumir cobertura.
Qual é a melhor alternativa à API de taxas de câmbio da Wise? Depende do que você está substituindo. Para comparação de preços de concorrentes não há alternativa — a API Comparison da Wise é única. Para taxas médias dentro de um produto, uma API dedicada de dados de moedas oferece cobertura mais ampla, chaves instantâneas e cota explícita. Compare as opções na nossa página de comparação de APIs.
Posso exibir legalmente a taxa da Wise aos meus usuários? Se você é afiliado ou parceiro de plataforma aprovado, sim, dentro dos termos desse acordo. Fazer scraping do site público para obter os mesmos números é outra história e não é algo sobre o qual recomendaríamos construir um negócio.
Pronto para pular o onboarding de parceiros e simplesmente obter taxas? Pegue sua chave gratuita da API Finexly — sem cartão de crédito. Comece com 1.000 requisições gratuitas por mês em mais de 170 moedas e faça upgrade só quando seu tráfego crescer. Você também pode testar as taxas no navegador com nosso conversor de moedas.
Explore More
Vlado Grigirov
Senior Currency Markets Analyst & Financial Strategist
Vlado Grigirov is a senior currency markets analyst and financial strategist with over 14 years of experience in foreign exchange markets, cross-border finance, and currency risk management. He has wo...
View full profile →