Account and tenant
GraphQL schema reference · API guide · SDKs
The tenant, wallet and email identities.
Types used by more than one domain are on Shared types.
Queries
Section titled “Queries”Query.tenant
Section titled “Query.tenant”Get the current tenant’s profile and settings.
tenant: TenantReturns: Tenant (Tenant)
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| GetTenant | GetTenantDocument | GetTenant | get_tenant |
Mutations
Section titled “Mutations”Mutation.linkEmail
Section titled “Mutation.linkEmail”Link an email to a wallet-only account. This enables the upgrade path from prepaid to postpaid billing. A verification email will be sent to confirm the address.
linkEmail( input: LinkEmailInput!): LinkEmailResult!Returns: LinkEmailResult! (LinkEmailResult)
Arguments
input:LinkEmailInput!(LinkEmailInput) — Email and password to set on the account.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LinkEmail | LinkEmailDocument | LinkEmail | link_email |
Mutation.linkWallet
Section titled “Mutation.linkWallet”Link an additional wallet to the current user’s account. Requires an existing authenticated session.
linkWallet( input: WalletLoginInput!): LinkWalletResult!Returns: LinkWalletResult! (LinkWalletResult)
Arguments
input:WalletLoginInput!(WalletLoginInput) — The wallet input containing address, message, and signature.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| LinkWallet | LinkWalletDocument | LinkWallet | link_wallet |
Mutation.unlinkWallet
Section titled “Mutation.unlinkWallet”Unlink a wallet from the current user’s account. Cannot unlink the last wallet if user has no email.
unlinkWallet( walletId: ID!): UnlinkWalletResult!Returns: UnlinkWalletResult! (UnlinkWalletResult)
Arguments
walletId:ID!— The wallet identity ID to unlink.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| UnlinkWallet | UnlinkWalletDocument | UnlinkWallet | unlink_wallet |
Mutation.updateTenant
Section titled “Mutation.updateTenant”Update the current tenant’s profile.
updateTenant( input: UpdateTenantInput!): UpdateTenantResult!Returns: UpdateTenantResult! (UpdateTenantResult)
Arguments
input:UpdateTenantInput!(UpdateTenantInput) — Updated tenant configuration.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| UpdateTenant | UpdateTenantDocument | UpdateTenant | update_tenant |
Mutation.walletLogin
Section titled “Mutation.walletLogin”Authenticate using a signed message from an Ethereum wallet. Returns a JWT token for API access. Creates a new account if the wallet has not been seen before (auto-provisioning).
walletLogin( input: WalletLoginInput!): WalletLoginResult!Returns: WalletLoginResult! (WalletLoginResult)
Arguments
input:WalletLoginInput!(WalletLoginInput) — The wallet input containing address, message, and signature.
SDK
| Operation | TypeScript | Go | Python |
|---|---|---|---|
| WalletLogin | WalletLoginDocument | WalletLogin | wallet_login |
CustomDomainStatus
Section titled “CustomDomainStatus”object
Verification + certificate lifecycle for a tenant’s BYO domain. Returned by Navigator’s GetCustomDomainStatus and surfaced verbatim so the dashboard can guide the operator through the manual DNS setup.
- domain:
String!— The domain Navigator is tracking (mirrors Tenant.customDomain). - state:
String!— pending_verification | verified | pending_alias | cert_issuing | cert_issued | cert_failed | verification_failed | tearing_down — verbatim from Navigator. pending_alias means the CNAMEs are verified and the domain waits for the tenant alias certificate. verification_failed means the CNAMEs were not verified within the fixed verification period. - requiredTrafficCname:
String— CNAME the operator points their public hostname at so the platform’s TLS ingress receives traffic. - requiredAcmeChallengeCname:
String— CNAME the operator points_acme-challenge.<their-domain>at so Navigator can complete DNS-01 issuance via theacme-dns.<root>delegated subzone. - lastVerifiedAt:
Time(Time) — Wall-clock UTC of the last successful verification check (null when never). - certIssuedAt:
Time(Time) — Wall-clock UTC of the most recent successful cert issuance (null when never). - certExpiresAt:
Time(Time) — Wall-clock UTC of the current cert’s expiry (null when no cert). - lastError:
String— Most recent error from verification / issuance, null when clean.
LinkEmailInput
Section titled “LinkEmailInput”input_object
Input for linking email to a wallet-only account.
- email:
String!— Email address to link. - password:
String!— Password to set for email-based login.
LinkEmailPayload
Section titled “LinkEmailPayload”object
Successful email link response.
- success:
Boolean!— Whether the operation succeeded. - message:
String!— Human-readable status message. - verificationSent:
Boolean!— Whether a verification email was sent.
LinkEmailResult
Section titled “LinkEmailResult”union
- Member: LinkEmailPayload
- Member: ValidationError
- Member: AuthError
LinkWalletResult
Section titled “LinkWalletResult”union
- Member: WalletIdentity
- Member: ValidationError
- Member: AuthError
Tenant
Section titled “Tenant”object
- id:
ID! - name:
String! - subdomain:
String— Platform-managed tenant DNS label. When set and the tenant alias has issued TLS, playback uses foghorn.<subdomain>.cdn.<root> instead of the global Foghorn host. - cluster:
String - createdAt:
Time!(Time) - customDomain:
String— BYO domain configured for this tenant. Null when the tenant has not opted in. - customDomainStatus:
CustomDomainStatus(CustomDomainStatus) — Lifecycle state for the BYO domain, surfacing the CNAMEs the operator must publish for verification + traffic plus any current error/expiry timestamps. Null when no customDomain is configured. - monitoringEnabled:
Boolean!— Tenant-wide Skipper AI monitoring master switch. Default true.
UnlinkWalletResult
Section titled “UnlinkWalletResult”union
- Member: DeleteSuccess
- Member: NotFoundError
- Member: AuthError
UpdateTenantInput
Section titled “UpdateTenantInput”input_object
Input for updating tenant settings.
- name:
String— New tenant name. - settings:
JSON(JSON) — Custom settings JSON. Supports primaryClusterId, subdomain, customDomain, and deploymentModel. - customDomain:
String— BYO domain. Empty string clears it; null leaves it unchanged. Navigator picks up the change on the next reconciler tick and starts/teardowns the verification + cert lifecycle accordingly. - monitoringEnabled:
Boolean— Tenant-wide Skipper AI monitoring master switch. null leaves it unchanged.
UpdateTenantResult
Section titled “UpdateTenantResult”union
- Member: Tenant
- Member: ValidationError
- Member: AuthError
object
- id:
ID! - email:
String— User’s email address. Null for wallet-only accounts. - name:
String - role:
String! - createdAt:
Time!(Time) - wallets:
[WalletIdentity!]!(WalletIdentity) — Linked wallet addresses for this user.
WalletIdentity
Section titled “WalletIdentity”object
A linked cryptocurrency wallet for authentication. Users can link multiple wallets across different chains.
- id:
ID!— Unique identifier for this wallet link. - address:
String!— The wallet address (chain-specific format, e.g. 0x… for Ethereum). - createdAt:
Time!(Time) — When this wallet was linked. - lastAuthAt:
Time(Time) — When this wallet was last used for authentication.
WalletLoginInput
Section titled “WalletLoginInput”input_object
Input for wallet-based authentication. The signature proves ownership of the wallet address.
- address:
String!— Ethereum address (0x-prefixed, 40 hex characters). - message:
String!— Message that was signed, including timestamp and nonce for replay protection. - signature:
String!— EIP-191 personal_sign signature (0x-prefixed, 65 bytes hex).
WalletLoginPayload
Section titled “WalletLoginPayload”object
Successful wallet login response containing JWT and user info.
- token:
String!— JWT access token for API authentication. - user:
User!(User) — The authenticated user. - expiresAt:
Time!(Time) — When the token expires. - isNewAccount:
Boolean!— True if this was a new account created by the login.
WalletLoginResult
Section titled “WalletLoginResult”union
- Member: WalletLoginPayload
- Member: ValidationError