DEV Community

Cover image for Login com ChatGPT para Desenvolvedores: Fluxo OAuth, Uso do Plano e Implicações na Fatura da API
Lucas
Lucas

Posted on Originally published at apidog.com

Login com ChatGPT para Desenvolvedores: Fluxo OAuth, Uso do Plano e Implicações na Fatura da API

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.

Experimente o Apidog hoje

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:

  • profile pode incluir reivindicações como nome e foto de perfil.
  • email pode 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Passo a passo

  1. Gere no backend um state novo, um nonce e um verificador PKCE.
  2. Gere o desafio PKCE usando S256.
  3. Redirecione o navegador para o endpoint de autorização.
  4. Envie o ID do cliente, a URI de redirecionamento exata, os escopos, state, nonce e o desafio PKCE.
  5. Receba o código de autorização no callback.
  6. Valide o state.
  7. Troque o código por tokens usando o verificador PKCE.
  8. Valide o token de ID: assinatura, emissor, audiência, expiração e nonce.
  9. Crie, encontre ou vincule a conta local.
  10. 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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:

  1. Use o plano ChatGPT para trabalho interativo de usuários Plus e Pro.
  2. Use sua chave de API para usuários não elegíveis.
  3. Use sua chave para tarefas em segundo plano, CI e agentes agendados.
  4. Quando o usuário atingir o limite, exiba Gerenciar uso.
  5. 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
Enter fullscreen mode Exit fullscreen mode

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}}
Enter fullscreen mode Exit fullscreen mode

Assim, segredos não ficam registrados diretamente nas requisições.

2. Execute o Authorization Code com PKCE

Na aba Auth do Apidog:

  1. Selecione OAuth 2.0.
  2. Escolha Authorization Code com PKCE.
  3. Informe os endpoints de autorização e token.
  4. Configure o escopo inicial:
openid profile email
Enter fullscreen mode Exit fullscreen mode
  1. 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());
});
Enter fullscreen mode Exit fullscreen mode

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");
});
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Teste também o mesmo código dentro de um evento de streaming:

response.failed
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Ou uma chamada com:

401 subscription_sharing_invalid_user
Enter fullscreen mode Exit fullscreen mode

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}}
Enter fullscreen mode Exit fullscreen mode

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
  }'
Enter fullscreen mode Exit fullscreen mode

Considere sucesso somente quando o fluxo terminar com:

response.completed
Enter fullscreen mode Exit fullscreen mode

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)