Generated from the API server source (@alternatefutures/backend 0.1.2) on every merge. Endpoint
https://api.alternatefutures.ai/graphql, header Authorization: Bearer <personal access token>.
See the GraphQL API overview for how to call it. Left out on purpose: provider-specific types, fields and arguments; operations of the retired hosting product (sites, IPFS storage, functions) and admin-only operations.
Everything a client needs to join a project's chat room.
TRUST MODEL: relay-blind, NOT end-to-end. The chat relay only ever sees
ciphertext, but the platform issues and stores the secret, so the platform
can read project chat. True end-to-end with membership changes is MLS
(E2EE hardening roadmap item 1) and is not built.
Field
Type
Description
room
String!
Relay room id: use verbatim; never derive it client-side.
relayWsUrl
String!
Public relay WebSocket endpoint, e.g. wss://chat.alternatefutures.ai/ws
ticket
String!
Single-use join ticket. Every (re)connect needs a fresh one.
ticketExpiresAt
String!
ISO-8601 expiry of the ticket (~30s out).
secret
String!
Per-project room secret; the client derives the AES key from it.
A single-use join ticket for the HOSTED public chat (chat.alternatefutures.ai).
TRUST MODEL: the ticket is NOT bound to a room. The platform learns WHO
opened hosted public chat and WHEN, never WHICH room or with whom: the
relay redeems it as roomClass: "public" with no room id. Passphrase rooms
stay end-to-end encrypted and opaque to the platform.
Field
Type
Description
ticket
String!
Single-use join ticket. Every (re)connect needs a fresh one.
Create-time discriminator describing the catalog flow that produced this service. One of 'docker' | 'server' | 'function' | 'template'. Null on legacy rows; the web app falls through to 'docker' for VM rows and 'function' for FUNCTION rows. Immutable after creation.
templateId
ID
dockerImage
String
containerPort
Int
volumes
JSON
Persistent volumes for raw Docker images. Templates use template.persistentStorage instead. Shape: Array<{ name: string; mountPath: string; size: string }>.
healthProbe
JSON
Optional application HTTP health probe. Shape: JSON object with path (required, must start with /), optional port, expectStatus (default 200), intervalSec (default 30, clamped 10-3600), and timeoutSec (default 5, clamped 1-30). Null when no probe is configured.
Live application-level health derived from the configured healthProbe. Null until the runner has fired at least one probe.
failoverPolicy
JSON
Optional health-aware auto-failover policy. Shape: JSON object with enabled (boolean), maxAttempts (default 3, clamped 1-10), and windowHours (default 24, clamped 1-720). When enabled, the sweeper redeploys to a different provider on provider-side failures rather than plain-closing the deployment. Refused for services with persistent volumes (data-loss risk) and for application-side failures.
Aggregate deploy metrics for a single service. Counts combine the live
deployment rows (current state: active + per-provider totals) with the
ServiceDeployEvent history (how many times, outcomes, last-deployed).
Extensible: new scalar fields can be added without reshaping clients.
Field
Type
Description
totalDeploys
Int!
Real user-intended deploys (excludes retry/failover/resume continuations).
totalAttempts
Int!
Every recorded deploy attempt, including retries/failovers/resumes.
succeededCount
Int!
Attempts that reached ACTIVE.
failedCount
Int!
Attempts that reached a terminal failure.
activeCount
Int!
Deployments live right now across all providers.
lastDeployedAt
String
ISO-8601 timestamp of the most recent deploy attempt, or null.
lastDeployTrigger
String
Trigger of the most recent deploy attempt (MANUAL, RETRY, FAILOVER, …).
Per-attempt result emitted by the application health runner.
Newest result is appended to ApplicationHealth.recentResults; the
buffer is capped at 20 entries per service.
Aggregated application health derived from the in-memory probe ring buffer.
The "overall" field summarises the last 3 results: "healthy" if all pass,
"unhealthy" if all fail, "starting" if mixed, "unknown" if no probes
have run yet.
Unmediated exec policy (terminal, acc ssh, acc cp). NONE = the template hard-locks the box; /ws/shell refuses even the owner. Independent of mode: READ_ONLY services may still be FULL here.
True when the template only runs on confidential compute (TEE): deploys to non-TEE providers are refused server-side (TEMPLATE_REQUIRES_TEE). The UI preselects the Confidential compute mode for these.
Median USD/hr price by GPU model within a region. Computed from the
last 24h of GpuBidObservation rows scoped to providers in this region.
Null = no recent bid for that model in this region (UI shows ": ").
cpu1Core is the median CPU bid (no-GPU probe SDLs) for a tdx.small-equivalent.
A curated region bucket as exposed to the picker UX.
The confidential compute (TEE) tier returns a single sentinel row with id=the confidential compute (TEE) tier-single-region: the
client detects this and renders the explicit single-region message
rather than the picker.
Field
Type
Description
id
String!
Stable id: us-east | us-west | eu | asia | the confidential compute (TEE) tier-single-region (sentinel).
label
String!
Human label, e.g. "US East" or "the confidential compute (TEE) tier (single-region)".
available
Boolean!
Region availability gate. Default mode (AF_REGIONS_REQUIRE_BIDS unset/0): true iff verifiedCount ≥ 1 (a verified provider exists in the bucket). Strict mode (AF_REGIONS_REQUIRE_BIDS=1): true iff verifiedCount ≥ 1 AND recentBidCount ≥ 1 (a recent bid was observed in the bucket).
verifiedCount
Int!
onlineCount
Int!
recentBidCount
Int!
Bid observations from this region in the last 24h.