# Accounts ## DeleteAccount `accounts.delete(AccountDeleteParams**kwargs) -> object` **post** `/gitpod.v1.AccountService/DeleteAccount` Deletes an account permanently. Use this method to: - Remove unused accounts - Clean up test accounts - Complete account deletion requests The account must not be an active member of any organization. ### Examples - Delete account: Permanently removes an account. ```yaml accountId: "f53d2330-3795-4c5d-a1f3-453121af9c60" ``` ### Parameters - `account_id: str` - `reason: Optional[str]` reason is an optional field for the reason for account deletion ### Returns - `object` ### Example ```python import os from gitpod import Gitpod client = Gitpod( bearer_token=os.environ.get("GITPOD_API_KEY"), # This is the default and can be omitted ) account = client.accounts.delete( account_id="f53d2330-3795-4c5d-a1f3-453121af9c60", ) print(account) ``` #### Response ```json {} ``` ## GetSSOLoginURL `accounts.get_sso_login_url(AccountGetSSOLoginURLParams**kwargs) -> AccountGetSSOLoginURLResponse` **post** `/gitpod.v1.AccountService/GetSSOLoginURL` Gets the SSO login URL for a specific email domain. Use this method to: - Initiate SSO authentication - Get organization-specific login URLs - Handle SSO redirects ### Examples - Get login URL: Retrieves SSO URL for email domain. ```yaml email: "user@company.com" ``` - Get URL with return path: Gets SSO URL with specific return location. ```yaml email: "user@company.com" returnTo: "https://gitpod.io/workspaces" ``` ### Parameters - `email: str` email is the email the user wants to login with - `return_to: Optional[str]` return_to is the URL the user will be redirected to after login ### Returns - `class AccountGetSSOLoginURLResponse: …` - `login_url: str` login_url is the URL to redirect the user to for SSO login ### Example ```python import os from gitpod import Gitpod client = Gitpod( bearer_token=os.environ.get("GITPOD_API_KEY"), # This is the default and can be omitted ) response = client.accounts.get_sso_login_url( email="user@company.com", ) print(response.login_url) ``` #### Response ```json { "loginUrl": "loginUrl" } ``` ## ListJoinableOrganizations `accounts.list_joinable_organizations(AccountListJoinableOrganizationsParams**kwargs) -> SyncJoinableOrganizationsPage[JoinableOrganization]` **post** `/gitpod.v1.AccountService/ListJoinableOrganizations` Lists organizations that the currently authenticated account can join. Use this method to: - Discover organizations associated with the account's email domain. - Allow users to join existing organizations. - Display potential organizations during onboarding. ### Examples - List joinable organizations: Retrieves a list of organizations the account can join. ```yaml {} ``` ### Parameters - `token: Optional[str]` - `page_size: Optional[int]` - `pagination: Optional[Pagination]` pagination contains the pagination options for listing joinable organizations - `token: Optional[str]` Token for the next set of results that was returned as next_token of a PaginationResponse - `page_size: Optional[int]` Page size is the maximum number of results to retrieve per page. Defaults to 25. Maximum 100. ### Returns - `class JoinableOrganization: …` - `organization_id: str` organization_id is the id of the organization the user can join - `organization_name: str` organization_name is the name of the organization the user can join - `organization_member_count: Optional[int]` organization_member_count is the member count of the organization the user can join ### Example ```python import os from gitpod import Gitpod client = Gitpod( bearer_token=os.environ.get("GITPOD_API_KEY"), # This is the default and can be omitted ) page = client.accounts.list_joinable_organizations() page = page.joinable_organizations[0] print(page.organization_id) ``` #### Response ```json { "pagination": { "nextToken": "nextToken" }, "joinableOrganizations": [ { "organizationId": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "organizationName": "organizationName", "organizationMemberCount": 0 } ] } ``` ## ListLoginProviders `accounts.list_login_providers(AccountListLoginProvidersParams**kwargs) -> SyncLoginProvidersPage[LoginProvider]` **post** `/gitpod.v1.AccountService/ListLoginProviders` Lists available login providers with optional filtering. Use this method to: - View supported authentication methods - Get provider-specific login URLs - Filter providers by invite ### Examples - List all providers: Shows all available login providers. ```yaml pagination: pageSize: 20 ``` - List for specific invite: Shows providers available for an invite. ```yaml filter: inviteId: "d2c94c27-3b76-4a42-b88c-95a85e392c68" pagination: pageSize: 20 ``` ### Parameters - `token: Optional[str]` - `page_size: Optional[int]` - `filter: Optional[Filter]` filter contains the filter options for listing login methods - `email: Optional[str]` email is the email address to filter SSO providers by - `invite_id: Optional[str]` invite_id is the ID of the invite URL the user wants to login with - `pagination: Optional[Pagination]` pagination contains the pagination options for listing login methods - `token: Optional[str]` Token for the next set of results that was returned as next_token of a PaginationResponse - `page_size: Optional[int]` Page size is the maximum number of results to retrieve per page. Defaults to 25. Maximum 100. ### Returns - `class LoginProvider: …` - `provider: str` provider is the provider used by this login method, e.g. "github", "google", "custom" - `login_url: Optional[str]` login_url is the URL to redirect the browser agent to for login, when provider is "custom" ### Example ```python import os from gitpod import Gitpod client = Gitpod( bearer_token=os.environ.get("GITPOD_API_KEY"), # This is the default and can be omitted ) page = client.accounts.list_login_providers( pagination={ "page_size": 20 }, ) page = page.login_providers[0] print(page.provider) ``` #### Response ```json { "pagination": { "nextToken": "nextToken" }, "allowCustom": true, "loginProviders": [ { "provider": "provider", "loginUrl": "loginUrl" } ] } ``` ## ListSSOLogins `accounts.list_sso_logins(AccountListSSOLoginsParams**kwargs) -> SyncLoginsPage[AccountListSSOLoginsResponse]` **post** `/gitpod.v1.AccountService/ListSSOLogins` ListSSOLogins ### Parameters - `email: str` email is the email the user wants to login with - `token: Optional[str]` - `page_size: Optional[int]` - `pagination: Optional[Pagination]` pagination contains the pagination options for listing SSO logins - `token: Optional[str]` Token for the next set of results that was returned as next_token of a PaginationResponse - `page_size: Optional[int]` Page size is the maximum number of results to retrieve per page. Defaults to 25. Maximum 100. - `return_to: Optional[str]` return_to is the URL the user will be redirected to after login ### Returns - `class AccountListSSOLoginsResponse: …` - `display_name: str` provider is the provider used by this login method, e.g. "github", "google", "custom" - `login_url: str` login_url is the URL to redirect the user to for SSO login ### Example ```python import os from gitpod import Gitpod client = Gitpod( bearer_token=os.environ.get("GITPOD_API_KEY"), # This is the default and can be omitted ) page = client.accounts.list_sso_logins( email="dev@stainless.com", ) page = page.logins[0] print(page.display_name) ``` #### Response ```json { "pagination": { "nextToken": "nextToken" }, "logins": [ { "displayName": "displayName", "loginUrl": "loginUrl" } ] } ``` ## GetAccount `accounts.retrieve(AccountRetrieveParams**kwargs) -> AccountRetrieveResponse` **post** `/gitpod.v1.AccountService/GetAccount` Gets information about the currently authenticated account. Use this method to: - Retrieve account profile information - Check organization memberships - View account settings - Get joinable organizations ### Examples - Get account details: Retrieves information about the authenticated account. ```yaml {} ``` ### Parameters - `empty: Optional[bool]` ### Returns - `class AccountRetrieveResponse: …` - `account: Account` - `id: str` - `created_at: datetime` A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one. All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap second table is needed for interpretation, using a [24-hour linear smear](https://developers.google.com/time/smear). The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. # Examples Example 1: Compute Timestamp from POSIX `time()`. Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0); Example 2: Compute Timestamp from POSIX `gettimeofday()`. struct timeval tv; gettimeofday(&tv, NULL); Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000); Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. long millis = System.currentTimeMillis(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build(); Example 5: Compute Timestamp from Java `Instant.now()`. Instant now = Instant.now(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(now.getEpochSecond()) .setNanos(now.getNano()).build(); Example 6: Compute Timestamp from current time in Python. timestamp = Timestamp() timestamp.GetCurrentTime() # JSON Mapping In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset). For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017. In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime\(\)) to obtain a formatter capable of generating timestamps in this format. - `email: str` - `name: str` - `updated_at: datetime` A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one. All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap second table is needed for interpretation, using a [24-hour linear smear](https://developers.google.com/time/smear). The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. # Examples Example 1: Compute Timestamp from POSIX `time()`. Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0); Example 2: Compute Timestamp from POSIX `gettimeofday()`. struct timeval tv; gettimeofday(&tv, NULL); Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000); Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. long millis = System.currentTimeMillis(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build(); Example 5: Compute Timestamp from Java `Instant.now()`. Instant now = Instant.now(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(now.getEpochSecond()) .setNanos(now.getNano()).build(); Example 6: Compute Timestamp from current time in Python. timestamp = Timestamp() timestamp.GetCurrentTime() # JSON Mapping In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset). For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017. In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime\(\)) to obtain a formatter capable of generating timestamps in this format. - `avatar_url: Optional[str]` - `joinables: Optional[List[JoinableOrganization]]` joinables is deprecated. Use ListJoinableOrganizations instead. - `organization_id: str` organization_id is the id of the organization the user can join - `organization_name: str` organization_name is the name of the organization the user can join - `organization_member_count: Optional[int]` organization_member_count is the member count of the organization the user can join - `memberships: Optional[List[AccountMembership]]` - `organization_id: str` organization_id is the id of the organization the user is a member of - `organization_name: str` organization_name is the name of the organization the user is a member of - `user_id: str` user_id is the ID the user has in the organization - `user_role: OrganizationRole` user_role is the role the user has in the organization - `"ORGANIZATION_ROLE_UNSPECIFIED"` - `"ORGANIZATION_ROLE_ADMIN"` - `"ORGANIZATION_ROLE_MEMBER"` - `organization_member_count: Optional[int]` organization_member_count is the member count of the organization the user is a member of - `organization_tier: Optional[OrganizationTier]` organization_tier is the tier of the organization (Free, Core, Enterprise) - `"ORGANIZATION_TIER_UNSPECIFIED"` - `"ORGANIZATION_TIER_FREE"` - `"ORGANIZATION_TIER_ENTERPRISE"` - `"ORGANIZATION_TIER_CORE"` - `"ORGANIZATION_TIER_FREE_ONA"` - `organization_id: Optional[str]` organization_id is the ID of the organization the account is owned by if it's created through custom SSO - `public_email_provider: Optional[bool]` public_email_provider is true if the email for the Account matches a known public email provider ### Example ```python import os from gitpod import Gitpod client = Gitpod( bearer_token=os.environ.get("GITPOD_API_KEY"), # This is the default and can be omitted ) account = client.accounts.retrieve() print(account.account) ``` #### Response ```json { "account": { "id": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "createdAt": "2019-12-27T18:11:19.117Z", "email": "email", "name": "name", "updatedAt": "2019-12-27T18:11:19.117Z", "avatarUrl": "avatarUrl", "joinables": [ { "organizationId": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "organizationName": "organizationName", "organizationMemberCount": 0 } ], "memberships": [ { "organizationId": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "organizationName": "organizationName", "userId": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "userRole": "ORGANIZATION_ROLE_UNSPECIFIED", "organizationMemberCount": 0, "organizationTier": "ORGANIZATION_TIER_UNSPECIFIED" } ], "organizationId": "organizationId", "publicEmailProvider": true } } ``` ## Domain Types ### Account - `class Account: …` - `id: str` - `created_at: datetime` A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one. All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap second table is needed for interpretation, using a [24-hour linear smear](https://developers.google.com/time/smear). The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. # Examples Example 1: Compute Timestamp from POSIX `time()`. Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0); Example 2: Compute Timestamp from POSIX `gettimeofday()`. struct timeval tv; gettimeofday(&tv, NULL); Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000); Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. long millis = System.currentTimeMillis(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build(); Example 5: Compute Timestamp from Java `Instant.now()`. Instant now = Instant.now(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(now.getEpochSecond()) .setNanos(now.getNano()).build(); Example 6: Compute Timestamp from current time in Python. timestamp = Timestamp() timestamp.GetCurrentTime() # JSON Mapping In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset). For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017. In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime\(\)) to obtain a formatter capable of generating timestamps in this format. - `email: str` - `name: str` - `updated_at: datetime` A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one. All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap second table is needed for interpretation, using a [24-hour linear smear](https://developers.google.com/time/smear). The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. # Examples Example 1: Compute Timestamp from POSIX `time()`. Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0); Example 2: Compute Timestamp from POSIX `gettimeofday()`. struct timeval tv; gettimeofday(&tv, NULL); Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000); Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. long millis = System.currentTimeMillis(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build(); Example 5: Compute Timestamp from Java `Instant.now()`. Instant now = Instant.now(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(now.getEpochSecond()) .setNanos(now.getNano()).build(); Example 6: Compute Timestamp from current time in Python. timestamp = Timestamp() timestamp.GetCurrentTime() # JSON Mapping In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset). For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017. In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime\(\)) to obtain a formatter capable of generating timestamps in this format. - `avatar_url: Optional[str]` - `joinables: Optional[List[JoinableOrganization]]` joinables is deprecated. Use ListJoinableOrganizations instead. - `organization_id: str` organization_id is the id of the organization the user can join - `organization_name: str` organization_name is the name of the organization the user can join - `organization_member_count: Optional[int]` organization_member_count is the member count of the organization the user can join - `memberships: Optional[List[AccountMembership]]` - `organization_id: str` organization_id is the id of the organization the user is a member of - `organization_name: str` organization_name is the name of the organization the user is a member of - `user_id: str` user_id is the ID the user has in the organization - `user_role: OrganizationRole` user_role is the role the user has in the organization - `"ORGANIZATION_ROLE_UNSPECIFIED"` - `"ORGANIZATION_ROLE_ADMIN"` - `"ORGANIZATION_ROLE_MEMBER"` - `organization_member_count: Optional[int]` organization_member_count is the member count of the organization the user is a member of - `organization_tier: Optional[OrganizationTier]` organization_tier is the tier of the organization (Free, Core, Enterprise) - `"ORGANIZATION_TIER_UNSPECIFIED"` - `"ORGANIZATION_TIER_FREE"` - `"ORGANIZATION_TIER_ENTERPRISE"` - `"ORGANIZATION_TIER_CORE"` - `"ORGANIZATION_TIER_FREE_ONA"` - `organization_id: Optional[str]` organization_id is the ID of the organization the account is owned by if it's created through custom SSO - `public_email_provider: Optional[bool]` public_email_provider is true if the email for the Account matches a known public email provider ### Account Membership - `class AccountMembership: …` - `organization_id: str` organization_id is the id of the organization the user is a member of - `organization_name: str` organization_name is the name of the organization the user is a member of - `user_id: str` user_id is the ID the user has in the organization - `user_role: OrganizationRole` user_role is the role the user has in the organization - `"ORGANIZATION_ROLE_UNSPECIFIED"` - `"ORGANIZATION_ROLE_ADMIN"` - `"ORGANIZATION_ROLE_MEMBER"` - `organization_member_count: Optional[int]` organization_member_count is the member count of the organization the user is a member of - `organization_tier: Optional[OrganizationTier]` organization_tier is the tier of the organization (Free, Core, Enterprise) - `"ORGANIZATION_TIER_UNSPECIFIED"` - `"ORGANIZATION_TIER_FREE"` - `"ORGANIZATION_TIER_ENTERPRISE"` - `"ORGANIZATION_TIER_CORE"` - `"ORGANIZATION_TIER_FREE_ONA"` ### Joinable Organization - `class JoinableOrganization: …` - `organization_id: str` organization_id is the id of the organization the user can join - `organization_name: str` organization_name is the name of the organization the user can join - `organization_member_count: Optional[int]` organization_member_count is the member count of the organization the user can join ### Login Provider - `class LoginProvider: …` - `provider: str` provider is the provider used by this login method, e.g. "github", "google", "custom" - `login_url: Optional[str]` login_url is the URL to redirect the browser agent to for login, when provider is "custom" ### Account Get SSO Login URL Response - `class AccountGetSSOLoginURLResponse: …` - `login_url: str` login_url is the URL to redirect the user to for SSO login ### Account List SSO Logins Response - `class AccountListSSOLoginsResponse: …` - `display_name: str` provider is the provider used by this login method, e.g. "github", "google", "custom" - `login_url: str` login_url is the URL to redirect the user to for SSO login ### Account Retrieve Response - `class AccountRetrieveResponse: …` - `account: Account` - `id: str` - `created_at: datetime` A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one. All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap second table is needed for interpretation, using a [24-hour linear smear](https://developers.google.com/time/smear). The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. # Examples Example 1: Compute Timestamp from POSIX `time()`. Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0); Example 2: Compute Timestamp from POSIX `gettimeofday()`. struct timeval tv; gettimeofday(&tv, NULL); Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000); Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. long millis = System.currentTimeMillis(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build(); Example 5: Compute Timestamp from Java `Instant.now()`. Instant now = Instant.now(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(now.getEpochSecond()) .setNanos(now.getNano()).build(); Example 6: Compute Timestamp from current time in Python. timestamp = Timestamp() timestamp.GetCurrentTime() # JSON Mapping In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset). For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017. In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime\(\)) to obtain a formatter capable of generating timestamps in this format. - `email: str` - `name: str` - `updated_at: datetime` A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970, in the proleptic Gregorian calendar which extends the Gregorian calendar backwards to year one. All minutes are 60 seconds long. Leap seconds are "smeared" so that no leap second table is needed for interpretation, using a [24-hour linear smear](https://developers.google.com/time/smear). The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By restricting to that range, we ensure that we can convert to and from [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings. # Examples Example 1: Compute Timestamp from POSIX `time()`. Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0); Example 2: Compute Timestamp from POSIX `gettimeofday()`. struct timeval tv; gettimeofday(&tv, NULL); Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000); Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. FILETIME ft; GetSystemTimeAsFileTime(&ft); UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. Timestamp timestamp; timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. long millis = System.currentTimeMillis(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) .setNanos((int) ((millis % 1000) * 1000000)).build(); Example 5: Compute Timestamp from Java `Instant.now()`. Instant now = Instant.now(); Timestamp timestamp = Timestamp.newBuilder().setSeconds(now.getEpochSecond()) .setNanos(now.getNano()).build(); Example 6: Compute Timestamp from current time in Python. timestamp = Timestamp() timestamp.GetCurrentTime() # JSON Mapping In JSON format, the Timestamp type is encoded as a string in the [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" where {year} is always expressed using four digits while {month}, {day}, {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone is required. A proto3 JSON serializer should always use UTC (as indicated by "Z") when printing the Timestamp type and a proto3 JSON parser should be able to accept both UTC and other timezones (as indicated by an offset). For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past 01:30 UTC on January 15, 2017. In JavaScript, one can convert a Date object to this format using the standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString) method. In Python, a standard `datetime.datetime` object can be converted to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use the Joda Time's [`ISODateTimeFormat.dateTime()`](http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime\(\)) to obtain a formatter capable of generating timestamps in this format. - `avatar_url: Optional[str]` - `joinables: Optional[List[JoinableOrganization]]` joinables is deprecated. Use ListJoinableOrganizations instead. - `organization_id: str` organization_id is the id of the organization the user can join - `organization_name: str` organization_name is the name of the organization the user can join - `organization_member_count: Optional[int]` organization_member_count is the member count of the organization the user can join - `memberships: Optional[List[AccountMembership]]` - `organization_id: str` organization_id is the id of the organization the user is a member of - `organization_name: str` organization_name is the name of the organization the user is a member of - `user_id: str` user_id is the ID the user has in the organization - `user_role: OrganizationRole` user_role is the role the user has in the organization - `"ORGANIZATION_ROLE_UNSPECIFIED"` - `"ORGANIZATION_ROLE_ADMIN"` - `"ORGANIZATION_ROLE_MEMBER"` - `organization_member_count: Optional[int]` organization_member_count is the member count of the organization the user is a member of - `organization_tier: Optional[OrganizationTier]` organization_tier is the tier of the organization (Free, Core, Enterprise) - `"ORGANIZATION_TIER_UNSPECIFIED"` - `"ORGANIZATION_TIER_FREE"` - `"ORGANIZATION_TIER_ENTERPRISE"` - `"ORGANIZATION_TIER_CORE"` - `"ORGANIZATION_TIER_FREE_ONA"` - `organization_id: Optional[str]` organization_id is the ID of the organization the account is owned by if it's created through custom SSO - `public_email_provider: Optional[bool]` public_email_provider is true if the email for the Account matches a known public email provider