# Accounts ## DeleteAccount **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" ``` ### Body Parameters - `accountId: string` - `reason: optional string` reason is an optional field for the reason for account deletion ### Example ```http curl https://app.gitpod.io/api/gitpod.v1.AccountService/DeleteAccount \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer $GITPOD_API_KEY" \ -d '{ "accountId": "f53d2330-3795-4c5d-a1f3-453121af9c60" }' ``` #### Response ```json {} ``` ## GetSSOLoginURL **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" ``` ### Body Parameters - `email: string` email is the email the user wants to login with - `returnTo: optional string` return_to is the URL the user will be redirected to after login ### Returns - `loginUrl: string` login_url is the URL to redirect the user to for SSO login ### Example ```http curl https://app.gitpod.io/api/gitpod.v1.AccountService/GetSSOLoginURL \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer $GITPOD_API_KEY" \ -d '{ "email": "user@company.com" }' ``` #### Response ```json { "loginUrl": "loginUrl" } ``` ## ListJoinableOrganizations **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 {} ``` ### Query Parameters - `token: optional string` - `pageSize: optional number` ### Body Parameters - `pagination: optional object { token, pageSize }` pagination contains the pagination options for listing joinable organizations - `token: optional string` Token for the next set of results that was returned as next_token of a PaginationResponse - `pageSize: optional number` Page size is the maximum number of results to retrieve per page. Defaults to 25. Maximum 100. ### Returns - `pagination: object { nextToken }` - `nextToken: optional string` Token passed for retrieving the next set of results. Empty if there are no more results - `joinableOrganizations: optional array of JoinableOrganization` - `organizationId: string` organization_id is the id of the organization the user can join - `organizationName: string` organization_name is the name of the organization the user can join - `organizationMemberCount: optional number` organization_member_count is the member count of the organization the user can join ### Example ```http curl https://app.gitpod.io/api/gitpod.v1.AccountService/ListJoinableOrganizations \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer $GITPOD_API_KEY" \ -d '{}' ``` #### Response ```json { "pagination": { "nextToken": "nextToken" }, "joinableOrganizations": [ { "organizationId": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "organizationName": "organizationName", "organizationMemberCount": 0 } ] } ``` ## ListLoginProviders **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 ``` ### Query Parameters - `token: optional string` - `pageSize: optional number` ### Body Parameters - `filter: optional object { email, inviteId }` filter contains the filter options for listing login methods - `email: optional string` email is the email address to filter SSO providers by - `inviteId: optional string` invite_id is the ID of the invite URL the user wants to login with - `pagination: optional object { token, pageSize }` pagination contains the pagination options for listing login methods - `token: optional string` Token for the next set of results that was returned as next_token of a PaginationResponse - `pageSize: optional number` Page size is the maximum number of results to retrieve per page. Defaults to 25. Maximum 100. ### Returns - `pagination: object { nextToken }` - `nextToken: optional string` Token passed for retrieving the next set of results. Empty if there are no more results - `allowCustom: optional boolean` allow_custom indicates whether custom SSO is allowed for this domain - `loginProviders: optional array of LoginProvider` - `provider: string` provider is the provider used by this login method, e.g. "github", "google", "custom" - `loginUrl: optional string` login_url is the URL to redirect the browser agent to for login, when provider is "custom" ### Example ```http curl https://app.gitpod.io/api/gitpod.v1.AccountService/ListLoginProviders \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer $GITPOD_API_KEY" \ -d '{}' ``` #### Response ```json { "pagination": { "nextToken": "nextToken" }, "allowCustom": true, "loginProviders": [ { "provider": "provider", "loginUrl": "loginUrl" } ] } ``` ## ListSSOLogins **post** `/gitpod.v1.AccountService/ListSSOLogins` ListSSOLogins ### Query Parameters - `token: optional string` - `pageSize: optional number` ### Body Parameters - `email: string` email is the email the user wants to login with - `pagination: optional object { token, pageSize }` pagination contains the pagination options for listing SSO logins - `token: optional string` Token for the next set of results that was returned as next_token of a PaginationResponse - `pageSize: optional number` Page size is the maximum number of results to retrieve per page. Defaults to 25. Maximum 100. - `returnTo: optional string` return_to is the URL the user will be redirected to after login ### Returns - `pagination: object { nextToken }` - `nextToken: optional string` Token passed for retrieving the next set of results. Empty if there are no more results - `logins: optional array of object { displayName, loginUrl }` - `displayName: string` provider is the provider used by this login method, e.g. "github", "google", "custom" - `loginUrl: string` login_url is the URL to redirect the user to for SSO login ### Example ```http curl https://app.gitpod.io/api/gitpod.v1.AccountService/ListSSOLogins \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer $GITPOD_API_KEY" \ -d '{ "email": "dev@stainless.com" }' ``` #### Response ```json { "pagination": { "nextToken": "nextToken" }, "logins": [ { "displayName": "displayName", "loginUrl": "loginUrl" } ] } ``` ## GetAccount **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 {} ``` ### Body Parameters - `empty: optional boolean` ### Returns - `account: Account` - `id: string` - `createdAt: string` 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: string` - `name: string` - `updatedAt: string` 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. - `avatarUrl: optional string` - `joinables: optional array of JoinableOrganization` joinables is deprecated. Use ListJoinableOrganizations instead. - `organizationId: string` organization_id is the id of the organization the user can join - `organizationName: string` organization_name is the name of the organization the user can join - `organizationMemberCount: optional number` organization_member_count is the member count of the organization the user can join - `memberships: optional array of AccountMembership` - `organizationId: string` organization_id is the id of the organization the user is a member of - `organizationName: string` organization_name is the name of the organization the user is a member of - `userId: string` user_id is the ID the user has in the organization - `userRole: OrganizationRole` user_role is the role the user has in the organization - `"ORGANIZATION_ROLE_UNSPECIFIED"` - `"ORGANIZATION_ROLE_ADMIN"` - `"ORGANIZATION_ROLE_MEMBER"` - `organizationMemberCount: optional number` organization_member_count is the member count of the organization the user is a member of - `organizationTier: 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"` - `organizationId: optional string` organization_id is the ID of the organization the account is owned by if it's created through custom SSO - `publicEmailProvider: optional boolean` public_email_provider is true if the email for the Account matches a known public email provider ### Example ```http curl https://app.gitpod.io/api/gitpod.v1.AccountService/GetAccount \ -H 'Content-Type: application/json' \ -H "Authorization: Bearer $GITPOD_API_KEY" \ -d '{}' ``` #### 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 - `Account object { id, createdAt, email, 7 more }` - `id: string` - `createdAt: string` 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: string` - `name: string` - `updatedAt: string` 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. - `avatarUrl: optional string` - `joinables: optional array of JoinableOrganization` joinables is deprecated. Use ListJoinableOrganizations instead. - `organizationId: string` organization_id is the id of the organization the user can join - `organizationName: string` organization_name is the name of the organization the user can join - `organizationMemberCount: optional number` organization_member_count is the member count of the organization the user can join - `memberships: optional array of AccountMembership` - `organizationId: string` organization_id is the id of the organization the user is a member of - `organizationName: string` organization_name is the name of the organization the user is a member of - `userId: string` user_id is the ID the user has in the organization - `userRole: OrganizationRole` user_role is the role the user has in the organization - `"ORGANIZATION_ROLE_UNSPECIFIED"` - `"ORGANIZATION_ROLE_ADMIN"` - `"ORGANIZATION_ROLE_MEMBER"` - `organizationMemberCount: optional number` organization_member_count is the member count of the organization the user is a member of - `organizationTier: 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"` - `organizationId: optional string` organization_id is the ID of the organization the account is owned by if it's created through custom SSO - `publicEmailProvider: optional boolean` public_email_provider is true if the email for the Account matches a known public email provider ### Account Membership - `AccountMembership object { organizationId, organizationName, userId, 3 more }` - `organizationId: string` organization_id is the id of the organization the user is a member of - `organizationName: string` organization_name is the name of the organization the user is a member of - `userId: string` user_id is the ID the user has in the organization - `userRole: OrganizationRole` user_role is the role the user has in the organization - `"ORGANIZATION_ROLE_UNSPECIFIED"` - `"ORGANIZATION_ROLE_ADMIN"` - `"ORGANIZATION_ROLE_MEMBER"` - `organizationMemberCount: optional number` organization_member_count is the member count of the organization the user is a member of - `organizationTier: 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 - `JoinableOrganization object { organizationId, organizationName, organizationMemberCount }` - `organizationId: string` organization_id is the id of the organization the user can join - `organizationName: string` organization_name is the name of the organization the user can join - `organizationMemberCount: optional number` organization_member_count is the member count of the organization the user can join ### Login Provider - `LoginProvider object { provider, loginUrl }` - `provider: string` provider is the provider used by this login method, e.g. "github", "google", "custom" - `loginUrl: optional string` login_url is the URL to redirect the browser agent to for login, when provider is "custom" ### Account Delete Response - `AccountDeleteResponse = unknown` ### Account Get SSO Login URL Response - `AccountGetSSOLoginURLResponse object { loginUrl }` - `loginUrl: string` login_url is the URL to redirect the user to for SSO login ### Account List SSO Logins Response - `AccountListSSOLoginsResponse object { displayName, loginUrl }` - `displayName: string` provider is the provider used by this login method, e.g. "github", "google", "custom" - `loginUrl: string` login_url is the URL to redirect the user to for SSO login ### Account Retrieve Response - `AccountRetrieveResponse object { account }` - `account: Account` - `id: string` - `createdAt: string` 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: string` - `name: string` - `updatedAt: string` 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. - `avatarUrl: optional string` - `joinables: optional array of JoinableOrganization` joinables is deprecated. Use ListJoinableOrganizations instead. - `organizationId: string` organization_id is the id of the organization the user can join - `organizationName: string` organization_name is the name of the organization the user can join - `organizationMemberCount: optional number` organization_member_count is the member count of the organization the user can join - `memberships: optional array of AccountMembership` - `organizationId: string` organization_id is the id of the organization the user is a member of - `organizationName: string` organization_name is the name of the organization the user is a member of - `userId: string` user_id is the ID the user has in the organization - `userRole: OrganizationRole` user_role is the role the user has in the organization - `"ORGANIZATION_ROLE_UNSPECIFIED"` - `"ORGANIZATION_ROLE_ADMIN"` - `"ORGANIZATION_ROLE_MEMBER"` - `organizationMemberCount: optional number` organization_member_count is the member count of the organization the user is a member of - `organizationTier: 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"` - `organizationId: optional string` organization_id is the ID of the organization the account is owned by if it's created through custom SSO - `publicEmailProvider: optional boolean` public_email_provider is true if the email for the Account matches a known public email provider