Como corrigir REST API do WooCommerce com erro 401
O que é a REST API do WooCommerce com erro 401?
A REST API do WooCommerce permite que sistemas externos (ERP, app, marketplace, automação) leiam e gravem pedidos, produtos e clientes da loja. Cada chamada precisa se autenticar com um par Consumer Key e Consumer Secret gerado em WooCommerce. O erro 401 Unauthorized é a resposta do site dizendo que a credencial não foi aceita: a chave não chegou, não confere, ou não tem a permissão necessária para aquela operação.
Como identificar
- A integração recebe a resposta HTTP “401 Unauthorized” ao chamar qualquer endpoint /wp-json/wc/v3/.
- O corpo da resposta traz o código “woocommerce_rest_authentication_error” com a mensagem de chave inválida ou ausente.
- Em servidores Apache, a chamada por Basic Auth funciona no localhost mas devolve 401 em produção, sinal de header Authorization descartado.
- Tentativas de POST ou PUT retornam “woocommerce_rest_cannot_create” ou 401 mesmo com a chave certa, indicando permissão somente leitura.
Antes de começar: Trate Consumer Key e Consumer Secret como senha: nunca versione em repositório público, nunca exponha no front-end e revogue chaves antigas que não estão mais em uso. Faça backup do .htaccess antes de editá-lo.
Como prevenir
- Gere uma chave de API por integração, com a permissão mínima necessária, e revogue as que não usa mais
- Mantenha o repasse do header Authorization configurado no servidor e sempre chame a API por HTTPS
- Monitore os logs do WooCommerce e do WAF por respostas 401 nas rotas /wp-json/wc/ após cada atualização de plugin de segurança
Causa
- Header Authorization removido pelo servidor (Apache com mod_rewrite ou FastCGI/PHP-FPM) antes de chegar ao WordPress, fazendo o WooCommerce não enxergar a credencial Basic Auth.
- Consumer Key ou Consumer Secret digitada errada, revogada, ou copiada com espaço/quebra de linha extra ao colar na integração.
- Chave de API gerada com permissão apenas de Leitura enquanto a integração tenta criar ou atualizar pedidos (POST/PUT), resultando em 401/403.
- Requisição feita em HTTP simples (sem SSL) usando autenticação básica, que o WooCommerce só aceita com HTTPS válido na conexão.
- Plugin de segurança ou WAF bloqueando o cabeçalho de autenticação ou as rotas /wp-json/, devolvendo 401 antes do WooCommerce processar.
Como resolver
- Regere e confira a chave de API: em WooCommerce > Configurações > Avançado > REST API, apague a chave suspeita e gere uma nova. Copie Consumer Key e Consumer Secret na hora (o secret só aparece uma vez) e cole sem espaços extras na integração.
- Defina a permissão correta da chave: ao criar a chave, escolha Leitura/Escrita se a integração precisa criar ou atualizar pedidos e produtos. Uma chave somente Leitura devolve erro em qualquer POST ou PUT.
- Garanta HTTPS válido na chamada: use sempre a URL com https:// e um certificado SSL válido. A autenticação básica do WooCommerce é recusada em conexões HTTP sem cadeado, o que aparece como 401.
- Preserve o header Authorization no Apache: em muitos servidores Apache o cabeçalho Authorization é descartado antes de chegar ao PHP. Adicione a regra de rewrite no .htaccess da raiz para repassá-lo ao WordPress (veja o código abaixo).
- Teste isolando segurança e WAF: faça uma chamada de teste a /wp-json/wc/v3/orders com as chaves. Se ainda der 401, desative temporariamente o plugin de segurança/WAF e refaça para confirmar se ele está bloqueando o header ou as rotas REST.
APACHE
# .htaccess da raiz do WordPress — repassa o header Authorization ao PHP
# (Apache costuma descartar esse header, quebrando o Basic Auth da REST API do WooCommerce)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*)$ - [E=HTTP_AUTHORIZATION:%1]
</IfModule>
# Alternativa para Apache com CGI/FastCGI, caso a regra acima não baste:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
Perguntas frequentes
Por que minha chave de API correta ainda retorna 401
Na maioria dos casos o servidor Apache descarta o header Authorization antes de chegar ao PHP, então o WooCommerce nunca recebe a credencial. Adicione a regra de rewrite no .htaccess para repassar o cabeçalho e teste de novo a chamada à REST API.
Qual a diferença entre o erro 401 e o 403 na REST API do WooCommerce
O 401 Unauthorized significa que a autenticação falhou: a chave não chegou, está errada ou ausente. O 403 indica que a chave foi reconhecida, mas não tem permissão para aquela ação. Regenere a chave para o 401 e revise a permissão Leitura/Escrita para o 403.
Onde eu gero a Consumer Key e a Consumer Secret
Em WooCommerce > Configurações > Avançado > REST API, clique em Adicionar chave, escolha o usuário, a permissão e gere. O Consumer Secret aparece uma única vez, então copie e guarde com segurança no momento da criação.
A REST API do WooCommerce funciona sem SSL
Não de forma confiável. A autenticação básica usada pela API exige HTTPS com certificado válido; em HTTP simples o WooCommerce recusa a credencial e devolve 401. Instale um certificado SSL e chame sempre a URL com https para autenticar.
Meu plugin de segurança pode causar o erro 401
Sim. Plugins de segurança e WAFs costumam bloquear o header Authorization ou as rotas /wp-json/, devolvendo 401 antes do WooCommerce processar. Desative temporariamente o plugin e refaça a chamada para confirmar; se resolver, crie uma exceção para as rotas da REST API.
Recebo 401 só ao criar pedidos, mas a leitura funciona. Por quê
A chave provavelmente foi gerada com permissão somente Leitura. Operações de escrita como POST e PUT exigem permissão de Leitura/Escrita. Gere uma nova chave com o nível correto ou ajuste a permissão dela em WooCommerce > Configurações > Avançado > REST API.














