Tokens de acesso de redes sociais: longa duração, refresh e por que eles expiram
Seu token de acesso do Instagram expira porque a Meta o emite por 60 dias e só o estende se você pedir. Facebook, LinkedIn, TikTok, X e YouTube têm, cada um, um relógio diferente e uma chamada de renovação diferente. Aqui estão as durações reais, conferidas na documentação de cada plataforma em 12 de outubro de 2026, com a requisição de renovação de cada uma.
O que é, de fato, um token de acesso do Instagram
Não existe um único token do Instagram. Existem dois caminhos, e eles expiram de formas diferentes.
Com a Instagram API with Instagram Login, seu app manda o usuário para o Instagram, recebe de volta um código de autorização e o troca. A documentação de login empresarial da Meta define as regras: o código de autorização vale por uma hora e só pode ser usado uma vez, você faz um POST dele para https://api.instagram.com/oauth/access_token com grant_type=authorization_code e recebe um token de curta duração. Esse token de curta duração não é o que você armazena. Você o troca no servidor:
curl -s -G https://graph.instagram.com/access_token \
-d grant_type=ig_exchange_token \
-d client_secret=$IG_APP_SECRET \
-d access_token=$SHORT_LIVED_TOKEN
A resposta traz expires_in: 5183944, ou seja, 60 dias menos alguns minutos. Esse é o seu token de longa duração.
Com a Instagram API with Facebook Login, a conta fica vinculada a uma Página do Facebook e você trabalha com um token de acesso da Página no lugar. Mesmos endpoints de publicação, token diferente, regras de expiração diferentes. Escolha um caminho por app.
Token de acesso de longa duração no Instagram: o relógio de 60 dias e a regra das 24 horas
Um token de longa duração do Instagram não é permanente. Ele é renovável, o que é uma promessa diferente. Você o renova com um único GET:
curl -s -G https://graph.instagram.com/refresh_access_token \
-d grant_type=ig_refresh_token \
-d access_token=$LONG_LIVED_TOKEN
Valem três condições, e as três vêm da mesma página da Meta:
- O token precisa ter pelo menos 24 horas. Renovar logo depois da troca falha.
- O token não pode já estar expirado. A Meta é explícita: um token que passa 60 dias sem renovação "não pode mais ser renovado."
- O usuário ainda precisa ter concedido
instagram_business_basic.
A condição 2 é onde as contas morrem. Não há período de carência nem chamada de recuperação. Quando os 60 dias acabam, o único caminho de volta é o fluxo de login completo, o que significa que a pessoa precisa clicar de novo. Então o job de renovação não é um extra, é o que mantém a integração viva. Eu rodo esse job numa cadência de dias, não de semanas: uma passada diária que renova tudo o que tem mais de 30 dias deixa 30 dias de margem para um cron quebrado, um deploy ruim ou um feriado.
Token de acesso de Página do Facebook: o que se comporta diferente
Um token de Página do Facebook é derivado, não emitido diretamente. Você autentica o admin, recebe um token de usuário e chama a Graph API para obter o token da Página. O guia de tokens de acesso da Meta dá o lado do usuário em números claros: tokens de usuário de curta duração "normalmente duram cerca de uma a duas horas", tokens de usuário de longa duração "duram cerca de 60 dias", e apps com acesso Standard à Marketing API ou tokens de System User recebem tokens que "não expiram com base no tempo".
Para o token de Página em si, esse mesmo guia não informa nenhuma validade. Ele diz que um token de Página é "único para cada combinação de Página, admin e app" e aponta para o Access Token Tool e para a documentação de expiração. Então não fixe uma suposição no código. Leia o expires_at no debugger para o seu próprio app e armazene-o: o comportamento depende do token a partir do qual você o derivou. A afirmação repetida de que tokens de Página nunca expiram só vale para algumas derivações, e a Meta alerta para não depender de nenhuma validade publicada.
Duração dos tokens em seis plataformas
Todos os números abaixo vêm da documentação para desenvolvedores da própria plataforma, consultada em 12 de outubro de 2026. Quando uma página não publica nenhum número, a célula diz isso em vez de chutar.
| Plataforma | Validade do token de acesso | Credencial de renovação | Endpoint de renovação | A pegadinha |
|---|---|---|---|---|
| Instagram (Instagram Login) | 60 dias | O token em si | graph.instagram.com/refresh_access_token |
Precisa ter 24h, morre aos 60 dias |
| Facebook (usuário) | 1 a 2 horas, depois cerca de 60 dias | Troca com o app secret | graph.facebook.com/oauth/access_token |
Validade do token de Página não publicada |
| 60 dias | Refresh token, 365 dias | linkedin.com/oauth/v2/accessToken |
A renovação programática é só para parceiros MDP aprovados | |
| TikTok | 24 horas | Refresh token, 365 dias | open.tiktokapis.com/v2/oauth/token/ |
Um novo refresh_token pode vir na resposta, você precisa armazená-lo |
| X | Não publicado na página de tokens | Refresh token, exige offline.access |
api.x.com/2/oauth2/token |
Sem o escopo offline.access, nada de renovação, nunca |
| YouTube (Google) | 1 hora | Refresh token, sem expiração fixa | oauth2.googleapis.com/token |
Morre após 6 meses sem uso, 7 dias se o seu app estiver em Testing |
Duas linhas merecem mais do que uma célula.
A página de refresh token do LinkedIn diz que a renovação programática está disponível "para todos os parceiros aprovados do Marketing Developer Platform (MDP)". Se o seu app não é um deles, você recebe um token de acesso de 60 dias e nenhum refresh token, e o membro precisa autorizar de novo manualmente. O relógio do próprio refresh token também não zera: o exemplo do LinkedIn mostra o dia 1 com 365 dias, o dia 59 com 306 dias e o dia 360 com 5 dias restantes. Renovar rende um novo token de acesso, nunca um novo ano.
A página de OAuth 2.0 do Google lista as formas como um refresh token deixa de funcionar, e a que pega projetos pequenos é o status de publicação: um app externo que ainda está em Testing recebe refresh tokens "que expiram em 7 dias". Há também um limite de 100 refresh tokens por Conta do Google por client ID, e criar o 101º invalida silenciosamente o mais antigo. Se você gerar um token a cada execução em vez de reutilizar o mesmo, vai bater nesse limite.
Renovar o token de acesso de uma API de rede social: o padrão que funciona
As chamadas mudam, o formato não. Quatro regras valem para as seis plataformas.
Armazene a data de expiração, não só o token. Uma linha com access_token, refresh_token, expires_at e refresh_expires_at permite que um único cron job faça uma só pergunta: o que expira nos próximos 7 dias? Sem expires_at, só resta esperar por um 401.
Renove cedo e de forma agendada. Renovar só quando chega um 401 falha justamente na plataforma onde isso não tem como funcionar: o Instagram, onde um token expirado não tem volta. A idade mínima de 24 horas do Instagram também significa que você não consegue renovar sob demanda a qualquer momento.
Sempre grave o que vier na resposta. A resposta de renovação do TikTok pode retornar um novo refresh_token com um novo refresh_expires_in, e a documentação de gerenciamento de tokens do TikTok diz para usar o novo valor se ele tiver mudado. Uma integração que continua reenviando o refresh token original funciona até deixar de funcionar.
Trate a reconexão como uma funcionalidade do produto, não como um caminho de erro. Tokens são revogados quando o usuário troca a senha com escopos do Gmail associados, remove o seu app ou sai da empresa cuja Página administrava. A questão não é se você vai evitar isso, e sim com que rapidez o dono da conta fica sabendo. A documentação de tokens do X lembra que isso começa na hora da autorização: sem offline.access nos escopos originais, nenhum refresh token é emitido, então a única saída é uma nova tela de consentimento.
O que eu faço em vez disso
Eu parei de escrever essa camada. O PlugKit conecta contas com uma única chamada, GET /connect/{platform}?profileId=…, retorna uma authUrl que você abre, e armazena e renova os tokens sozinho. A documentação de perfis e contas deixa claro que as respostas de conta expõem platform, username, status e profileId e nunca o token de acesso, e a ideia é justamente essa: não existe nenhum token no meu banco de dados para vazar ou para eu esquecer de renovar.
Mais importante do que a renovação é o sinal de falha. A lista de webhooks do PlugKit inclui account.disconnected, que dispara quando uma conta é desconectada ou o token dela para de funcionar. Esse é o evento de que você realmente precisa, porque todos os designs acima terminam do mesmo jeito: de tempos em tempos um humano precisa clicar, e o seu trabalho é pedir isso no mesmo dia, e não três semanas depois, quando os posts já pararam em silêncio.
Quando o PlugKit não é a resposta: se você gerencia uma conta em uma plataforma, o job de renovação acima tem 40 linhas e você não precisa da gente. Se você precisa de uma plataforma que a gente não suporta, vai escrever o fluxo OAuth de qualquer jeito. E os custos repassados são reais: as chamadas à API do X são cobradas a preço de custo, US$0.005 por leitura e US$0.015 por publicação, além do plano.
Para o que fica por cima desses tokens, leia o guia de APIs de redes sociais de 2026 e o guia da Instagram Graph API. A tabela de rate limits é a outra metade do problema. Se quem publica é um agente, MCP ou API REST para o seu agente é a decisão que vem antes desta.
O PlugKit custa US$ 49 por mês para 5 contas conectadas, cancele quando quiser, ou US$ 97 para 30. O teste é de 7 dias grátis, sem cartão, com uma conta conectada, e o relógio começa a contar quando você conecta essa conta.
Perguntas frequentes
Por que meu token de acesso do Instagram continua expirando?
Porque um token de longa duração do Instagram dura 60 dias e é renovável, não permanente. Você precisa chamar refresh_access_token com grant_type=ig_refresh_token antes que esses 60 dias acabem. O token também precisa ter pelo menos 24 horas para ser renovado e, depois que expira, segundo a documentação da Meta, ele não pode mais ser renovado, então o usuário precisa fazer login de novo.
Quanto tempo dura um token de acesso de longa duração no Instagram?
60 dias. A resposta da troca retorna expires_in: 5183944 segundos, e cada renovação bem-sucedida garante mais 60 dias a partir desse momento.
O token de acesso de uma Página do Facebook expira?
O guia de tokens de acesso do Facebook Login da Meta não publica uma validade para tokens de Página. Ele confirma 1 a 2 horas para tokens de usuário de curta duração e cerca de 60 dias para os de longa duração, e manda você verificar os tokens de Página e de app no Access Token Tool. Leia o expires_at do seu próprio app em vez de confiar em um post de blog, inclusive este.
Posso renovar um token em todas as APIs de redes sociais?
Não. TikTok, LinkedIn, Google e X usam refresh tokens, mas o LinkedIn restringe a renovação programática a parceiros aprovados do Marketing Developer Platform, e o X só emite um refresh token se a autorização original tiver solicitado o escopo offline.access. Quando a renovação não está disponível, o único caminho é uma nova autorização feita pelo dono da conta.
O que acontece com os posts agendados quando um token morre?
Eles falham na hora de publicar, geralmente com um 401 da plataforma, e na maioria das stacks nada avisa o usuário. Inscreva-se em um evento de desconexão e avise o dono da conta no mesmo dia. O PlugKit envia account.disconnected quando uma conta é desconectada ou o token dela para de funcionar.
Um plug para cada plataforma que seu agente usa
$49 por mês para 5 contas conectadas, cancele quando quiser. Todos os recursos em todos os planos.
Pegue sua chave de API →