Releases

Winter '27: a mudança de URLs de API que pode quebrar sua integração

Ilustração de conexões de API entre sistemas com ícones de cadeado, nuvem e endpoint numa linha horizontal

O Winter '27 chega em ondas entre agosto e outubro de 2026, e por baixo das novidades de tela vem um pacote de mudanças de autenticação e de URL de API que não avisa antes de derrubar uma integração. A falha não é um erro bonito na sua aplicação, é uma conexão que para na camada de rede, e o pior é que dá para descobrir isso agora, num sandbox, ou descobrir depois, num sábado, com o cliente ligando.

O Winter '27 aperta a autenticação da API em três frentes. O login() do SOAP API passa a exigir a permissão Use Any API Auth neste release. O fim das URLs de instância (na139) foi adiado para o Spring '27, mas dá para testar agora. E o fluxo username-password de OAuth morre em 20 de fevereiro de 2027.

O que muda de fato no Winter '27

Toda release do Salesforce vem embrulhada em novidades de tela, e é fácil ignorar a parte chata que fica no rodapé das notas: os "release updates" de segurança, que enforce sozinhos numa data marcada, sem depender de você clicar em nada. O Winter '27 chega em ondas de upgrade de produção em 29 de agosto, 5 de setembro, 3, 9 e 10 de outubro de 2026, e traz três mudanças que atingem quem integra a org com outro sistema.

A primeira é a exigência da permissão Use Any API Auth para o login() do SOAP API, que passa a valer neste release. A segunda é o fim das URLs de instância no tráfego de API, o item chamado Update Instanced URLs in API Traffic, que foi adiado de novo e agora está previsto para enforce no Spring '27. A terceira é a aposentadoria do fluxo username-password do OAuth, remarcada para 20 de fevereiro de 2027. As três compartilham a mesma característica cruel: a integração para de funcionar de repente, na data do enforcement, e o erro acontece antes da sua aplicação sequer tentar processar a resposta. Se você já apanhou de webhook e autenticação numa integração de assinatura, reconhece o padrão: o que quebra não é a lógica, é a porta de entrada.

URLs de instância: por que na139.salesforce.com vai parar

Toda org do Salesforce nasceu num servidor físico com um nome, o famoso hostname de instância no formato na139.salesforce.com, ap5.salesforce.com, eu17.salesforce.com. Durante anos foi comum uma integração ser configurada apontando direto para esse endereço, porque era o que aparecia na barra do navegador no dia em que alguém montou a conexão. O problema é que a org não fica presa a esse servidor. A Salesforce move orgs entre instâncias em manutenções e migrações, e quando isso acontece o hostname antigo deixa de corresponder à sua org.

O My Domain resolve isso. Ele é o seu endereço estável, algo como suaempresa.my.salesforce.com, que aponta para a org onde quer que ela esteja fisicamente. O Update Instanced URLs in API Traffic é a mudança que passa a recusar chamadas de API fixadas no hostname de instância antigo, forçando todo mundo a usar o My Domain. Esse item já foi adiado três vezes e agora está marcado para enforce no Spring '27, não no Winter '27. Isso é uma boa notícia e uma armadilha ao mesmo tempo: você ganhou tempo, e é exatamente por ganhar tempo que a maioria vai esquecer e ser pega no sábado do enforcement.

A falha é o detalhe que assusta. Quando enforce, a chamada para o hostname antigo não volta com um 401 educado nem com um corpo de erro em JSON. Ela morre na camada de rede, antes de a autenticação ser tentada. Do lado do seu middleware, é timeout ou conexão recusada, o tipo de erro que manda o time caçar firewall por horas antes de alguém desconfiar de uma URL velha.

Como achar as chamadas em risco antes que parem

A caça tem duas partes, e as duas você consegue fazer hoje. A primeira é procurar o hostname antigo em todo lugar que fala com o Salesforce. Faça uma busca por padrão de instância nos repositórios de código, nos exports de configuração do middleware, nas coleções de Postman, nos scripts de integração e em qualquer connected app documentado. Um grep simples já pega a maioria:

grep -rEn '[a-z]{2,3}[0-9]+\.salesforce\.com' .

Esse padrão casa com na139, ap5, cs42 e companhia, e ignora o seu My Domain, que tem o my no meio. Tudo que aparecer é candidato a troca: substitua o hostname de instância pelo endereço do My Domain da org. Se a sua integração usa o endpoint retornado no login, garanta que o código respeita o instance_url que vem na resposta de OAuth em vez de ter um host chumbado.

A segunda parte é testar de verdade, e aqui o Salesforce dá uma ferramenta boa. Existe uma configuração de My Domain que bloqueia o tráfego de URL de instância sob demanda. Você liga esse bloqueio num sandbox, força a falha ali no controle, roda a bateria de integrações e vê o que quebra sem risco para produção. Depois desliga, corrige o que apareceu e agenda a virada de produção para uma manhã de terça, no seu horário, em vez de esperar o enforcement automático cair num fim de semana. Forçar a falha de propósito, num ambiente seguro, é a diferença entre um teste de meia hora e um incidente. É a mesma disciplina de quem não confia na sorte e versiona e testa relatório e dashboard no Git antes de mexer em produção.

O login() do SOAP API e a permissão Use Any API Auth

Essa é a mudança que enforce agora, no Winter '27, e por isso merece prioridade sobre a das URLs. Muita integração legada autentica pelo login() do SOAP API, o método antigo em que você manda usuário e senha num envelope XML e recebe de volta um session id. A partir do Winter '27, qualquer usuário que autentique por esse login() precisa ter a permissão de usuário Use Any API Auth. Sem ela, a autenticação é recusada, e a integração que rodava há anos simplesmente para de logar.

Há duas saídas, e elas apontam para direções opostas. A rápida é conceder Use Any API Auth ao usuário de integração, o que mantém a conexão viva sem reescrever nada. A certa é aproveitar o empurrão para sair do login() por SOAP e migrar para OAuth com Named Credential, que é o caminho que o Salesforce quer que todo mundo tome. Se a integração já está de pé e você precisa dela funcionando na segunda-feira, conceda a permissão agora e planeje a migração. Empurrar a org para reescrever tudo de véspera é o tipo de pressa que gera bug, e a honestidade aqui é dizer que a permissão compra tempo sem dívida técnica nova, desde que a migração entre no roadmap de verdade.

Vale saber para onde a coisa vai: o login() do SOAP nas versões de API 31.0 a 64.0 está marcado para ser retirado no Spring '27. Ou seja, a permissão do Winter '27 é o primeiro aperto, e a aposentadoria da versão vem logo atrás. Quem trata isso como um ajuste pontual vai fazer o mesmo trabalho duas vezes.

O fim do fluxo username-password: 20 de fevereiro de 2027

O terceiro item não é do Winter '27 em si, foi remarcado para 20 de fevereiro de 2027, mas entra aqui porque atinge exatamente o mesmo tipo de integração e convém corrigir de uma vez. O fluxo username-password do OAuth, o grant_type=password, é aquele em que o middleware posta usuário, senha e security token direto no endpoint de token e recebe um access token. É simples, funciona, e é justamente por ser simples que a Salesforce está matando: guardar senha em texto no middleware é um dos jeitos mais frágeis de autenticar que existem.

A migração é para um fluxo de OAuth que não carrega senha. O JWT bearer, com um certificado no connected app, é o mais comum para integração server-to-server, e o client credentials serve quando um usuário de execução dedicado resolve. Em qualquer um dos dois, o segredo sai do código e vai para um Named Credential, que guarda a credencial fora do Apex e cuida do refresh do token sozinho. Se você fizer só uma coisa deste artigo, que seja parar de espalhar senha e security token em arquivo de configuração, pelo mesmo motivo que se aplica a CRUD, FLS e sharing no Apex: a superfície de risco não é a lógica, é onde o segredo mora.

Quando muda, o que fazer

Junte as três frentes numa tabela e a ordem de prioridade fica óbvia: resolve primeiro o que enforce mais cedo.

Mudança Quando enforce O que quebra O que fazer
login() do SOAP exige Use Any API Auth Winter '27 (agora) Login por SOAP do usuário de integração Conceder a permissão ou migrar para OAuth
Fim das URLs de instância (na139) Spring '27 Chamada fixada em hostname de instância Trocar por My Domain, testar com o bloqueio
Fim do fluxo username-password 20 fev 2027 grant_type=password no middleware Migrar para JWT bearer ou client credentials
Retirada do login() SOAP v31 a 64 Spring '27 Chamada SOAP em versão antiga Subir a versão de API ou sair do SOAP

A leitura da tabela é uma sequência, não uma lista de tarefas soltas. A permissão Use Any API Auth é o incêndio da vez, porque enforce neste release. As URLs de instância e a retirada da versão do SOAP vêm no Spring '27, e o fluxo de senha em fevereiro. Se você tratar as quatro como um projeto único de "tirar a integração do legado", faz uma vez o trabalho que, feito aos pedaços, você faria três.

O que fiz na Vetra para não ser pego

A Vetra Distribuidora é a empresa fictícia que uso como org de demonstração deste portfólio, e ela tem integrações de verdade rodando: geração de proposta em PDF, um webhook de assinatura eletrônica e um par de chamadas para serviço externo. Quando as notas do Winter '27 saíram, tratei a org como se fosse a de um cliente e rodei o mesmo diagnóstico que recomendo aqui.

O grep pelo padrão de instância voltou limpo, porque as integrações já usavam Named Credential apontando para o My Domain, não para hostname físico. Onde havia dívida era no jeito de autenticar: uma das chamadas de teste ainda usava um fluxo de senha herdado de um exemplo antigo. Troquei por JWT bearer com o segredo no Named Credential, o que de quebra tirou uma credencial que estava dormindo num campo de configuração. O login() por SOAP não existia na Vetra, então a permissão Use Any API Auth não me pegou, mas foi o primeiro item que fui conferir, porque é o que enforce agora.

A lição que levo para o cliente é a mesma de sempre: release do Salesforce não é só recurso novo, é uma lista de coisas que vão parar de funcionar numa data marcada, e essa lista mora na parte que ninguém lê. Ler as notas com um olho nos "release updates", apontar as integrações para o My Domain e guardar segredo em Named Credential transformam esse tipo de anúncio de susto em rotina. Se você quer comparar o ritmo dessas mudanças, o resumo do Summer '26 para dev mostra que o aperto na autenticação não é evento isolado, é a direção.

Perguntas frequentes

O Winter '27 vai quebrar minha integração com o Salesforce?

Pode quebrar se ela ainda usa URL de instância antiga (como na139.salesforce.com) ou o login() do SOAP API sem a permissão certa. A mudança do login() por SOAP passa a exigir a permissão Use Any API Auth já no Winter '27. O fim das URLs de instância foi adiado para o Spring '27, mas o Winter '27 é a janela para testar e corrigir num sandbox antes que enforce em produção.

O que é a URL de instância e por que na139.salesforce.com vai parar?

URL de instância é o hostname físico do servidor onde sua org rodava, no formato na139.salesforce.com ou similar. A Salesforce está aposentando esse endereço em favor do seu My Domain (algo como suaempresa.my.salesforce.com), que aponta para a org onde quer que ela esteja. Chamadas fixadas no hostname antigo deixam de ser suportadas quando o Update Instanced URLs in API Traffic enforce, previsto para o Spring '27.

O que é a permissão Use Any API Auth do Winter '27?

É a permissão de usuário que passa a ser exigida para autenticar pelo login() do SOAP API no Winter '27. Sem ela, o usuário de integração que faz login por SOAP tem a autenticação recusada. A correção é conceder Use Any API Auth ao usuário de integração ou migrar a autenticação para OAuth com Named Credential.

Quando o fluxo username-password de OAuth para de funcionar?

Em 20 de fevereiro de 2027. O fluxo grant_type=password, em que o middleware manda usuário, senha e security token direto para o endpoint de token, é um dos mais fracos do OAuth e está sendo aposentado. A saída é migrar para o fluxo JWT bearer ou client credentials, guardando o segredo num Named Credential em vez de no código.

Segunda opinião técnica

Sua org cresceu. Os riscos também?

Revisão independente de automações, integrações e pontos frágeis, com prioridades claras para decidir o próximo passo.

Entender o diagnóstico →