# Accounts ## DeleteAccount `client.Accounts.Delete(ctx, body) (*AccountDeleteResponse, error)` **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 - `body AccountDeleteParams` - `AccountID param.Field[string]` - `Reason param.Field[string]` reason is an optional field for the reason for account deletion ### Returns - `type AccountDeleteResponse interface{…}` ### Example ```go package main import ( "context" "fmt" "github.com/gitpod-io/gitpod-sdk-go" "github.com/gitpod-io/gitpod-sdk-go/option" ) func main() { client := gitpod.NewClient( option.WithBearerToken("My Bearer Token"), ) account, err := client.Accounts.Delete(context.TODO(), gitpod.AccountDeleteParams{ AccountID: gitpod.F("f53d2330-3795-4c5d-a1f3-453121af9c60"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", account) } ``` #### Response ```json {} ``` ## GetSSOLoginURL `client.Accounts.GetSSOLoginURL(ctx, body) (*AccountGetSSOLoginURLResponse, error)` **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 - `body AccountGetSSOLoginURLParams` - `Email param.Field[string]` email is the email the user wants to login with - `ReturnTo param.Field[string]` return_to is the URL the user will be redirected to after login ### Returns - `type AccountGetSSOLoginURLResponse struct{…}` - `LoginURL string` login_url is the URL to redirect the user to for SSO login ### Example ```go package main import ( "context" "fmt" "github.com/gitpod-io/gitpod-sdk-go" "github.com/gitpod-io/gitpod-sdk-go/option" ) func main() { client := gitpod.NewClient( option.WithBearerToken("My Bearer Token"), ) response, err := client.Accounts.GetSSOLoginURL(context.TODO(), gitpod.AccountGetSSOLoginURLParams{ Email: gitpod.F("user@company.com"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", response.LoginURL) } ``` #### Response ```json { "loginUrl": "loginUrl" } ``` ## ListJoinableOrganizations `client.Accounts.ListJoinableOrganizations(ctx, params) (*JoinableOrganizationsPage[JoinableOrganization], error)` **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 - `params AccountListJoinableOrganizationsParams` - `Token param.Field[string]` Query param - `PageSize param.Field[int64]` Query param - `Pagination param.Field[AccountListJoinableOrganizationsParamsPagination]` Body param: pagination contains the pagination options for listing joinable organizations - `Token string` Token for the next set of results that was returned as next_token of a PaginationResponse - `PageSize int64` Page size is the maximum number of results to retrieve per page. Defaults to 25. Maximum 100. ### Returns - `type JoinableOrganization struct{…}` - `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 int64` organization_member_count is the member count of the organization the user can join ### Example ```go package main import ( "context" "fmt" "github.com/gitpod-io/gitpod-sdk-go" "github.com/gitpod-io/gitpod-sdk-go/option" ) func main() { client := gitpod.NewClient( option.WithBearerToken("My Bearer Token"), ) page, err := client.Accounts.ListJoinableOrganizations(context.TODO(), gitpod.AccountListJoinableOrganizationsParams{ }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", page) } ``` #### Response ```json { "pagination": { "nextToken": "nextToken" }, "joinableOrganizations": [ { "organizationId": "182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e", "organizationName": "organizationName", "organizationMemberCount": 0 } ] } ``` ## ListLoginProviders `client.Accounts.ListLoginProviders(ctx, params) (*LoginProvidersPage[LoginProvider], error)` **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 - `params AccountListLoginProvidersParams` - `Token param.Field[string]` Query param - `PageSize param.Field[int64]` Query param - `Filter param.Field[AccountListLoginProvidersParamsFilter]` Body param: filter contains the filter options for listing login methods - `Email string` email is the email address to filter SSO providers by - `InviteID string` invite_id is the ID of the invite URL the user wants to login with - `Pagination param.Field[AccountListLoginProvidersParamsPagination]` Body param: pagination contains the pagination options for listing login methods - `Token string` Token for the next set of results that was returned as next_token of a PaginationResponse - `PageSize int64` Page size is the maximum number of results to retrieve per page. Defaults to 25. Maximum 100. ### Returns - `type LoginProvider struct{…}` - `Provider 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 browser agent to for login, when provider is "custom" ### Example ```go package main import ( "context" "fmt" "github.com/gitpod-io/gitpod-sdk-go" "github.com/gitpod-io/gitpod-sdk-go/option" ) func main() { client := gitpod.NewClient( option.WithBearerToken("My Bearer Token"), ) page, err := client.Accounts.ListLoginProviders(context.TODO(), gitpod.AccountListLoginProvidersParams{ Pagination: gitpod.F(gitpod.AccountListLoginProvidersParamsPagination{ PageSize: gitpod.F(int64(20)), }), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", page) } ``` #### Response ```json { "pagination": { "nextToken": "nextToken" }, "allowCustom": true, "loginProviders": [ { "provider": "provider", "loginUrl": "loginUrl" } ] } ``` ## ListSSOLogins `client.Accounts.ListSSOLogins(ctx, params) (*LoginsPage[AccountListSSOLoginsResponse], error)` **post** `/gitpod.v1.AccountService/ListSSOLogins` ListSSOLogins ### Parameters - `params AccountListSSOLoginsParams` - `Email param.Field[string]` Body param: email is the email the user wants to login with - `Token param.Field[string]` Query param - `PageSize param.Field[int64]` Query param - `Pagination param.Field[AccountListSSOLoginsParamsPagination]` Body param: pagination contains the pagination options for listing SSO logins - `Token string` Token for the next set of results that was returned as next_token of a PaginationResponse - `PageSize int64` Page size is the maximum number of results to retrieve per page. Defaults to 25. Maximum 100. - `ReturnTo param.Field[string]` Body param: return_to is the URL the user will be redirected to after login ### Returns - `type AccountListSSOLoginsResponse struct{…}` - `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 ```go package main import ( "context" "fmt" "github.com/gitpod-io/gitpod-sdk-go" "github.com/gitpod-io/gitpod-sdk-go/option" ) func main() { client := gitpod.NewClient( option.WithBearerToken("My Bearer Token"), ) page, err := client.Accounts.ListSSOLogins(context.TODO(), gitpod.AccountListSSOLoginsParams{ Email: gitpod.F("dev@stainless.com"), }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", page) } ``` #### Response ```json { "pagination": { "nextToken": "nextToken" }, "logins": [ { "displayName": "displayName", "loginUrl": "loginUrl" } ] } ``` ## GetAccount `client.Accounts.Get(ctx, body) (*AccountGetResponse, error)` **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 - `body AccountGetParams` - `Empty param.Field[bool]` ### Returns - `type AccountGetResponse struct{…}` - `Account Account` - `ID string` - `CreatedAt Time` 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 Time` 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 string` - `Joinables []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 int64` organization_member_count is the member count of the organization the user can join - `Memberships []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 - `const OrganizationRoleUnspecified OrganizationRole = "ORGANIZATION_ROLE_UNSPECIFIED"` - `const OrganizationRoleAdmin OrganizationRole = "ORGANIZATION_ROLE_ADMIN"` - `const OrganizationRoleMember OrganizationRole = "ORGANIZATION_ROLE_MEMBER"` - `OrganizationMemberCount int64` organization_member_count is the member count of the organization the user is a member of - `OrganizationTier OrganizationTier` organization_tier is the tier of the organization (Free, Core, Enterprise) - `const OrganizationTierUnspecified OrganizationTier = "ORGANIZATION_TIER_UNSPECIFIED"` - `const OrganizationTierFree OrganizationTier = "ORGANIZATION_TIER_FREE"` - `const OrganizationTierEnterprise OrganizationTier = "ORGANIZATION_TIER_ENTERPRISE"` - `const OrganizationTierCore OrganizationTier = "ORGANIZATION_TIER_CORE"` - `const OrganizationTierFreeOna OrganizationTier = "ORGANIZATION_TIER_FREE_ONA"` - `OrganizationID string` organization_id is the ID of the organization the account is owned by if it's created through custom SSO - `PublicEmailProvider bool` public_email_provider is true if the email for the Account matches a known public email provider ### Example ```go package main import ( "context" "fmt" "github.com/gitpod-io/gitpod-sdk-go" "github.com/gitpod-io/gitpod-sdk-go/option" ) func main() { client := gitpod.NewClient( option.WithBearerToken("My Bearer Token"), ) account, err := client.Accounts.Get(context.TODO(), gitpod.AccountGetParams{ }) if err != nil { panic(err.Error()) } fmt.Printf("%+v\n", 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 - `type Account struct{…}` - `ID string` - `CreatedAt Time` 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 Time` 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 string` - `Joinables []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 int64` organization_member_count is the member count of the organization the user can join - `Memberships []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 - `const OrganizationRoleUnspecified OrganizationRole = "ORGANIZATION_ROLE_UNSPECIFIED"` - `const OrganizationRoleAdmin OrganizationRole = "ORGANIZATION_ROLE_ADMIN"` - `const OrganizationRoleMember OrganizationRole = "ORGANIZATION_ROLE_MEMBER"` - `OrganizationMemberCount int64` organization_member_count is the member count of the organization the user is a member of - `OrganizationTier OrganizationTier` organization_tier is the tier of the organization (Free, Core, Enterprise) - `const OrganizationTierUnspecified OrganizationTier = "ORGANIZATION_TIER_UNSPECIFIED"` - `const OrganizationTierFree OrganizationTier = "ORGANIZATION_TIER_FREE"` - `const OrganizationTierEnterprise OrganizationTier = "ORGANIZATION_TIER_ENTERPRISE"` - `const OrganizationTierCore OrganizationTier = "ORGANIZATION_TIER_CORE"` - `const OrganizationTierFreeOna OrganizationTier = "ORGANIZATION_TIER_FREE_ONA"` - `OrganizationID string` organization_id is the ID of the organization the account is owned by if it's created through custom SSO - `PublicEmailProvider bool` public_email_provider is true if the email for the Account matches a known public email provider ### Account Membership - `type AccountMembership struct{…}` - `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 - `const OrganizationRoleUnspecified OrganizationRole = "ORGANIZATION_ROLE_UNSPECIFIED"` - `const OrganizationRoleAdmin OrganizationRole = "ORGANIZATION_ROLE_ADMIN"` - `const OrganizationRoleMember OrganizationRole = "ORGANIZATION_ROLE_MEMBER"` - `OrganizationMemberCount int64` organization_member_count is the member count of the organization the user is a member of - `OrganizationTier OrganizationTier` organization_tier is the tier of the organization (Free, Core, Enterprise) - `const OrganizationTierUnspecified OrganizationTier = "ORGANIZATION_TIER_UNSPECIFIED"` - `const OrganizationTierFree OrganizationTier = "ORGANIZATION_TIER_FREE"` - `const OrganizationTierEnterprise OrganizationTier = "ORGANIZATION_TIER_ENTERPRISE"` - `const OrganizationTierCore OrganizationTier = "ORGANIZATION_TIER_CORE"` - `const OrganizationTierFreeOna OrganizationTier = "ORGANIZATION_TIER_FREE_ONA"` ### Joinable Organization - `type JoinableOrganization struct{…}` - `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 int64` organization_member_count is the member count of the organization the user can join ### Login Provider - `type LoginProvider struct{…}` - `Provider 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 browser agent to for login, when provider is "custom"