Signing in: the browser's redirect through Google, and the two flows a command line uses — one that can open a browser, and one that shows a code to approve from another machine. Sessions are cookies; scripts use a token instead.
Describes the code step this browser holds, for the page to name whose it is.
Finishes a sign-in with one of the recovery codes.
Three things follow a code being used (IMPLEMENTATION-PLAN §5.3.4): it is spent; every trusted browser is forgotten, because the person reaching for a recovery code has usually just lost a device and that list is the thing to distrust; and the stamp rotates, so every other session ends.
Ten wrong codes in a row rotate the stamp too (IMPLEMENTATION-PLAN §5.3.3), which closes this step and every other one in flight — nobody types a recovery code wrong ten times by accident.
Finishes a sign-in with one of the recovery codes. › Request Body
codeOne recovery code; case, spaces and dashes do not matter.
Finishes a sign-in with one of the recovery codes. › Responses
OK
returnToWhere the sign-in was going, for a Google sign-in, whose destination the server carried; null for the other ways in, whose page kept its own.
Finishes a sign-in with a code from the app.
Five wrong codes pause sign-in for 15 minutes on every browser.
Finishes a sign-in with a code from the app. › Request Body
codeSix digits from the app; spaces are ignored.
trustBrowserWhether to skip the code in this browser for thirty days.
Finishes a sign-in with a code from the app. › Responses
OK
returnToWhere the sign-in was going, for a Google sign-in, whose destination the server carried; null for the other ways in, whose page kept its own.
Creates the one-time code a waiting command line exchanges for a token.
Creates the one-time code a waiting command line exchanges for a token. › Request Body
challengeUnpadded base64url SHA-256 of the verifier the command line kept.
clientNameWhat the command line calls itself; becomes the token's name.
callbackA named server-side callback instead of a port — mcp for the remote MCP server. Never a URL.
port^-?(?:0|[1-9]\d*)$The loopback port the command line is listening on. Exactly one of this and Callback.
Creates the one-time code a waiting command line exchanges for a token. › Responses
OK
codeThe one-time code. Returned exactly once and recoverable nowhere.
expiresAtWhen the code stops being exchangeable.
redirectUriWhere the consent page should send the browser, code appended as a query.
Opens a device sign-in for a command line that cannot receive a browser redirect.
Opens a device sign-in for a command line that cannot receive a browser redirect. › Request Body
clientNameWhat the command line calls itself; becomes the token's name.
Opens a device sign-in for a command line that cannot receive a browser redirect. › Responses
OK
deviceCodeThe command line's own secret. Returned once; it is what collects the token.
expiresAtWhen both codes stop working.
intervalSeconds^-?(?:0|[1-9]\d*)$ · requiredHow long to wait between polls.
userCodeThe short code a person types, grouped for reading.
verificationUriWhere to go to approve, for somebody typing it by hand.
verificationUriCompleteThe same page with the code already filled in, for a clickable link.
Approves or refuses a device sign-in, deciding which account its token speaks for.
Approves or refuses a device sign-in, deciding which account its token speaks for. › Request Body
approvedTrue to hand the command line a token, false to refuse it.
userCodeThe short code as typed, in any case and with or without the dash.
Approves or refuses a device sign-in, deciding which account its token speaks for. › Responses
OK
approvedWhat was decided, echoed so a page rendering the result cannot disagree with the server.
clientNameWhat the command line calls itself, so the page can name it in the outcome.
Reports what a device sign-in code is asking for, so it can be approved knowingly.
Reports what a device sign-in code is asking for, so it can be approved knowingly. › Request Body
userCodeThe short code as typed, in any case and with or without the dash.
Reports what a device sign-in code is asking for, so it can be approved knowingly. › Responses
OK
clientNameWhat the waiting command line calls itself.
expiresAtWhen the request stops being approvable.
fromThisAddressWhether it asked from the same address as the browser now looking.
requestedAtWhen the command line asked.
requestedFromCountryThe two-letter country of that address, or null when not known.
requestedFromIpThe address it asked from, or null when that is not known.
Reports whether a device sign-in has been approved, and returns the token once it has.
Reports whether a device sign-in has been approved, and returns the token once it has. › Request Body
deviceCodeThe long code the command line was given when it opened the request.
Reports whether a device sign-in has been approved, and returns the token once it has. › Responses
OK
createdAtWhen it was issued.
emailThat account's address, so the command line can say who it signed in as.
nameThe name it was given, which is what the command line called itself.
prefixIts first characters, which is what every later listing shows.
tokenThe plaintext access token. Returned exactly once and recoverable nowhere.
tokenIdULID of the token, so it can be matched to a row on the tokens page.
userIdThe account it speaks for — whoever approved the request.
Exchanges a one-time code and its verifier for an access token.
Exchanges a one-time code and its verifier for an access token. › Request Body
codeThe one-time code the browser handed to the loopback listener.
verifierThe verifier the command line generated and never sent through the browser.
Exchanges a one-time code and its verifier for an access token. › Responses
OK
createdAtWhen it was issued.
emailThat account's address, so the command line can say who it signed in as.
nameThe name it was given, which is what the command line called itself.
prefixIts first characters, which is what every later listing shows.
tokenThe plaintext access token. Returned exactly once and recoverable nowhere.
tokenIdULID of the token, so it can be matched to a row on the tokens page.
userIdThe account it speaks for.
Reads the OAuth client id and the Turnstile site key. Neither is a secret: a client id appears in every Google sign-in button and One Tap prompt on the web, and a site key is what renders a Turnstile widget — unlike string GoogleAuthOptions.ClientSecret and string TurnstileOptions.SecretKey, which never leave the server.
Reads the OAuth client id and the Turnstile site key. Neither is a secret: a client id appears in every Google sign-in button and One Tap prompt on the web, and a site key is what renders a Turnstile widget — unlike string GoogleAuthOptions.ClientSecret and string TurnstileOptions.SecretKey, which never leave the server. › Responses
The config the browser needs.
googleClientIdOAuth 2.0 client id, safe to embed in client-side code.
passwordMinimumLength^-?(?:0|[1-9]\d*)$ · requiredFewest characters a password may have, so the page's rule list says the server's number.
turnstileSiteKeyKey the sign-up form renders its Turnstile widget with, or null when this deployment has none — in which case sign-up with a password is unavailable and the page should offer Google alone.
Redeems the link and restores the person and the accounts going with them.
Redeems the link and restores the person and the accounts going with them. › Request Body
tokenThe token the mailed link carried.
Redeems the link and restores the person and the accounts going with them. › Responses
No Content
Mails a new cancel link when the address has a deletion pending.
Answers 204 for every address, whether or not a deletion is pending for it.
Mails a new cancel link when the address has a deletion pending. › Request Body
emailThe address the person signs in with.
Mails a new cancel link when the address has a deletion pending. › Responses
No Content
Verifies the ID token, upserts the user, and signs the cookie in.
Verifies the ID token, upserts the user, and signs the cookie in. › Request Body
credentialThe ID token (JWT) Google's Identity Services callback handed the browser.
Verifies the ID token, upserts the user, and signs the cookie in. › Responses
Accepted
challengeAlways two_factor; the page goes to /auth/2fa.
Looks the link up and returns the address it was mailed to, and which kind of link it is.
Looks the link up and returns the address it was mailed to, and which kind of link it is. › Request Body
purposeverify for a confirmation link, reset for a password reset link, change for a
change-of-address link.
tokenThe token the mailed link carried.
Looks the link up and returns the address it was mailed to, and which kind of link it is. › Responses
OK
emailThe address the link is about: the account's for a confirmation or a reset, the new one for a change of address.
kindWhich kind of link it is — verify, reset or change — so the page
says what its button will do.
Checks the password and, when it matches a confirmed account, signs the person in.
A wrong address, a wrong password and an address that has never been confirmed are refused alike; the last one is quietly mailed its confirmation link again.
Checks the password and, when it matches a confirmed account, signs the person in. › Request Body
emailThe address the account was created with.
passwordThe password.
turnstileTokenA bot check token, needed only after turnstile_required.
Checks the password and, when it matches a confirmed account, signs the person in. › Responses
Accepted
challengeAlways two_factor; the page goes to /auth/2fa.
Mails a reset link when the address has an account.
Answers 204 for every address, whether or not it has an account.
Mails a reset link when the address has an account. › Request Body
emailThe address the account signs in with.
Mails a reset link when the address has an account. › Responses
No Content
Redeems the link, sets the password, and signs the person in.
Redeems the link, sets the password, and signs the person in. › Request Body
passwordThe new password.
tokenThe token the mailed link carried.
Redeems the link, sets the password, and signs the person in. › Responses
Accepted
challengeAlways two_factor; the page goes to /auth/2fa.
Creates the account, or mails the right thing about an existing one.
Answers 202 for every address, taken or not; the mail differs. No session is issued.
Creates the account, or mails the right thing about an existing one. › Request Body
emailThe address to create the account with.
passwordThe password, checked against the rules in PasswordPolicy.
turnstileTokenThe token the page's Turnstile widget produced.
returnToWhere to send the person once the address is confirmed: a path on the dashboard origin, checked by the same rule the sign-in pages apply. Anything that is not one is dropped, not refused.
Creates the account, or mails the right thing about an existing one. › Responses
Accepted
Redeems the link and does what its purpose says.
Redeems the link and does what its purpose says. › Request Body
tokenThe token the mailed link carried.
Redeems the link and does what its purpose says. › Responses
OK
outcomeemail-changed once the account moved to the new address — sign in again with it.
Checks the password and, for an unconfirmed account, mails a new link.
Answers 204 for a wrong password, an unknown address and an account already confirmed alike; only the mailbox learns which it was.
Checks the password and, for an unconfirmed account, mails a new link. › Request Body
emailThe address the account was created with.
passwordThe password.
turnstileTokenA bot check token, needed only after turnstile_required.
Checks the password and, for an unconfirmed account, mails a new link. › Responses
No Content
Reads the signed-in user, their plan and usage.
Answers 204 with no body when nobody is signed in.
Reads the signed-in user, their plan and usage. › Responses
OK
accountIdThe account this session is acting on.
accountNameWhat the account is called, or null for a personal one nobody has named.
Sent because every screen under /account is now about an account rather than about the person
reading it, and a page headed with somebody's own name while describing a shared tier is the exact
confusion the team screens were redesigned to remove.
emailEmail from Google.
Extra quota this account holds outside its tier, one entry each, oldest first.
The figures in Plan already include these — every one of them is the effective number the server enforces — so this is not a second set of limits to add up. It is what lets a page say why a figure is larger than the tier it names, which is the difference between a benefit and an apparent bug in the dashboard. Empty for almost every account.
nameDisplay name from Google, if any.
onboardingpending while this person has neither answered nor skipped the first-visit questions, and
done once they have.
On the person rather than the account, like the name and the address beside it: somebody in two
accounts is asked once. Everybody who had an account before the questions existed reads as
done, because the migration that added the table gave them a skipped row (A14).
overLimitUntilWhen the account's grace for being over its plan runs out, or null while it fits.
Non-null means something will be cut on that date — the oldest sites are put to sleep and the oldest custom domains are removed, only as far as it takes to fit. It is served so the dashboard can say so beforehand: nobody should learn about this from a site going quiet.
The quota tier currently applied to this user.
recoveryCodesLeft^-?(?:0|[1-9]\d*)$ · requiredHow many unused two-factor recovery codes this person has, or null while two-factor is off. On the session rather than only on the profile because the reminder it drives — three or fewer — is shown on the site list, which does not read the profile.
roleWhat the signed-in person may do on that account: Owner or Member.
Served so the dashboard can leave out controls the caller cannot use — a delete button, the billing pages — rather than showing them and reporting a refusal afterwards. It is not the permission: every one of those actions is refused at the handler regardless of what the page drew, and a client that ignored this field would gain nothing but a worse error message.
seats^-?(?:0|[1-9]\d*)$ · requiredHow many seats the account is paying for, which is what its raised ceilings were computed from.
One on every tier not sold by the seat, where it is a constant rather than a measurement. It is not the number of members: seats are bought and members are people, and the two moving independently is the whole reason inviting somebody does not silently change an invoice.
How much of the plan is currently used.
userIdULID of the signed-in user.
Schedules the deletion, takes everything offline, and signs this browser out.
Schedules the deletion, takes everything offline, and signs this browser out. › Request Body
confirmEmailThe address the person signs in with, typed again as confirmation.
codeAn authenticator code, the other proof an immediate deletion accepts.
currentPasswordThe password, asked for only when Immediately is true.
immediatelyTrue to skip the grace period: erased within minutes, with no way back.
Schedules the deletion, takes everything offline, and signs this browser out. › Responses
OK
deletionDueAtWhen the deletion takes effect. Until then it can be called off.
Sets or clears the signed-in person's name.
Checks the proof and forgets the person's two-factor.
Deletes the key, the recovery codes and every trusted browser, and signs every other browser out.
Checks the proof and forgets the person's two-factor. › Request Body
codeSix digits from the app.
passwordThe account's password.
Checks the proof and forgets the person's two-factor. › Responses
No Content
Checks the code, turns two-factor on, and issues the recovery codes.
Every other browser is signed out.
Checks the code, turns two-factor on, and issues the recovery codes. › Request Body
codeSix digits from the app; spaces are ignored.
Checks the code, turns two-factor on, and issues the recovery codes. › Responses
OK
recoveryCodesTen codes, each XXXX-XXXXXX.
Makes and stores a new unconfirmed key.
Nothing is turned on until POST /me/2fa/enable sees a code from this key.
Makes and stores a new unconfirmed key. › Responses
OK
otpauthUriThe otpauth://totp/... URI to draw as a QR code.
secretThe same key in Base32, for typing into an app on a device with no camera.
Lists the signed-in person's trusted browsers.
Lists the signed-in person's trusted browsers. › Responses
OK
The browsers, most recently used first.
Checks who is asking, then issues the confirmation link and queues both mails.
Needs a password on the account, and asks for it — or an authenticator code — first. An account that signs in with Google alone keeps its Google address. The account keeps its address until the link is opened.
Checks who is asking, then issues the confirmation link and queues both mails. › Request Body
emailThe address to move the account to.
codeA code from the authenticator app, which two-factor accounts may give instead.
currentPasswordThe account's password.
Checks who is asking, then issues the confirmation link and queues both mails. › Responses
Accepted
Gathers the person's data and streams it as a file to save.
Gathers the person's data and streams it as a file to save. › Responses
OK
Every account they are in, with billing for the ones they own.
exportedAtWhen the file was made.
What visitors sent through those sites' forms, as kept (ninety days).
The person.
The sites of the accounts they own.
Stores the answers, and marks the row finished when every question has one.
An answer that is not one the question offers is dropped, not refused.
Stores the answers, and marks the row finished when every question has one. › Request Body
buildsWhat their sites are made with. One or several.
completedWhether this is the last step's send, so the questions are done.
roleWhat they do.
sourceWhere they heard about us.
sourceDetailWhat they typed beside a source that offers a box; required for other.
useCaseWhat they will publish first.
Stores the answers, and marks the row finished when every question has one. › Responses
No Content
Checks the current password, sets the new one, and re-issues this browser's cookie.
Checks the current password, sets the new one, and re-issues this browser's cookie. › Request Body
currentPasswordThe password the account uses now.
newPasswordThe password to replace it with.
Checks the current password, sets the new one, and re-issues this browser's cookie. › Responses
No Content
Gives or withdraws consent to product email.
Reads the signed-in person: name, address, and how they sign in.
Reads the signed-in person: name, address, and how they sign in. › Responses
OK
accountCount^-?(?:0|[1-9]\d*)$ · requiredHow many accounts they are a member of. Sent because it is the sentence that tells a reader why this page is separate from the account pages, and one number is cheaper than a list nobody reads here.
createdAtWhen they first signed in here.
emailThe address they are written to and sign in with.
emailVerifiedWhether that address has been proven to reach them.
googleLinkedWhether Google is one of their ways in.
googleLinkedAtWhen Google became one, or null when it is not one — or when it became one before this was recorded.
hasPasswordWhether a password is one of their ways in. False for somebody who has only ever used Google, for whom the page offers to set one rather than to change one.
nameTheir display name, shown to people on their teams, or null when they have none.
passwordChangedAtWhen the password was last set, or null when there is none.
productEmailWhether they get product email now: consent given and not withdrawn since. Mail about their account and sites is not affected either way.
userIdThe person's ULID, which is the identifier worth quoting in a support mail.