> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qumo-deploy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Types

> Every request and response type the SDK exports.

## APIKey

A project API key. The secret itself is returned only when the key is created.

* **`id`** `string` — The key's id.
* **`project_id`** `string` — The project the key belongs to.
* **`name`** `string` — Display name.
* **`prefix`** `string` — The key's visible prefix, to recognise it without the secret.
* **`scopes`** `string[]` — Scope strings the key holds. See the scopes and permissions guide.
* **`broadcast_prefix`** `string` — Namespace credentials from this key may use; each credential picks a path beneath it.
* **`mode`** `"pub" | "sub"` — Whether credentials from this key publish or subscribe.
* **`expires_at`** `string | null` — When the key stops working; null when it does not expire.
* **`revoked_at`** `string | null` — When the key was revoked; null while it is active.
* **`created_at`** `string` — When the key was created.
* **`last_used_at`** `string | null` — When the key was last used; null if never.
* **`request_count_30d`** `number` — Requests made with the key in the last 30 days.

## APIKeyIPAllowlist

A CIDR range an API key may be used from.

* **`id`** `string` — The entry's id.
* **`api_key_id`** `string` — The API key the entry applies to.
* **`cidr`** `string` — Allowed range, e.g. `203.0.113.0/24`.
* **`label`** `string` — Display label.
* **`created_at`** `string` — When the entry was created.

## APIKeyUsage

Per-period breakdown of API key usage.

* **`project_id`** `string` — The project the key belongs to.
* **`api_key_id`** `string` — The key the usage belongs to.
* **`metric`** `string` — The metric queried.
* **`granularity`** `"hour" | "day"` — Bucket size of `periods`.
* **`periods`** `{ period: string; status_category: "success" | "client_error" | "server_error" | "unknown"; count: number; total_latency_ms: number }[]` — One entry per bucket and response category, oldest first.

## AUDIT\_RESOURCE\_TYPES

Resource types the audit log can be filtered by.

```ts theme={null}
const AUDIT_RESOURCE_TYPES = [
  "node",
  "project",
  "api_key",
  "identity",
  "tenant",
] as const;
```

## AuditEntry

One entry of a workspace's audit log.

* **`id`** `number` — The entry's id; higher ids are newer.
* **`tenant_id`** `string` — The workspace the event happened in.
* **`project_id?`** `string` — Present only for project-scoped events; omitted for tenant-level ones.
* **`actor_type`** `string` — Who acted: `user`, `identity` or `api_key`.
* **`actor_id`** `string` — The acting principal's id.
* **`actor_name?`** `string` — Display name for user and identity actors; absent when unknown.
* **`action`** `string` — What happened, e.g. `project.create`.
* **`resource`** `Record<string, unknown>` — The resource acted on (its type and id, and any identifying fields).
* **`metadata`** `Record<string, unknown>` — Action-specific detail.
* **`created_at`** `string` — When the event happened.

## AuditWebhook

A workspace's audit webhook, as read back. The secret is never returned.

* **`url`** `string` — Where audit events are posted; empty when no webhook is configured.
* **`has_secret`** `boolean` — Whether a signing secret is set.

## AuditWebhookConfig

Settings for a workspace's audit webhook.

* **`url`** `string` — Where audit events are posted.
* **`secret`** `string` — Secret used to sign each delivery.

## BillingPeriod

A billing period.

* **`start`** `string` — Start of the period.
* **`end`** `string` — End of the period.

## BillingSummary

Current-period billing snapshot for a project.
All byte values are in bytes. Per-product quotas and overage rates live in products.
Percentages are omitted — compute them client-side against whichever denominator applies.

* **`plan`** `BillingSummaryPlan` — The workspace's plan.
* **`period`** `BillingPeriod` — The current billing period.
* **`computed_at`** `string` — Server timestamp marking when the usage figures were read. Usage queries include the not-yet-rolled-up usage\_events tail, so this can be fresher than the last worker tick. Show as an "as of" / "updated" stamp.
* **`usage`** `BillingSummaryUsage` — Usage this period.
* **`cost`** `BillingSummaryCost` — Cost this period.
* **`products?`** `Record<string, ProductUsage>` — Per-product usage, keyed by SKU key.

Types: [`BillingSummaryPlan`](/sdk/reference/types#billingsummaryplan), [`BillingPeriod`](/sdk/reference/types#billingperiod), [`BillingSummaryUsage`](/sdk/reference/types#billingsummaryusage), [`BillingSummaryCost`](/sdk/reference/types#billingsummarycost), [`ProductUsage`](/sdk/reference/types#productusage)

## BillingSummaryCost

The cost section of a [`BillingSummary`](/sdk/reference/types#billingsummary).

* **`current_usd`** `number` — Metered cost so far this period, in USD (excludes the subscription price).
* **`overage_bytes`** `number` — Bytes beyond the included quota.
* **`overage_usd`** `number` — Cost of the overage, in USD.

## BillingSummaryPlan

The plan section of a [`BillingSummary`](/sdk/reference/types#billingsummary).

* **`name`** `string` — The workspace's plan name.

## BillingSummaryUsage

The usage section of a [`BillingSummary`](/sdk/reference/types#billingsummary).

* **`total_bytes`** `number` — Tenant-wide byte total across all active SKUs.
* **`project_bytes`** `number` — This project's contribution.

## BudgetAlert

A budget or usage-cap alert that fired for a project.

* **`id`** `string` — The alert's id.
* **`project_id`** `string` — The project the alert fired for.
* **`alert_type`** `string` — What fired, e.g. `budget_threshold`.
* **`threshold`** `number` — The threshold that was crossed.
* **`fired_at`** `string` — When the alert fired.
* **`resolved_at?`** `string` — When the condition cleared; absent while it is still active.

## CheckoutSession

Stripe Checkout redirect response.

* **`client_secret`** `string` — client\_secret of an Elements-mode Checkout Session. The browser mounts the Payment Element with it; there is no hosted page to redirect to.
* **`publishable_key`** `string` — Publishable key, returned so the SPA needs no build-time Stripe config.

## CheckoutSessionOptions

Options for [`BillingResource.createCheckoutSession`](/sdk/reference/billing#createcheckoutsession).

* **`plan_name?`** `string` — Plan to subscribe to: `"Pro"` or `"Team"`, case-sensitive (`"pro"` is rejected). Empty lets the caller pick on the Payment Element.
* **`tenantId?`** `string` — Scopes the request to a tenant. Session (cookie) callers carry no tenant of their own — both the scope check and the handler read it from the query string. API-key callers already carry a tenant and can omit it.

## ComponentStatus

<Warning>Deprecated. No endpoint returns this type; it will be removed.</Warning>

Status of one system component.

* **`name`** `string` — Component name.
* **`status`** `"operational" | "degraded" | "outage"` — Component status.
* **`metrics?`** `Record<string, number>` — Component-specific metrics.

## ConnectionLimit

The project's concurrent-connection cap. `limit` is what the server
enforces right now (override ?? plan default); `override` is the explicit
per-project value, null when the plan default applies; `plan_default` is
the owning tenant's plan value, for display.

* **`limit`** `number` — The cap enforced now.
* **`override`** `number | null` — The project's own cap; null when the plan default applies.
* **`plan_default`** `number` — The owning workspace's plan cap.

## CreatedPersonalToken

A newly created personal access token; `value` is shown only once.

Extends [`PersonalToken`](/sdk/reference/types#personaltoken).

* **`value`** `string` — The token secret. It cannot be retrieved again.

## CreateProjectParams

Parameters for [`ProjectsResource.create`](/sdk/reference/projects#create).

* **`name`** `string` — Display name.
* **`environment?`** `ProjectEnvironment` — Defaults to `prod`, which needs a plan with the managed relay network (402 on Free). `dev` is for your own relay; one per tenant.
* **`tenant_id?`** `string` — Tenant the project is created in. Session (cookie) callers carry no tenant, and the server creates the project in the identity's tenant — resolved from this query parameter. Omit only for identities that already carry a tenant (API keys); session callers that omit it get a 403.

Types: [`ProjectEnvironment`](/sdk/reference/types#projectenvironment)

## DeviceCodeResponse

Start of the OAuth device flow (RFC 8628), used by the CLI to sign in.

* **`device_code`** `string` — Code the client polls with. Keep it private.
* **`user_code`** `string` — Short code the user enters at `verification_uri`.
* **`verification_uri`** `string` — Page where the user approves the sign-in.
* **`expires_in`** `number` — Seconds until the codes expire.
* **`interval`** `number` — Minimum seconds to wait between polls.

## IAM\_ROLE\_IDS

Every built-in IAM role id the server can emit (in `Session.role`,
`TenantMembership.role_id`, `Invitation.role_id`, …), in the server's
builtinRoleList order.

Compare against these ids — never bare strings like "admin": no server role
ever equals one (that exact mismatch made the Tenants page unreachable for
everyone). internal/auth's TestSDKExportsEveryBuiltinRole and the
dashboard's roles.test.ts both fail if this list drifts from the Go list.

```ts theme={null}
const IAM_ROLE_IDS = [
  "roles/platform.admin",
  "roles/project.viewer",
  "roles/project.editor",
  "roles/project.admin",
  "roles/tenant.admin",
] as const;
```

## IAMBinding

A role granted to a principal at a scope.

* **`id`** `string` — The binding's id.
* **`principal_type`** `string` — `user` or `identity`.
* **`principal_id`** `string` — The user's or identity's id.
* **`principal_name?`** `string` — A user's or identity's name; absent when the principal no longer exists.
* **`principal_email?`** `string` — A user's email; absent for identities.
* **`role_id`** `string` — The role granted. See [`IAM_ROLE_IDS`](/sdk/reference/types#iam_role_ids).
* **`scope_type`** `string` — `tenant`, `project` or `platform`.
* **`scope_id`** `string` — The workspace's or project's id; the nil UUID for platform scope.

## IAMRole

A built-in IAM role and the permissions it grants.

* **`id`** `string` — The role's id, e.g. `roles/tenant.admin`.
* **`name`** `string` — Display name.
* **`permissions`** `string[]` — Permission strings the role grants; `*` means all.

## IAMRoleID

One of the built-in IAM role ids in [`IAM_ROLE_IDS`](/sdk/reference/types#iam_role_ids).

```ts theme={null}
type IAMRoleID = (typeof IAM_ROLE_IDS)[number]
```

## Identity

A machine identity: a non-human principal for services and CI.

* **`id`** `string` — The identity's id.
* **`project_id`** `string` — The project the identity belongs to.
* **`name`** `string` — Display name.
* **`owner_user_id`** `string` — The user who created the identity.
* **`created_at`** `string` — When the identity was created.

## IdentityToken

A newly created identity token; `value` is shown only once.

* **`id`** `string` — The token's id.
* **`value`** `string` — The token secret. It cannot be retrieved again.
* **`created_at`** `string` — When the token was created.
* **`expires_at?`** `string` — When the token expires; absent when it does not.
* **`scopes`** `string[]` — Scope strings the token holds.

## IdentityTokenMetadata

An identity token as listed: everything but the secret.

* **`id`** `string` — The token's id.
* **`created_at`** `string` — When the token was created.
* **`expires_at?`** `string` — When the token expires; absent when it does not.
* **`scopes`** `string[]` — Scope strings the token holds.

## Invitation

A pending invitation to join a workspace.

* **`id`** `string` — The invitation's id.
* **`tenant_id`** `string` — The workspace the invitee will join.
* **`email`** `string` — The address the invitation was sent to.
* **`role_id`** `string` — The IAM role id the invitee receives on accepting. See [`IAM_ROLE_IDS`](/sdk/reference/types#iam_role_ids).
* **`expires_at`** `string` — When the invitation stops being accepted.
* **`created_at`** `string` — When the invitation was created.

## InvitationData

Response of verifying an invitation token.

* **`invitation`** `Invitation` — The invitation the token belongs to.

Types: [`Invitation`](/sdk/reference/types#invitation)

## Invoice

A Stripe invoice for a workspace. Fields are Stripe's own values, passed
through: money in the currency's minor unit, times in Unix seconds.

* **`id`** `string` — Stripe's invoice id.
* **`amount_due`** `number` — Amount due in the currency's minor unit (cents for USD).
* **`currency`** `string` — Currency code, e.g. `usd`.
* **`status`** `"paid" | "open" | "void" | "uncollectible"` — Stripe's invoice status.
* **`period_start`** `number` — Start of the billed period, in Unix seconds.
* **`period_end`** `number` — End of the billed period, in Unix seconds.
* **`pdf_url`** `string` — Link to the invoice PDF.
* **`created_at`** `number` — When Stripe created the invoice, in Unix seconds.

## IPAllowlist

A CIDR range an identity may call the API from.

* **`id`** `string` — The entry's id.
* **`identity_id`** `string` — The identity the entry applies to.
* **`cidr`** `string` — Allowed range, e.g. `203.0.113.0/24`.
* **`label`** `string` — Display label.
* **`created_at`** `string` — When the entry was created.

## IssueCredentialParams

Parameters for [`CredentialsResource.issue`](/sdk/reference/credentials#issue).

* **`scopes`** `string[]` — Scope strings the credential grants, within the API key's own scopes.
* **`ttl_seconds`** `number` — Lifetime in seconds, clamped to the project's max\_credential\_ttl (900 s unless set) and never above 3600 s. Mint a credential when you connect rather than caching one for its whole lifetime.
* **`path?`** `string` — Broadcast path relative to the API key's prefix, e.g. "room/42". Omit for the whole prefix.

## IssuedCredential

A relay credential: a signed token for connecting to relays.

* **`token`** `string` — The signed credential (a JWT) to present to a relay.
* **`expires_at`** `string` — When the credential expires.
* **`jti`** `string` — The credential's unique id; revoke it by this id.
* **`relays?`** `RelayEndpoint[]` — Relays the credential can connect to, nearest first. Absent for dev projects.
* **`fallback?`** `string[]` — Relay URLs to try if none in `relays` answers.

Types: [`RelayEndpoint`](/sdk/reference/types#relayendpoint)

## IssueForProjectParams

Parameters for [`CredentialsResource.issueForProject`](/sdk/reference/credentials#issueforproject).

* **`api_key_id`** `string` — The project API key whose authority the credential is minted under.
* **`scopes`** `string[]` — Scope strings the credential grants, within the API key's own scopes.
* **`ttl_seconds`** `number` — Lifetime in seconds; see [`IssueCredentialParams.ttl_seconds`](/sdk/reference/types#issuecredentialparams).
* **`path?`** `string` — Broadcast path relative to the API key's prefix. Omit for the whole prefix.

## JSONWebKey

One Ed25519 public key that verifies relay credentials.

* **`kty`** `"OKP"` — Key type: always `OKP` (RFC 8037).
* **`crv`** `"Ed25519"` — Curve: always `Ed25519`.
* **`x`** `string` — The public key, base64url-encoded.
* **`kid`** `string` — Key id; matches the `kid` header of credentials it signed.
* **`alg`** `"EdDSA"` — Algorithm: always `EdDSA`.
* **`use`** `"sig"` — Key use: always `sig`.

## JSONWebKeySet

The public key set published at `/v1/credentials/jwks`, active key first.

* **`keys`** `JSONWebKey[]` — The keys, active key first.

Types: [`JSONWebKey`](/sdk/reference/types#jsonwebkey)

## ListAuditParams

Filters for listing audit log entries. All are optional.

* **`action?`** `string` — Only entries with this action, e.g. `project.create`.
* **`actorId?`** `string` — Only entries by this actor.
* **`resourceType?`** `string` — Only entries about this resource type. See [`AUDIT_RESOURCE_TYPES`](/sdk/reference/types#audit_resource_types).
* **`start?`** `string` — Only entries at or after this time (RFC 3339).
* **`end?`** `string` — Only entries before this time (RFC 3339).
* **`limit?`** `number` — Maximum number of entries to return.

## NotificationPolicy

A rule that routes workspace events to a notification channel.

* **`id`** `string` — The policy's id.
* **`tenant_id`** `string` — The workspace the policy belongs to.
* **`name`** `string` — Display name.
* **`event_category`** `string` — Event type the policy matches, or `all`.
* **`severity`** `"info" | "warning" | "critical"` — Severity of the notifications the policy sends.
* **`channel`** `"email" | "slack" | "webhook" | "discord" | "log"` — Where notifications go.
* **`recipient`** `string` — The channel's destination, e.g. an email address or webhook URL.
* **`enabled`** `boolean` — Whether the policy is active.
* **`rate_limit?`** `{ count: number; period: string }` — At most `count` notifications per `period`. `period` is a Go duration (`30m`, `1h`) or a number of days (`1d`).
* **`created_at`** `string` — When the policy was created.
* **`updated_at`** `string` — When the policy was last changed.

## OIDCProvider

An OIDC/SSO provider entry returned by GET /v1/auth/providers.

* **`id`** `string` — Provider id, used in the login URL (`/v1/auth/login/{id}`).
* **`label`** `string` — Name to show on the sign-in button.

## PaymentMethod

A saved payment method (credit/debit card).

* **`id`** `string` — Stripe's payment method id.
* **`brand`** `string` — Card brand, e.g. "Visa", "Mastercard", "Amex".
* **`last4`** `string` — Last 4 digits of the card number.
* **`exp_month`** `number` — Expiration month (1–12).
* **`exp_year`** `number` — Expiration year (e.g. 2027).
* **`billing_name`** `string` — Billing name on the card.
* **`is_default`** `boolean` — Whether this is the default payment method.
* **`created_at`** `string` — When this card was added.

## PaymentMethodsResponse

Response of listing a workspace's payment methods.

* **`payment_methods`** `PaymentMethod[]` — The saved cards.

Types: [`PaymentMethod`](/sdk/reference/types#paymentmethod)

## PersonalToken

Non-secret metadata for a user's personal access token (`qumo_pat_…`).

* **`id`** `string` — The token's id.
* **`name`** `string` — Display name.
* **`scopes`** `string[]` — Scope strings the token holds.
* **`created_at`** `string` — When the token was created.
* **`expires_at`** `string` — When the token expires.

## Plan

A billing plan available for a workspace. Plan metadata (price, tagline,
quotas, limits, feature flags) is defined server-side as constants and served
via GET /v1/plans. The published price mirrors the Stripe Price used at
checkout; Stripe remains authoritative for actual billing.

* **`name`** `"Free" | "Pro" | "Team" | "Enterprise"` — The plan's name. Case-sensitive wherever a plan name is sent to the server.
* **`price_usd_per_month`** `number` — Published monthly subscription price in USD, for display in the plan comparison. 0 means no list price: Free, and the sales-led Enterprise, whose base price is set per contract. Mirrors the Stripe Price at checkout — not a billing source.
* **`tagline`** `string` — Short marketing tagline shown on the plan card.
* **`included_usage_bytes`** `number` — Bytes included per billing period, summed across every active SKU. Derived server-side from the SKU registry — the plan itself stores no quota. Per-SKU quotas and overage rates come from the billing summary's `products` map.
* **`overage_mode`** `"hard_cap" | "allow_overage"` — `hard_cap` stops usage at the quota; `allow_overage` bills beyond it.
* **`max_concurrent_connections`** `number` — Maximum concurrent relay connections. Always finite; Number.MAX\_SAFE\_INTEGER-scale (math.MaxInt32) means effectively unlimited (Enterprise/custom).
* **`feature_flags`** `PlanFeatureFlags` — Capabilities the plan includes.

Types: [`PlanFeatureFlags`](/sdk/reference/types#planfeatureflags)

## PlanFeatureFlags

Feature flags the server enforces per plan. Every other capability is the
same on every plan, so it has no flag.

* **`relay_network`** `boolean` — Access to the managed relay network (prod projects).

## PortalSession

Stripe Customer Portal redirect response.

* **`url`** `string` — The portal URL to send the user to.

## PricingResponse

Published bandwidth pricing.

* **`bandwidth_per_gb`** `number` — Price per GB of bandwidth beyond the included quota.
* **`currency`** `string` — Currency code of `bandwidth_per_gb`, e.g. `usd`.

## ProductOverage

Overage details for a SKU.
rate\_usd\_per\_gb is included so clients can compute month-end cost forecasts
without a separate API call:
projectedBytes = usage.total\_bytes × (periodDays / daysElapsed)
projectedOverage = max(0, projectedBytes − quota.included\_bytes)
projectedCost = projectedOverage / 1e9 × rate\_usd\_per\_gb
(base subscription price is billed by Stripe, not included here)

* **`billable_bytes`** `number` — Bytes beyond the included quota.
* **`cost_usd`** `number` — Overage cost so far, in USD.
* **`rate_usd_per_gb`** `number` — Price per GB beyond the quota, in USD.

## ProductQuota

A SKU's total usage against its plan-defined included quota.

* **`total_bytes`** `number` — Bytes used this period.
* **`included_bytes`** `number` — Bytes the plan includes for this SKU.

## ProductResource

Named bandwidth metric within a product (e.g. Ingress, Egress).

* **`name`** `string` — The metric's name, e.g. `Ingress`.
* **`value_bytes`** `number` — Bytes used this period.

## ProductUsage

Usage summary for a single billable product.

* **`name`** `string` — The product's name.
* **`quota`** `ProductQuota` — Usage against the included quota.
* **`overage`** `ProductOverage` — Usage beyond the quota and its cost.
* **`resources`** `ProductResource[]` — Usage broken down by metric.
* **`percentage?`** `number` — Optional pre-calculated usage percentage against quota.

Types: [`ProductQuota`](/sdk/reference/types#productquota), [`ProductOverage`](/sdk/reference/types#productoverage), [`ProductResource`](/sdk/reference/types#productresource)

## Project

A project inside a workspace; API keys, identities and budgets belong to one.

* **`id`** `string` — The project's id.
* **`name`** `string` — Display name.
* **`tenant_id`** `string` — The workspace that owns the project.
* **`environment`** `ProjectEnvironment` — Which relays the project's credentials work on.

Types: [`ProjectEnvironment`](/sdk/reference/types#projectenvironment)

## ProjectBudget

A project's monthly spend budget and usage cap.

* **`project_id`** `string` — The project the budget belongs to.
* **`monthly_limit`** `number` — Monthly limit in USD cents
* **`usage_cap_gb`** `number` — Usage cap in GB; 0 means no cap.
* **`alert_threshold_percent`** `number` — Percentage of the budget at which an alert fires.
* **`currency`** `string` — Currency code of the budget, e.g. `usd`.
* **`updated_at`** `string` — When the budget was last changed.

## ProjectBudgetUpdate

Fields that may be changed on a project budget; omit a field to leave it unchanged.

* **`monthly_limit?`** `number` — Monthly limit in USD cents
* **`usage_cap_gb?`** `number` — Usage cap in GB; 0 means no cap.
* **`alert_threshold_percent?`** `number` — Percentage of the budget at which an alert fires.
* **`currency?`** `string` — Currency code of the budget, e.g. `usd`.

## ProjectEnvironment

Where a project's credentials work. `prod` uses the managed relay network
(paid plans); `dev` uses a relay you run yourself — the managed relays reject
its credentials, which are otherwise identical, so moving to `prod` changes
only the relay you connect to.

```ts theme={null}
type ProjectEnvironment = "prod" | "dev"
```

## ProjectUsage

A project's usage of one metric over time.

* **`project_id`** `string` — The project the usage belongs to.
* **`metric`** `string` — The metric queried, e.g. `gateway.egress_bytes`.
* **`granularity`** `"hour" | "day"` — Bucket size of `periods`.
* **`periods`** `UsagePeriod[]` — The buckets, oldest first.

Types: [`UsagePeriod`](/sdk/reference/types#usageperiod)

## RelayEndpoint

An active edge relay endpoint. Relays reach clients folded into the
credential response (see `IssuedCredential.relays`); there is no standalone
discovery endpoint.

* **`id`** `string` — The relay's id.
* **`region`** `string` — The relay's region.
* **`location?`** `string` — Human-readable place this relay serves ("Osaka, Japan"), and what a UI should show end users in place of the host. A current control plane falls back to `region` when the hub has not registered a location, so it is never empty in practice - but it is optional because an older control plane omits the key entirely, and a required type would lie to consumers about that.
* **`host`** `string` — Hostname to connect to.
* **`port`** `number` — Port to connect to.
* **`url`** `string` — Full URL to connect to.
* **`rtmp_port?`** `number` — RTMP ingest port, when the relay accepts RTMP.
* **`srt_port?`** `number` — SRT ingest port, when the relay accepts SRT.
* **`status`** `"healthy" | "degraded" | "unhealthy"` — The relay's current health.
* **`latency_ms?`** `number` — Measured latency to the relay, when known.
* **`cert_hash?`** `string` — Hash of the relay's TLS certificate, for pinning; absent when not pinned.

## Session

The caller's console session, returned by `client.auth.getSession()`.

* **`user`** `User` — The signed-in user.
* **`token`** `string` — Always empty: the session itself travels in a cookie, never in the body.
* **`expires_at`** `string` — When the session expires.
* **`org_id`** `string` — The active workspace's id; empty for a workspace-less platform admin.
* **`org_name`** `string` — The active workspace's name; empty for a workspace-less platform admin.
* **`role`** `string` — The caller's IAM role id in the active workspace. See [`IAM_ROLE_IDS`](/sdk/reference/types#iam_role_ids).
* **`totp_enabled?`** `boolean` — Whether the user has two-factor authentication (TOTP) enabled.
* **`platform_admin?`** `boolean` — True when the user holds a platform-scope `roles/platform.admin` binding. For a tenant-less platform admin (a pristine deployment's first operator) org\_id/org\_name are empty and this flag is what makes the session usable: the console routes to tenant creation instead of a workspace.
* **`onboarding_required?`** `boolean` — True while a tenant member has not completed creator onboarding (users.onboarded\_at IS NULL): the console offers the first-session wizard. Always false for platform admins and for users onboarded by accepting an invitation.

Types: [`User`](/sdk/reference/types#user)

## SKU

A billable product unit returned by GET /v1/skus.

* **`key`** `string` — Stable key, e.g. `relay`.
* **`name`** `string` — Display name.
* **`active`** `boolean` — true = metered and billed; false = coming soon, visible in catalog only.

## SKUBudget

Per-SKU spend/usage caps. A zero `monthly_limit_usd` or `usage_cap_gb`
means unlimited — unset SKUs return the zero default.

* **`project_id`** `string` — The project the budget belongs to.
* **`sku_key`** `string` — The SKU the budget applies to, e.g. `relay`.
* **`monthly_limit_usd`** `number` — Monthly cap in USD (not cents, unlike ProjectBudget.monthly\_limit).
* **`usage_cap_gb`** `number` — Usage cap for this SKU in GB; 0 means unlimited.
* **`updated_at`** `string` — When the budget was last changed.

## SKUBudgetUpdate

Fields that may be updated on a per-SKU budget; omit to leave unchanged.

* **`monthly_limit_usd?`** `number` — Monthly cap in USD; 0 means unlimited.
* **`usage_cap_gb?`** `number` — Usage cap in GB; 0 means unlimited.

## SystemStatus

<Warning>Deprecated. No endpoint returns this type; it will be removed.</Warning>

Overall system status.

* **`status`** `"operational" | "degraded" | "outage"` — Overall status.
* **`components`** `ComponentStatus[]` — Per-component status.

Types: [`ComponentStatus`](/sdk/reference/types#componentstatus)

## Tenant

A workspace: the top-level boundary for billing, access and projects.

* **`id`** `string` — The workspace's id.
* **`name`** `string` — Display name.
* **`billing_email?`** `string | null` — Where Stripe sends billing email; null or absent when unset.
* **`created_at`** `string` — When the workspace was created.
* **`admin_count?`** `number` — User principals bound as tenant admin; present only on list responses. 0 = orphaned (no console path back in).
* **`plan_name?`** `string` — The tenant's plan; present only on list responses. No assignment reads as Free.
* **`plan_effective_at?`** `string` — When the plan was assigned (for Enterprise, when the customer was onboarded); list responses only.

## TenantMembership

One org membership entry returned by GET /v1/auth/memberships.

* **`tenant_id`** `string` — The workspace's id.
* **`tenant_name`** `string` — The workspace's name.
* **`role_id`** `string` — The caller's IAM role id in that workspace. See [`IAM_ROLE_IDS`](/sdk/reference/types#iam_role_ids).

## TenantUsage

A workspace's usage of one metric over time, across all its projects.

* **`tenant_id`** `string` — The workspace the usage belongs to.
* **`metric`** `string` — The metric queried, e.g. `gateway.egress_bytes`.
* **`granularity`** `"hour" | "day"` — Bucket size of `periods`.
* **`periods`** `UsagePeriod[]` — The buckets, oldest first.

Types: [`UsagePeriod`](/sdk/reference/types#usageperiod)

## TokenResponse

Token issued at the end of the device flow.

* **`access_token`** `string` — The access token.
* **`token_type`** `string` — Token type, e.g. `Bearer`.
* **`expires_in`** `number` — Seconds until the token expires.

## TOTPSetup

Provisional TOTP secret; confirm with enable(code) before it activates.

* **`secret`** `string` — The shared secret, for manual entry into an authenticator app.
* **`uri`** `string` — otpauth:// URI ready for QR rendering.
* **`backup_codes`** `string[]` — One-time recovery codes; shown only at setup.

## UsagePeriod

One time bucket of a usage series.

* **`period`** `string` — Start of the bucket.
* **`value`** `number` — The metric's total within the bucket.

## User

A signed-in person, as returned inside a [`Session`](/sdk/reference/types#session).

* **`id`** `string` — The user's id.
* **`email`** `string` — The email the user signed in with.
* **`name`** `string` — Display name.
* **`avatar_url?`** `string` — Profile image URL from the identity provider, when it supplied one.
* **`github_login?`** `string` — GitHub username, when a GitHub account is linked.

## UserSession

One entry in the caller's active-session list.

* **`id`** `string` — A non-secret handle for the session (a hash of its token), used to revoke it. The session token itself is never returned.
* **`ip_address?`** `string | null` — IP address the session was created from, when recorded.
* **`user_agent?`** `string | null` — Browser user agent the session was created with, when recorded.
* **`created_at`** `string` — When the session was created.
* **`expires_at`** `string` — When the session expires.
* **`current`** `boolean` — True for the session that issued the request.
