Alterações de e-mail e senha
Alterar o endereço de e-mail ou a senha de uma conta requer várias etapas. O Decoding Chat abre um ticket, envia um código por e-mail, e cada etapa posterior envia esse ticket com os códigos e provas coletados até então. Uma conta cujo endereço foi rejeitado pelo provedor de e-mail usa a recuperação de e-mail devolvido (bounced) em seu lugar.
Toda operação precisa de uma sessão de usuário que não seja de bot. As rotas de alteração de e-mail aceitam uma sessão com o estado de conta suspeito. Todas as rotas de alteração de senha rejeitam esse estado com 403 ACCOUNT_SUSPICIOUS_ACTIVITY.
Contrato de ticket e código
Seção intitulada “Contrato de ticket e código”Um identificador de ticket é um UUID versão 4. O Decoding Chat o emite quando o fluxo começa, e cada etapa posterior o envia como uma string simples de 1 a 256 caracteres. Cada ticket pertence a uma conta, e uma etapa enviada por outra conta falha com INVALID_OR_EXPIRED_TICKET. Um ticket concluído rejeita qualquer etapa adicional com TICKET_ALREADY_COMPLETED. Iniciar um fluxo novamente emite um novo ticket e deixa qualquer um pendente ainda utilizável.
Um código de verificação tem oito caracteres do alfabeto latino maiúsculo e os dígitos decimais, escritos como dois grupos de quatro caracteres separados por um hífen. Um código vive por 10 minutos a partir do momento em que é enviado. O Decoding Chat remove os espaços em branco (trim) do valor enviado e a comparação é de outra forma exata, portanto, um valor com qualquer outro caractere avulso falha com INVALID_VERIFICATION_CODE.
O Decoding Chat retorna uma prova, um UUID versão 4, de cada etapa que estabelece um fato sobre o ticket. O fluxo de alteração de e-mail emite original_proof para o endereço original e o exige em Request new email e Verify new email. O fluxo de alteração de senha emite verification_proof para o código enviado por e-mail e o exige para concluir a alteração.
Um token de e-mail é um UUID versão 4 que representa um novo endereço verificado. Ele vive por 30 minutos, pertence à conta para a qual foi emitido e é excluído uma vez consumido. Um token apresentado por outra conta falha com INVALID_EMAIL_TOKEN, e um após o tempo de vida é excluído e falha com EMAIL_TOKEN_EXPIRED.
O Decoding Chat recusa um reenvio por 30 segundos após o envio anterior do mesmo código. A recusa é um HTTP 429 com um Retry-After calculado a partir do momento exato em que o próximo envio se torna disponível. Esse tempo de espera (cooldown) é separado do bucket de rota e dos controles de envio de e-mail.
- Uma falha de ticket usa o caminho
ticket. - Uma falha de código usa o caminho
code. - Uma falha de endereço usa o caminho
new_emailouemail. - Uma falha de prova usa o caminho
original_proofouverification_proof. - Uma falha de token de e-mail usa o caminho
email_token. - Uma falha de senha usa o caminho
passwordounew_password.
Os códigos em nível de conta ACCESS_DENIED, ACCOUNT_SUSPICIOUS_ACTIVITY, SUDO_MODE_REQUIRED e RATE_LIMITED chegam como o code de nível superior.
Controles de envio de e-mail
Seção intitulada “Controles de envio de e-mail”Cada operação que envia um e-mail conta em seu próprio bucket de rota e contra um controle de envio de e-mail de 15 minutos para a conta. Esgotar qualquer um produz HTTP 429 mesmo quando o outro tem espaço.
| Controle | Limite | Operações |
|---|---|---|
| Endereço original | 3 envios a cada 15 minutos | Start email change e Resend original email code |
| Novo endereço | 5 envios a cada 15 minutos | Request new email, Resend new email code e ambos os envios de recuperação devolvidos |
| Início da alteração de senha | 3 envios a cada 15 minutos | Start password change |
| Reenvio de alteração de senha | 3 envios a cada 15 minutos | Resend password change code |
Estados do ticket de alteração de e-mail
Seção intitulada “Estados do ticket de alteração de e-mail”O ticket de alteração de e-mail é pending-original, pending-new ou completed (pendente original, pendente novo ou concluído). Uma etapa permitida em um estado é rejeitada em todos os outros com o código nomeado nos parágrafos abaixo.
| Estado atual | Operação | Próximo estado |
|---|---|---|
| Pending original | Resend original email code | Pending original |
| Pending original | Verify original email | Pending new |
| Pending new | Request new email | Pending new |
| Pending new | Resend new email code | Pending new |
| Pending new | Verify new email | Completed |
Um ticket criado sem verificação de e-mail original começa no estado pending-new e recebe sua original_proof diretamente do Start email change. Solicitar ou verificar um novo endereço enquanto o ticket ainda for pending-original falha com ORIGINAL_EMAIL_MUST_BE_VERIFIED_FIRST.
Verificar o estágio original em um ticket que nunca o exigiu falha com ORIGINAL_VERIFICATION_NOT_REQUIRED. Reenviar o código original falha com ORIGINAL_EMAIL_ALREADY_VERIFIED em um ticket que passou pela verificação do endereço original e em um ticket que nunca exigiu a etapa, portanto, a resposta não distingue os dois. Em um ticket que passou na verificação do endereço original, verificar o endereço original novamente retorna a mesma original_proof.
Reenviar o código de novo endereço antes que um endereço tenha sido solicitado falha com NO_NEW_EMAIL_REQUESTED. Um ticket pending-original retorna o mesmo código.
Request new email e Resend new email code compartilham um tempo de espera de 30 segundos. Solicitar um endereço diferente não pode contorná-lo.
Chegar ao estado completed emite um token de e-mail e deixa o e-mail da conta inalterado. Apply email change escreve o novo endereço.
Objeto de início da alteração de e-mail
Seção intitulada “Objeto de início da alteração de e-mail”O estado de um ticket de alteração de e-mail recém-criado.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| ticket | string | O identificador que todas as etapas posteriores deste fluxo enviam |
| require_original1 | boolean | Se o endereço original precisa de verificação antes que um novo endereço possa ser solicitado |
| original_email2 | ?string | O endereço na conta ou null quando a conta não possui nenhum |
| original_proof3 | ?string | A prova para a etapa do endereço original, ou null enquanto essa etapa não for verificada |
| original_code_expires_at4 | ?timestamp ISO8601 | O momento em que o código enviado ao endereço original expira, 10 minutos após o envio |
| resend_available_at4 | ?timestamp ISO8601 | O momento mais cedo em que o código do endereço original pode ser reenviado, 30 segundos após o último envio |
1 Verdadeiro apenas quando a conta possui um endereço de e-mail e esse endereço é verificado
2 Registrado no ticket no momento da criação, portanto, uma alteração posterior no e-mail da conta não o move. Request new email compara com esse valor registrado
3 Definido exatamente quando require_original é falso. Request new email e Verify new email exigem isso
4 Nulo sempre que require_original for falso
Exemplo
Seção intitulada “Exemplo”{ "ticket": "6f1a4c9e-3d52-4a77-9b0e-2c8f5d41ab30", "require_original": true, "original_email": "old@example.com", "original_proof": null, "original_code_expires_at": "2026-03-04T18:10:00.000Z", "resend_available_at": "2026-03-04T18:00:30.000Z"}Objeto de solicitação de novo e-mail
Seção intitulada “Objeto de solicitação de novo e-mail”O estado de um ticket com um endereço candidato vinculado a ele e um código enviado a esse endereço.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| ticket1 | string | O identificador que todas as etapas posteriores deste fluxo enviam |
| new_email2 | string | O endereço agora vinculado ao ticket |
| new_code_expires_at | timestamp ISO8601 | O momento em que o código enviado ao novo endereço expira, 10 minutos após o envio |
| resend_available_at3 | ?timestamp ISO8601 | O momento mais cedo em que o código do novo endereço pode ser reenviado, 30 segundos após o último envio |
1 Ecoa o ticket que a solicitação nomeou, exceto em Request replacement email for bounced address, onde identifica o ticket que a operação criou
2 A forma com trim do endereço enviado, que é o que um posterior Verify new email grava
3 Sempre definido
Objeto de verificação de e-mail original
Seção intitulada “Objeto de verificação de e-mail original”A prova de que um ticket passou da etapa de endereço original.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| original_proof1 | string | A prova exigida por Request new email e Verify new email |
1 Estável para a vida útil do ticket. Verificar o endereço original novamente retorna o mesmo valor
Objeto de verificação de novo e-mail
Seção intitulada “Objeto de verificação de novo e-mail”O token de e-mail que um ticket de alteração de e-mail concluído retorna.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| email_token1 | string | O token que o Apply email change consome para escrever o endereço |
1 O token vive 30 minutos e representa o endereço exato que o ticket verificou
Objeto de início de alteração de senha
Seção intitulada “Objeto de início de alteração de senha”O estado de um ticket de alteração de senha recém-criado.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| ticket | string | O identificador que todas as etapas posteriores deste fluxo enviam |
| code_expires_at | timestamp ISO8601 | O momento em que o código enviado por e-mail expira, 10 minutos após o envio |
| resend_available_at1 | ?timestamp ISO8601 | O momento mais cedo em que o código pode ser reenviado, 30 segundos após o último envio |
1 Sempre definido
Objeto de verificação de senha
Seção intitulada “Objeto de verificação de senha”A prova de que o código enviado por e-mail foi aceito.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| verification_proof1 | string | A prova que Complete password change consome |
1 Estável para a vida útil do ticket. Verificar o mesmo código novamente retorna o mesmo valor
Objeto de conclusão de alteração de senha
Seção intitulada “Objeto de conclusão de alteração de senha”A sessão de substituição que Complete password change retorna após a senha ser gravada.
Estrutura
Seção intitulada “Estrutura”| Campo | Tipo | Descrição |
|---|---|---|
| token1 | string | O token de autenticação para a sessão de substituição |
| auth_session_id_hash | string | O hash codificado em base64url da sessão de autenticação de substituição |
1 A mesma operação destrói o token com o qual o cliente foi autenticado, portanto, o cliente envia cada solicitação posterior com esse valor
Iniciar alteração de e-mail
Seção intitulada “Iniciar alteração de e-mail”POST/v1/users/@me/email-change/startCria um ticket de alteração de e-mail. Retorna um objeto de início da alteração de e-mail em caso de sucesso.
Apenas uma conta que possui um endereço de e-mail ou não está reivindicada (unclaimed) pode iniciar uma alteração de e-mail. Todas as outras contas falham com MUST_HAVE_EMAIL_TO_CHANGE_IT.
A verificação do endereço original aplica-se apenas quando a conta possui um endereço de e-mail verificado. Uma devolução (bounce) limpa o estado verificado. Uma conta cujo endereço não foi verificado novamente desde a devolução obtém um ticket que ignora a etapa original. O Apply email change marca o endereço verificado novamente sem limpar o marcador devolvido. Portanto, uma conta que aplicou uma alteração desde a devolução obtém um ticket que exige a etapa.
Enviar um código de endereço original conta no limite de envio do endereço original.
Corpo JSON
Seção intitulada “Corpo JSON”O corpo pode ser omitido, e qualquer corpo fornecido é um objeto sem campos. O Decoding Chat retira chaves desconhecidas antes de lidar com a solicitação.
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | objeto de início da alteração de e-mail | O ticket foi criado |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”Quando a verificação de endereço original se aplica, o Decoding Chat cria o ticket no estado pending-original e envia um e-mail de verificação para o endereço atual da conta. Um ticket que ignora a etapa é criado como pending-new com sua original_proof já emitida. Nenhum campo de conta é alterado.
Limite de taxa
Seção intitulada “Limite de taxa”10 requisições por minuto para cada usuário autenticado, no bucket user:email_change:start.
Reenviar código de e-mail original
Seção intitulada “Reenviar código de e-mail original”POST/v1/users/@me/email-change/resend-originalEnvia um novo código de verificação para o endereço original da conta de um ticket ativo. Retorna 204 com um corpo vazio.
Um ticket que não é mais pending-original falha com ORIGINAL_EMAIL_ALREADY_VERIFIED. Um ticket sem registro de endereço original falha com NO_ORIGINAL_EMAIL_ON_RECORD.
O envio conta no limite de envio de endereço original e o ticket aplica seu próprio tempo de espera de 30 segundos.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| ticket | string | O identificador retornado pelo Start email change (1-256 caracteres) |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Um código de endereço original de substituição foi enviado |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”O Decoding Chat substitui o código do endereço original do ticket, o horário de envio e a expiração do código, o que invalida o código anterior. Um e-mail de verificação vai para o endereço original.
Limite de taxa
Seção intitulada “Limite de taxa”10 requisições por minuto para cada usuário autenticado, no bucket user:email_change:resend_original.
Verificar e-mail original
Seção intitulada “Verificar e-mail original”POST/v1/users/@me/email-change/verify-originalVerifica a etapa do endereço original e avança o ticket para pending-new. Retorna um objeto de verificação de e-mail original em caso de sucesso.
Executar a operação em um ticket que já passou pela etapa retorna a mesma prova e não altera nada. Um ticket que nunca exigiu a etapa falha com ORIGINAL_VERIFICATION_NOT_REQUIRED. Um ticket sem código emitido falha com VERIFICATION_CODE_NOT_ISSUED, um código passado do seu tempo de vida de 10 minutos com VERIFICATION_CODE_EXPIRED, e uma incompatibilidade com INVALID_VERIFICATION_CODE.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| ticket | string | O identificador retornado pelo Start email change (1-256 caracteres) |
| code | string | O código enviado para o endereço original (1-256 caracteres) |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | objeto de verificação de e-mail original | O endereço original foi verificado |
Limite de taxa
Seção intitulada “Limite de taxa”20 requisições por minuto para cada usuário autenticado, no bucket user:email_change:verify_original.
Solicitar novo e-mail
Seção intitulada “Solicitar novo e-mail”POST/v1/users/@me/email-change/request-newVincula um novo endereço a um ticket ativo e envia um código de verificação para ele. Retorna um objeto de solicitação de novo e-mail em caso de sucesso.
Um ticket que não passou na verificação do endereço original falha com ORIGINAL_EMAIL_MUST_BE_VERIFIED_FIRST. Um original_proof que não corresponda ao ticket falha com INVALID_PROOF_TOKEN.
O Decoding Chat remove espaços em branco (trim) do endereço e depois o verifica em ordem.
- Um endereço vazio falha com
EMAIL_IS_REQUIRED. - Um endereço igual ao original registrado no ticket falha com
NEW_EMAIL_MUST_BE_DIFFERENT. - Um domínio que não publica troca de e-mails ou registros de endereço falha com
EMAIL_DOMAIN_CANNOT_RECEIVE_MAIL. - Um endereço que outra conta já possui falha com
EMAIL_ALREADY_IN_USE.
A propriedade é verificada novamente quando o token de e-mail resultante é aplicado, portanto, uma solicitação bem-sucedida aqui não reserva o endereço. Chamar a operação novamente com um endereço diferente substitui o endereço pendente no mesmo ticket.
O envio conta no limite de envio de novo endereço, e o ticket aplica seu próprio tempo de espera de 30 segundos.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| ticket | string | O identificador retornado pelo Start email change (1-256 caracteres) |
| new_email1 | string | O endereço a vincular ao ticket (1-254 caracteres) |
| original_proof | string | A prova emitida pelo Start email change ou Verify original email (1-256 caracteres) |
| new_password?2 | string | A senha para verificar em relação ao corpus de senhas vazadas (8-256 caracteres) |
1 Um endereço sintaticamente inválido falha com INVALID_EMAIL_FORMAT, um fora do limite de comprimento com EMAIL_LENGTH_INVALID, e uma parte local fora do conjunto ASCII permitido com INVALID_EMAIL_LOCAL_PART
2 O valor só é verificado no corpus de senhas vazadas, o que reporta uma correspondência como PASSWORD_IS_TOO_COMMON. Nada nesta página grava o valor
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | objeto de solicitação de novo e-mail | O endereço foi vinculado e um código foi enviado |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”O ticket armazena o endereço solicitado, um código novo, seu horário de envio e sua validade, e permanece como pending-new. Um e-mail de verificação é enviado para o endereço solicitado. O e-mail da conta permanece inalterado neste estágio.
Limite de taxa
Seção intitulada “Limite de taxa”10 requisições por minuto para cada usuário autenticado, no bucket user:email_change:request_new.
Reenviar código de novo e-mail
Seção intitulada “Reenviar código de novo e-mail”POST/v1/users/@me/email-change/resend-newEnvia um novo código de verificação para o endereço já vinculado a um ticket ativo. Retorna 204 com um corpo vazio.
Um ticket sem endereço solicitado falha com NO_NEW_EMAIL_REQUESTED.
O envio conta no limite de envio de novo endereço e o ticket aplica seu próprio tempo de espera de 30 segundos.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| ticket | string | O identificador retornado pelo Start email change (1-256 caracteres) |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Um código de novo endereço de substituição foi enviado |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”O Decoding Chat substitui o código de novo endereço do ticket, o horário de envio e a expiração do código, invalidando o código anterior. Um e-mail de verificação vai para o endereço solicitado.
Limite de taxa
Seção intitulada “Limite de taxa”10 requisições por minuto para cada usuário autenticado, no bucket user:email_change:resend_new.
Verificar novo e-mail
Seção intitulada “Verificar novo e-mail”POST/v1/users/@me/email-change/verify-newVerifica o endereço solicitado e conclui o ticket. Retorna um objeto de verificação de novo e-mail em caso de sucesso.
Um original_proof que não corresponda ao ticket falha com INVALID_PROOF_TOKEN. Um ticket sem endereço solicitado ou sem código emitido falha com VERIFICATION_CODE_NOT_ISSUED, um código que passou de sua duração de 10 minutos falha com VERIFICATION_CODE_EXPIRED, e uma incompatibilidade com INVALID_VERIFICATION_CODE.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| ticket | string | O identificador retornado pelo Start email change (1-256 caracteres) |
| code | string | O código enviado para o novo endereço (1-256 caracteres) |
| original_proof | string | A prova emitida pelo Start email change ou Verify original email (1-256 caracteres) |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | objeto de verificação de novo e-mail | O novo endereço é verificado |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”O ticket move-se para o estado completed e um token de e-mail de 30 minutos é emitido para o endereço verificado. O endereço de e-mail da conta permanece inalterado.
Limite de taxa
Seção intitulada “Limite de taxa”20 requisições por minuto para cada usuário autenticado, no bucket user:email_change:verify_new.
Aplicar alteração de e-mail
Seção intitulada “Aplicar alteração de e-mail”POST/v1/users/@me/email-change/applyConsome um token de e-mail e escreve seu endereço na conta. Retorna o objeto user atualizado em caso de sucesso. Emite um evento de Gateway User Update.
Uma conta reivindicada prova o modo sudo antes de a rota ler o token. Uma conta não reivindicada é isenta e aplica a alteração apenas com sua sessão. A rota aceita estado de conta suspeito.
Um token que pertence a outra conta falha com INVALID_EMAIL_TOKEN, e um passado do seu tempo de vida de 30 minutos falha com EMAIL_TOKEN_EXPIRED. Um token expirado é excluído ao ser rejeitado. O Decoding Chat verifica o endereço em relação à propriedade da conta existente novamente aqui. Um endereço que outra conta pegou desde a verificação falha com EMAIL_ALREADY_IN_USE sem consumir o token.
Modify current user aceita o mesmo token juntamente com uma edição de perfil não relacionada. O token é de uso único, portanto, uma nova tentativa após o sucesso falha com INVALID_EMAIL_TOKEN.
Corpo JSON
Seção intitulada “Corpo JSON”O corpo estende o objeto de verificação sudo com email_token, e os campos sudo que ele mescla são repetidos abaixo. Uma prova sudo existente é enviada no cabeçalho de requisição X-Fluxer-Sudo-Mode-JWT.
| Campo | Tipo | Descrição |
|---|---|---|
| email_token | string | O token retornado por Verify new email (1-256 caracteres) |
| password?1 | string | A senha da conta (8-256 caracteres) |
| mfa_method?2 | string | O método de MFA sudo, seja totp ou webauthn |
| mfa_code?3 | string | O código do autenticador sudo ou um código de backup não consumido (1-32 caracteres) |
| webauthn_response?4 | objeto de WebAuthn assertion | A afirmação produzida para o desafio fornecido |
| webauthn_challenge?4 | string | O desafio retornado por create sudo WebAuthn authentication options (1-256 caracteres) |
1 Considerado apenas enquanto a conta não tiver autenticador MFA e ignorado assim que o TOTP ou uma credencial WebAuthn existir
2 Exigido quando a conta tiver qualquer autenticador MFA, a menos que a solicitação já apresente uma prova sudo aceita
3 Exigido quando mfa_method é totp. O valor é um código do autenticador atual ou um código de backup não consumido
4 Ambos os campos são exigidos juntos quando mfa_method é webauthn
O corpo não possui campos de perfil nem o campo new_password, e o Decoding Chat retira chaves desconhecidas antes de tratar a solicitação.
Uma conta não reivindicada que também queira uma primeira senha faz uma única chamada a Modify current user com email_token e new_password.
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | objeto user | A alteração de e-mail verificada foi aplicada |
| 403 | resposta de erro | O modo sudo não foi provado e a requisição retorna SUDO_MODE_REQUIRED com o objeto de métodos de modo sudo |
O 200 tem X-Fluxer-Sudo-Mode-JWT quando a verificação sudo emitiu uma prova.
Efeitos colaterais
Seção intitulada “Efeitos colaterais”O Decoding Chat substitui o e-mail da conta, marca-o como verificado e remove todas as flags de atividade suspeita limpáveis por e-mail, o que pode esvaziar required_actions e restaurar o acesso normal. O novo endereço também é verificado contra a política de contatos da instância, e essa verificação pode adicionar flags de atividade suspeita. O marcador devolvido não é apagado, portanto, uma conta que o possui se recupera por recuperação de e-mail devolvido.
Para uma alteração comum a partir de um endereço existente, o Decoding Chat envia um e-mail de reversão para o endereço original, para que o proprietário possa usar Revert an email change. O Decoding Chat exclui o token de e-mail, registra a alteração de contato no log de alterações de contato da conta e emite User Update. Como nenhum campo de membro público muda, não há nenhum evento Guild Member Update subsequente.
Limite de taxa
Seção intitulada “Limite de taxa”20 requisições por minuto para cada usuário autenticado, no bucket user:email_change:apply.
Recuperação de e-mail devolvido
Seção intitulada “Recuperação de e-mail devolvido”Uma conta cujo endereço armazenado foi rejeitado pelo provedor de e-mail tem o marcador devolvido, relatado como email_bounced no objeto user. A devolução também limpa o estado de e-mail verificado e adiciona uma ação exigida. As operações abaixo vinculam um endereço de substituição e terminam sem a etapa de apply com portão do sudo.
Cada uma delas requer o marcador devolvido. Uma conta sem ele é rejeitada com 403 ACCESS_DENIED, e uma conta sem nenhum endereço é rejeitada com MUST_HAVE_EMAIL_TO_CHANGE_IT.
O fluxo também requer que a conta não tenha um endereço verificado, que é o estado deixado por uma devolução. O Apply email change marca um endereço como verificado sem limpar o marcador devolvido. Uma conta que pegou o fluxo comum após sua devolução possui ambos os estados, então ela recebe ORIGINAL_EMAIL_MUST_BE_VERIFIED_FIRST aqui e altera seu endereço através do fluxo comum.
Os códigos e o tempo de espera de 30 segundos neste fluxo seguem as regras de Contrato de ticket e código. Os envios neste fluxo contam no limite do controle de novo endereço.
Solicitar e-mail de substituição para endereço devolvido
Seção intitulada “Solicitar e-mail de substituição para endereço devolvido”POST/v1/users/@me/email-change/bounced/request-newInicia o fluxo de recuperação. Retorna um objeto de solicitação de novo e-mail em caso de sucesso.
Esta operação cria um ticket e vincula o endereço de substituição na mesma chamada. A rota aceita o estado suspeito da conta. O Decoding Chat verifica o endereço exatamente como o Request new email faz: o endereço deve ter um domínio que publica registros de troca ou de endereços de e-mail, pertencer a nenhuma outra conta e diferir do endereço devolvido.
O envio conta contra o limite de controle de novo endereço.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| new_email | string | O endereço para substituir o devolvido (1-254 caracteres) |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | objeto de solicitação de novo e-mail | O endereço de substituição foi vinculado e um código foi enviado |
| 403 | resposta de erro | A conta não está marcada como devolvida e a solicitação retorna ACCESS_DENIED |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”Um ticket é criado como pending-new com o endereço de substituição vinculado a ele, e um e-mail de verificação vai para esse endereço. Nenhum campo da conta é alterado. Guarde o ticket retornado, porque as etapas restantes não levam nenhum outro identificador.
Limite de taxa
Seção intitulada “Limite de taxa”10 requisições por minuto para cada usuário autenticado, no bucket user:email_change:bounced:request_new.
Reenviar código do e-mail de substituição
Seção intitulada “Reenviar código do e-mail de substituição”POST/v1/users/@me/email-change/bounced/resend-newEnvia um novo código de verificação para o endereço de substituição vinculado a um ticket de recuperação ativo. Retorna 204 com um corpo vazio.
Um ticket sem um endereço de substituição falha com NO_NEW_EMAIL_REQUESTED.
O envio conta no controle de novo endereço e o ticket aplica seu próprio tempo de espera de 30 segundos.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| ticket | string | O identificador retornado por Request replacement email for bounced address (1-256 caracteres) |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Um código de substituição foi enviado |
| 403 | resposta de erro | A conta não está marcada como devolvida e a solicitação retorna ACCESS_DENIED |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”O Decoding Chat substitui o código do ticket, horário de envio e expiração do código, invalidando o código anterior. Um e-mail de verificação é enviado para o endereço de substituição.
Limite de taxa
Seção intitulada “Limite de taxa”10 requisições por minuto para cada usuário autenticado, no bucket user:email_change:bounced:resend_new.
Verificar e-mail de substituição para endereço devolvido
Seção intitulada “Verificar e-mail de substituição para endereço devolvido”POST/v1/users/@me/email-change/bounced/verify-newVerifica o endereço de substituição e o escreve na conta na mesma chamada. Retorna o objeto user atualizado em caso de sucesso. Emite um evento User Update.
Não se aplica verificação de sudo nem etapa de token de e-mail.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| ticket | string | O identificador retornado por Request replacement email for bounced address (1-256 caracteres) |
| code | string | O código enviado ao endereço de substituição (1-256 caracteres) |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | objeto user | O endereço de substituição foi verificado e escrito |
| 403 | resposta de erro | A conta não está marcada como devolvida e a requisição retorna ACCESS_DENIED |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”A conta recebe o endereço de substituição verificado, email_bounced torna-se falso e as exigências de e-mail satisfeitas são removidas de required_actions. O ticket é concluído e não pode ser reutilizado.
Nenhum e-mail de reversão é enviado.
Limite de taxa
Seção intitulada “Limite de taxa”20 requisições por minuto para cada usuário autenticado, no bucket user:email_change:bounced:verify_new.
Iniciar alteração de senha
Seção intitulada “Iniciar alteração de senha”POST/v1/users/@me/password-change/startCria um ticket de alteração de senha e envia um código de verificação para o e-mail da conta. Retorna um objeto de início da alteração de senha em caso de sucesso.
Uma conta sem um endereço de e-mail falha com MUST_HAVE_EMAIL_TO_CHANGE_IT.
O envio conta no controle de início da alteração de senha.
Corpo JSON
Seção intitulada “Corpo JSON”O corpo pode ser omitido e qualquer corpo fornecido é um objeto sem campos. O Decoding Chat remove chaves desconhecidas antes de tratar a solicitação.
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | objeto de início de alteração de senha | O ticket foi criado e um código foi enviado |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”Um ticket é criado em seu estado pendente e um e-mail de verificação vai para o endereço da conta. Nenhum campo da conta é alterado.
Limite de taxa
Seção intitulada “Limite de taxa”10 requisições por minuto para cada usuário autenticado, no bucket user:password_change:start.
Reenviar código de alteração de senha
Seção intitulada “Reenviar código de alteração de senha”POST/v1/users/@me/password-change/resendEnvia um novo código de verificação para um ticket ativo de alteração de senha. Exige que a conta ainda tenha um endereço de e-mail. Retorna 204 com um corpo vazio.
O envio conta no controle de reenvio da alteração de senha, e o ticket aplica seu próprio tempo de espera de 30 segundos.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| ticket | string | O identificador retornado por Start password change (1-256 caracteres) |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 204 | vazio | Um código de substituição foi enviado |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”O Decoding Chat substitui o código do ticket, o horário de envio e a expiração do código, invalidando o código anterior. Um e-mail de verificação vai para o endereço da conta.
Limite de taxa
Seção intitulada “Limite de taxa”10 requisições por minuto para cada usuário autenticado, no bucket user:password_change:resend.
Verificar código de alteração de senha
Seção intitulada “Verificar código de alteração de senha”POST/v1/users/@me/password-change/verifyVerifica o código enviado por e-mail. Retorna um objeto de verificação de senha em caso de sucesso.
Executar a operação em um ticket já verificado retorna a mesma prova. Um ticket sem código emitido falha com VERIFICATION_CODE_NOT_ISSUED, um código com mais de 10 minutos de vida útil com VERIFICATION_CODE_EXPIRED e uma incompatibilidade com INVALID_VERIFICATION_CODE.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| ticket | string | O identificador retornado por Start password change (1-256 caracteres) |
| code | string | O código enviado para o endereço da conta (1-256 caracteres) |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | objeto de verificação de senha | O código foi aceito |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”O ticket vai para seu estado verificado e armazena uma prova de verificação. A senha da conta permanece inalterada.
Limite de taxa
Seção intitulada “Limite de taxa”20 requisições por minuto para cada usuário autenticado, no bucket user:password_change:verify.
Concluir alteração de senha
Seção intitulada “Concluir alteração de senha”POST/v1/users/@me/password-change/completeConsome um ticket verificado e substitui a senha da conta. Retorna um objeto de conclusão da alteração de senha em caso de sucesso. Emite um evento Auth Session Change com o token de substituição.
Nenhuma verificação de sudo se aplica. Um ticket fora de seu estado verificado falha com INVALID_OR_EXPIRED_TICKET. Uma prova que não corresponda falha com INVALID_PROOF_TOKEN. Uma senha de substituição no corpus público de senhas vazadas é rejeitada com PASSWORD_IS_TOO_COMMON. O ticket é marcado como concluído assim que a senha é gravada, portanto, uma nova tentativa falha com TICKET_ALREADY_COMPLETED.
Corpo JSON
Seção intitulada “Corpo JSON”| Campo | Tipo | Descrição |
|---|---|---|
| ticket | string | O identificador retornado por Start password change (1-256 caracteres) |
| verification_proof | string | A prova emitida por Verify password change code (1-256 caracteres) |
| new_password | string | A senha para escrever na conta (8-256 caracteres) |
Resposta
Seção intitulada “Resposta”| Status | Corpo | Condição |
|---|---|---|
| 200 | objeto de conclusão de alteração de senha | A senha foi substituída |
Efeitos colaterais
Seção intitulada “Efeitos colaterais”A senha é alterada e o ticket é concluído. Todos os tokens de redefinição de senha e sessões de autenticação existentes são revogados. O autor da chamada recebe Auth Session Change com o token de substituição antes do término de sua sessão. O token retornado é a única sessão da conta. Tokens de acesso OAuth2 e tokens de atualização (refresh tokens) permanecem válidos.
Limite de taxa
Seção intitulada “Limite de taxa”10 requisições por minuto para cada usuário autenticado, no bucket user:password_change:complete.

