O Sign in with ChatGPT é o login OAuth 2.0 e OpenID Connect da OpenAI, disponível para usuários do ChatGPT em todo o mundo. Seu aplicativo recebe um ID de conta estável, além de nome, e-mail e foto de perfil. Desde o DevDay em 29 de setembro de 2026, usuários Plus e Pro também podem autorizar aplicativos participantes a executar solicitações de IA usando o plano ChatGPT deles, em vez da sua chave de API, dentro de um limite semanal definido por aplicativo. Seu aplicativo nunca recebe as conversas, memórias ou a chave de API do usuário.
Essa segunda opção muda a forma como sua aplicação lida com custos e limites de uso. Este guia mostra como implementar o fluxo, decidir quando usar o plano do usuário em vez da sua chave, explicar os limites na interface e testar os cenários de sucesso e falha no Apidog. Para o restante do evento, consulte o resumo do DevDay 2026. Se a diferença entre identidade e autorização não estiver clara, leia primeiro OAuth vs OpenID.
Login com ChatGPT em um relance
| Item | O que a OpenAI documenta |
|---|---|
| Escopos de identidade | openid profile email |
| Escopos de uso do plano (fluxo de código aberto) |
offline_access resource.invoke chatgpt.tokens.use.direct, com resource=https://api.openai.com/v1
|
| Seu aplicativo recebe | Um token de ID; com uso do plano, um token de acesso e um token de atualização |
| Elegibilidade para uso do plano | Plus e Pro, em aplicativos participantes |
| Onde o uso é contabilizado | O uso de ChatGPT Work e Codex do plano |
| Controle por aplicativo | Limite semanal como uma parte do uso semanal total; créditos após o limite estão desativados por padrão |
| Tokens de uso do plano | Token de acesso 1 hora; token de atualização 30 dias, substituído a cada atualização |
| Acesso do desenvolvedor | Aplicativos comerciais: teste limitado via formulário de interesse. Aplicativos de código aberto: autoatendimento |
Fontes: documentação do Sign in with ChatGPT, referência de tokens e o artigo de ajuda da OpenAI sobre como usar seu plano ChatGPT em outros aplicativos.
O que seu aplicativo recebe — e o que ele não recebe
A identidade é o comportamento padrão. Um cliente que solicita openid profile email recebe um token de ID. Conforme o guia para sites:
-
profilepode incluir reivindicações como nome e foto de perfil. -
emailpode incluir e-mail e status de verificação. - Os escopos de identidade não concedem acesso a conversas do ChatGPT nem a recursos da API OpenAI.
Use o sub validado, combinado com o emissor e o ID do cliente, como identificador da conta local. Não use o e-mail como chave de vínculo de conta. A OpenAI alerta que uma correspondência de e-mail isolada não prova propriedade; para contas existentes, peça que o usuário confirme o vínculo.
O uso do plano é uma autorização independente. Quando o usuário concede os escopos adicionais, a resposta de token inclui um token de acesso para solicitações elegíveis à API de Respostas.
Para um cliente que usa apenas identidade:
Artefato necessário: id_token
Artefato não necessário: access_token
Como implementar o fluxo OAuth
O fluxo para sites é o padrão Authorization Code grant com PKCE, combinado com OIDC.
Primeiro, carregue a configuração de descoberta:
https://auth.openai.com/.well-known/openid-configuration
A documentação lista estes endpoints de produção:
Emissor: https://auth.openai.com
Endpoint de autorização: https://auth.openai.com/api/accounts/authorize
Endpoint de token: https://auth.openai.com/api/accounts/oauth/token
URI JWKS: https://auth.openai.com/.well-known/jwks.json
Passo a passo
- Gere no backend um
statenovo, umnoncee um verificador PKCE. - Gere o desafio PKCE usando
S256. - Redirecione o navegador para o endpoint de autorização.
- Envie o ID do cliente, a URI de redirecionamento exata, os escopos,
state,noncee o desafio PKCE. - Receba o código de autorização no callback.
- Valide o
state. - Troque o código por tokens usando o verificador PKCE.
- Valide o token de ID: assinatura, emissor, audiência, expiração e
nonce. - Crie, encontre ou vincule a conta local.
- Emita a sessão da sua própria aplicação.
Clientes públicos não enviam segredo de cliente.
Um cliente confidencial que usa client_secret_basic deve enviar o segredo somente no cabeçalho HTTP Basic.
Fluxo para ferramentas de código aberto
Ferramentas de código aberto usam um registro diferente. O guia de login de código aberto começa com:
client_id=dynamic_agent_client
Inclua também:
-
agent_name_hint: o nome do seu aplicativo. -
ext_agent_host_id: um identificador persistente por host.
Após o callback, salve e reutilize o ID de cliente emitido, como oaiapp_....
Nesse fluxo:
- O redirecionamento usa uma URI de loopback em
127.0.0.1. - Não há segredo de cliente.
- O ID de cliente emitido deve ser persistido para os próximos logins.
Como o uso do plano aparece para o usuário
Sua interface e documentação de suporte devem deixar estes pontos explícitos:
- Solicitações elegíveis consomem o plano do usuário. O uso é contabilizado no uso de ChatGPT Work e Codex do plano Plus ou Pro.
- Cada aplicativo tem um limite semanal. O usuário define uma porcentagem do uso semanal total. O exemplo da documentação varia de 10% a 100%.
- O limite não reserva capacidade. Se o usuário consumir o plano intensamente em outro aplicativo, o limite disponível pode acabar antes.
- Créditos são opcionais. O uso de créditos após os limites fica desativado por padrão e exige que o limite do aplicativo esteja em 100%.
- O Plus tem uma janela compartilhada de cinco horas. Segundo a página de contas e sessões, ela cobre todos os aplicativos que usam o plano. Isso não se aplica ao Pro.
- Desconectar interrompe o uso futuro. O consumo anterior não é revertido. A OpenAI não notifica seu aplicativo; você detecta a desconexão quando uma chamada ou atualização de token falha.
Os usuários gerenciam esses controles em Configurações do ChatGPT, Uso:
chatgpt.com/settings/usage
As diretrizes de UI da OpenAI pedem um link com o texto Gerenciar uso.
Quem pode integrar e como obter um ID de cliente
O resumo do DevDay da OpenAI cita 16 parceiros de uso de plano, incluindo Devin da Cognition, Notion, Vercel, T3, OpenClaw e Dactyl. O The New Stack também lista Amp, Warp, Kilo Code e OpenCode, com Lovable marcado como em breve. Se você executa OpenClaw, ele aparece nas duas listas.
Conforme relatado pelo The New Stack, Sam Altman afirmou no palco: “agora você não precisa cobrir os custos de token deles para colocá-los em funcionamento.”
O caminho depende do tipo de aplicação:
- Aplicativos comerciais ou hospedados: o login está em teste limitado. Solicite um ID de cliente pelo formulário de interesse da OpenAI, tanto para identidade quanto para uso do plano.
- Ferramentas de código aberto hospedadas localmente: o uso do plano está disponível para parceiros de código aberto pelo fluxo de autoatendimento.
O que muda na sua fatura da API
Com sua própria chave de API, você paga por token e recupera esse custo por meio do seu preço. Com o plano ChatGPT do usuário, o custo do modelo passa para a assinatura dele.
Isso reduz a dependência da sua margem em relação ao volume de uso de IA, mas também reduz seu controle sobre limites e disponibilidade.
| Sua chave de API | O plano ChatGPT do usuário | |
|---|---|---|
| Quem paga | Você, por token | O plano do usuário (créditos somente se ele optar por isso) |
| Quem pode usar | Todo usuário | Usuários Plus e Pro que concedem chatgpt.tokens.use.direct
|
| Limites | Seu nível de limite de taxa | Uso semanal do plano, o limite por aplicativo, a janela de cinco horas do Plus |
| Formato da solicitação | A API de Respostas completa |
store: false e stream: true são obrigatórios; sem temperature, max_output_tokens, pesquisa de arquivo ou Code Interpreter |
| Falha típica | 429 quando você excede seu nível | 429 subscription_sharing_usage_limit_exceeded, ou esse código em um response.failed no meio do fluxo |
| Alternativa | Sua para projetar | Nenhuma automática: a OpenAI não troca a cobrança |
| O que mostrar | Seu próprio uso e preços | "Usando plano ChatGPT", um link para Gerenciar uso, quais de seus planos o suportam |
As restrições estão na página de limitações da prévia: recursos que exigem estado de conversação armazenado ou ferramentas hospedadas não são executados no plano do usuário.
Um desenho prático é híbrido:
- Use o plano ChatGPT para trabalho interativo de usuários Plus e Pro.
- Use sua chave de API para usuários não elegíveis.
- Use sua chave para tarefas em segundo plano, CI e agentes agendados.
- Quando o usuário atingir o limite, exiba Gerenciar uso.
- Se fizer sentido para o seu produto, ofereça seus próprios créditos como alternativa secundária.
Veja também a comparação entre chave de API vs OAuth e o guia de OAuth para agentes de IA.
Como testar login e falhas no Apidog
O Apidog não autentica alguém diretamente no ChatGPT. Ele ajuda a exercitar sua configuração OAuth, trocas de token e tratamento de erros.
Baixe o Apidog e crie um ambiente para o fluxo.
1. Armazene dados do cliente como variáveis
Crie as variáveis:
SIWC_CLIENT_ID
SIWC_REDIRECT_URI
SIWC_CLIENT_SECRET
ACCESS_TOKEN
Use SIWC_CLIENT_SECRET apenas para clientes confidenciais e marque-o como valor sensível.
Referencie variáveis em requests salvas:
{{SIWC_CLIENT_ID}}
{{SIWC_REDIRECT_URI}}
{{ACCESS_TOKEN}}
Assim, segredos não ficam registrados diretamente nas requisições.
2. Execute o Authorization Code com PKCE
Na aba Auth do Apidog:
- Selecione OAuth 2.0.
- Escolha Authorization Code com PKCE.
- Informe os endpoints de autorização e token.
- Configure o escopo inicial:
openid profile email
- Use uma URL de callback registrada para o seu cliente.
O guia de OAuth 2.0 do Apidog detalha os campos dessa configuração.
3. Valide a resposta da troca de token
Salve a troca de token como um POST próprio para o endpoint de token. Envie código, verificador PKCE, URI de redirecionamento e ID de cliente.
Adicione um pós-processador para validar a estrutura básica da resposta:
const body = pm.response.json();
pm.test("token exchange returned an ID token", () => {
pm.expect(pm.response.code).to.eql(200);
pm.expect(body.id_token).to.be.a("string");
});
const decode = require("atob");
const part = body.id_token.split(".")[1].replace(/-/g, "+").replace(/_/g, "/");
const claims = JSON.parse(
decode(part + "=".repeat((4 - (part.length % 4)) % 4))
);
pm.test("ID token claims match this client", () => {
pm.expect(claims.iss).to.eql("https://auth.openai.com");
pm.expect(claims.aud).to.include(pm.environment.get("SIWC_CLIENT_ID"));
pm.expect(claims.sub).to.be.a("string").and.not.empty;
pm.expect(claims.exp * 1000).to.be.above(Date.now());
});
A validação de assinatura e nonce continua sendo responsabilidade do backend.
Em vez de exigir name, email e picture, registre essas reivindicações quando estiverem disponíveis.
Para uso do plano, valide também o escopo:
pm.test("plan usage scope was granted", () => {
pm.expect(body.scope).to.include("chatgpt.tokens.use.direct");
});
4. Simule os caminhos de falha
Uma conta Plus real não é adequada para testes repetíveis. Use um servidor mock no Apidog para cobrir os cenários abaixo.
Uso do plano recusado
Retorne uma resposta de token cujo scope não inclua:
chatgpt.tokens.use.direct
Comportamento esperado:
- Manter o login do usuário.
- Oferecer a ativação do uso do plano.
- Ou seguir para outro caminho de faturamento.
Limite de uso atingido
Retorne HTTP 429 com:
error.code: subscription_sharing_usage_limit_exceeded
Teste também o mesmo código dentro de um evento de streaming:
response.failed
Comportamento esperado:
- Parar solicitações que usam o plano.
- Exibir o link Gerenciar uso.
- Não fazer repetição automática em loop.
Usuário não elegível
Retorne:
403 subscription_sharing_user_not_eligible
Comportamento esperado:
- Não tentar novamente.
- Não reiniciar o OAuth automaticamente.
- Oferecer o caminho alternativo da sua aplicação.
Usuário desconectado
Simule uma atualização de token com:
invalid_grant
Ou uma chamada com:
401 subscription_sharing_invalid_user
Comportamento esperado:
- Limpar os tokens locais.
- Encerrar a associação de uso do plano.
- Solicitar login novamente.
Encadeie esses casos em um cenário de teste e execute-o no CI com o Apidog CLI. A página de erros e recuperação lista todos os erros documentados.
5. Verifique uma chamada real de streaming
Com um token de plano real, envie uma chamada à API de Respostas usando:
Authorization: Bearer {{ACCESS_TOKEN}}
A solicitação deve usar store: false e stream: true:
curl --no-buffer https://api.openai.com/v1/responses \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-6.1-sol",
"input": [{"role": "user", "content": "Say exactly: Hello, world!"}],
"store": false,
"stream": true
}'
Considere sucesso somente quando o fluxo terminar com:
response.completed
FAQ
Usuários gratuitos podem fazer login com o ChatGPT?
Sim. O login está disponível globalmente para usuários do ChatGPT. Usar o plano dentro de outro aplicativo exige Plus ou Pro.
Meu aplicativo recebe a chave de API OpenAI do usuário?
Não. Seu aplicativo recebe um token de ID e, quando o uso do plano é autorizado, um token de acesso OAuth para solicitações elegíveis à API de Respostas.
O que acontece quando o usuário atinge o limite?
As solicitações falham com subscription_sharing_usage_limit_exceeded, seja como HTTP 429 ou como evento response.failed durante o streaming. Pause o uso do plano e direcione o usuário para Gerenciar uso.
Um usuário Plus pode executar o GPT-6.1 Sol em um aplicativo parceiro?
O exemplo da documentação usa gpt-6.1-sol com um token de plano, mas liste os modelos disponíveis para a conta com esse token antes de oferecer essa opção. Veja mais em o GPT-6.1 Sol é gratuito.
Próximo passo
Se você opera um aplicativo comercial, entre na lista de espera e implemente agora os mocks para limite, desconexão e não elegibilidade.
Trate o uso do plano como uma opção ao lado da sua própria cobrança de API, não como substituição automática. Salve as validações de token e o cenário de falha no Apidog. Quando seu ID de cliente chegar, a única variável nova deverá ser o token real.
Top comments (0)