Alternate Futures
API (GraphQL)

Object types

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.

User & authentication

User

FieldTypeDescription
idID!
emailString
usernameString
walletAddressString
projects[Project!]! · Project
createdAtDate!
updatedAtDate!

PersonalAccessToken

PersonalAccessToken type for listing tokens (token value excluded for security)

FieldTypeDescription
idID!
nameString!
maskedTokenString
expiresAtDate
lastUsedAtDate
createdAtDate!
updatedAtDate!

PersonalAccessTokenList

Wrapper type for tokens list (SDK compatibility)

FieldTypeDescription
data[PersonalAccessToken!]! · PersonalAccessToken

PersonalAccessTokenCreated

PersonalAccessTokenCreated type returned when creating a new token Includes the token value which is only shown once during creation

FieldTypeDescription
idID!
nameString!
tokenString!
expiresAtDate
lastUsedAtDate
createdAtDate!
updatedAtDate!

ApiKeyRateLimit

FieldTypeDescription
remainingInt!
limitInt!
resetAtDate!
activeTokensInt!
maxActiveTokensInt!

Projects

Project

FieldTypeDescription
idID!
nameString!
slugString!
organizationIdIDOwning organization; null for a personal project.
avatarString
backupStorageOnArweaveBoolean
backupStorageOnFilecoinBoolean
userUser! · User
createdAtDate!
updatedAtDate!
Some fields omitted

ProjectList

Wrapper type for paginated project list (SDK compatibility)

FieldTypeDescription
data[Project!]! · Project

ProjectChatSession

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.

FieldTypeDescription
roomString!Relay room id: use verbatim; never derive it client-side.
relayWsUrlString!Public relay WebSocket endpoint, e.g. wss://chat.alternatefutures.ai/ws
ticketString!Single-use join ticket. Every (re)connect needs a fresh one.
ticketExpiresAtString!ISO-8601 expiry of the ticket (~30s out).
secretString!Per-project room secret; the client derives the AES key from it.

PublicChatTicket

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.

FieldTypeDescription
ticketString!Single-use join ticket. Every (re)connect needs a fresh one.
ticketExpiresAtString!ISO-8601 expiry of the ticket (~30s out).

Service registry (canonical workloads)

Service

FieldTypeDescription
idID!
typeServiceType! · ServiceType
nameString!
slugString!
projectIdID!
flavorStringCreate-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.
templateIdID
dockerImageString
containerPortInt
volumesJSONPersistent volumes for raw Docker images. Templates use template.persistentStorage instead. Shape: Array<{ name: string; mountPath: string; size: string }>.
healthProbeJSONOptional 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.
applicationHealthApplicationHealth · ApplicationHealthLive application-level health derived from the configured healthProbe. Null until the runner has fired at least one probe.
failoverPolicyJSONOptional 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.
failoverHistoryFailoverHistory · FailoverHistoryLive failover history derived from this service's deployment chain. Null when no failover has ever fired for this service.
internalHostnameString
createdByUserIdID
parentServiceIdID
sdlServiceNameString
shutdownPriorityInt!
createdAtDate!
updatedAtDate!
metricsServiceDeploymentMetrics! · ServiceDeploymentMetrics
envVars[ServiceEnvVar!]! · ServiceEnvVar
ports[ServicePort!]! · ServicePort
linksFrom[ServiceLink!]! · ServiceLink
linksTo[ServiceLink!]! · ServiceLink
latestBuildBuildJob · BuildJobLatest build attempt for git-source services. Null for non-git services.
buildJobs[BuildJob!]! · BuildJobRecent build attempts (newest first), capped per request.Arguments: limit: Int.
gitProviderStringSet when this Service is connected to a git repo. One of 'github' | 'gitlab' | 'bitbucket'.
gitInstallationIdIDLocal id of the GithubInstallation row (or future provider install row).
gitOwnerString
gitRepoString
gitBranchString
rootDirectoryString
buildCommandString
startCommandString
detectedFrameworkString
detectedPortInt
lastBuildShaStringMost recent built commit SHA. Null until the first build succeeds.
lastBuildStatusStringOne of 'PENDING' | 'RUNNING' | 'SUCCEEDED' | 'FAILED' | 'CANCELED' or null.
lastBuildAtDate
Some fields omitted

Service deployment metrics

ServiceDeploymentMetrics

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.

FieldTypeDescription
totalDeploysInt!Real user-intended deploys (excludes retry/failover/resume continuations).
totalAttemptsInt!Every recorded deploy attempt, including retries/failovers/resumes.
succeededCountInt!Attempts that reached ACTIVE.
failedCountInt!Attempts that reached a terminal failure.
activeCountInt!Deployments live right now across all providers.
lastDeployedAtStringISO-8601 timestamp of the most recent deploy attempt, or null.
lastDeployTriggerStringTrigger of the most recent deploy attempt (MANUAL, RETRY, FAILOVER, …).
Some fields omitted

Service environment variables

ServiceEnvVar

FieldTypeDescription
idID!
serviceIdID!
keyString!
valueString!
secretBoolean!
sourceString
createdAtDate!
updatedAtDate!

Service port configuration

ServicePort

FieldTypeDescription
idID!
serviceIdID!
containerPortInt!
publicPortInt
protocolString!
createdAtDate!
updatedAtDate!

Application health

ProbeResult

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.

FieldTypeDescription
timestampDate!
okBoolean!
statusCodeInt
latencyMsInt!
errorString

ApplicationHealth

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.

FieldTypeDescription
overallString!
lastCheckedDate
lastStatusInt
lastErrorString
recentResults[ProbeResult!]! · ProbeResult

Failover history

FailoverAttempt

One entry in the failover chain for a service. Newest first.

FieldTypeDescription
deploymentIdID!
parentDeploymentIdID
providerString
excludedProviders[String!]!
statusString!
reasonString
createdAtDate!
deployedAtDate
closedAtDate

FailoverHistory

Aggregated failover history. attemptsInWindow counts failover-spawned deployments within the configured window (used for cap enforcement).

FieldTypeDescription
attemptsInWindowInt!
maxAttemptsInt!
windowHoursInt!
chain[FailoverAttempt!]! · FailoverAttempt
FieldTypeDescription
idID!
sourceServiceIdID!
targetServiceIdID!
sourceServiceService! · Service
targetServiceService! · Service
aliasString
createdAtDate!
updatedAtDate!

Deployment health (live container status)

ContainerHealth

FieldTypeDescription
nameString!
statusString!
readyBoolean!
totalInt!
availableInt!
uris[String!]!
messageString

DeploymentHealth

FieldTypeDescription
providerString!
overallString!
containers[ContainerHealth!]! · ContainerHealth
lastCheckedDate!

Workspace metrics

WorkspaceMetrics

FieldTypeDescription
computeComputeMetrics! · ComputeMetrics
deploymentsDeploymentMetrics! · DeploymentMetrics
spendSpendMetrics! · SpendMetrics

ComputeMetrics

FieldTypeDescription
activeDeploysInt!
totalCpuMillicoresInt!
totalMemoryMbInt!
formattedString!

DeploymentMetrics

FieldTypeDescription
activeInt!
totalInt!
formattedString!

SpendMetrics

FieldTypeDescription
currentMonthCentsInt!
formattedString!

Unified deployments (cross-service view)

UnifiedDeployment

FieldTypeDescription
idID!
shortIdString!
statusString!
kindString!
serviceNameString!
serviceIdID
serviceSlugString
serviceTypeString!
projectIdString
projectNameString
sourceString!
imageString
statusMessageString
createdAtDate!
updatedAtDate
authorUnifiedDeploymentAuthor · UnifiedDeploymentAuthor

UnifiedDeploymentAuthor

FieldTypeDescription
idID!
nameString!
avatarUrlString

Version & events

Version

FieldTypeDescription
commitHashString!

ServiceLogResult

FieldTypeDescription
logsString!
providerString!
deploymentIdString!
timestampDate!

Attestation registry (org-owned allowlist + verified identities)

AttestationMeasurement

One blessed build measurement in an organization's allowlist.

FieldTypeDescription
idID!
organizationIdString!
measurementString!Hex sha256 of the blessed build's app-compose.json (compose_hash).
labelString!
statusAttestationRegistryStatus! · AttestationRegistryStatus
createdAtDate!
revokedAtDate

AttestedIdentity

A server identity whose quote verified against Intel roots and whose measurement was ACTIVE in the org's allowlist at registration time.

FieldTypeDescription
idID!
organizationIdString!
pubkeyString!Hex Ed25519 public key, bound by the quote's report_data.
measurementIdID!Flat ID ref: resolve details via attestationMeasurements.
measurementString!The measurement value (compose_hash) this identity attested to.
appIdString
serviceIdString
statusAttestationRegistryStatus! · AttestationRegistryStatus
firstSeenAtDate!
lastVerifiedAtDate!

Deployment file access (files tab)

ServiceFileEntry

FieldTypeDescription
nameString!
pathString!
typeServiceFileType! · ServiceFileType
sizeInt!
mtimeDate
targetStringSymlink target, when type is SYMLINK.

ServiceFileList

FieldTypeDescription
pathString!
entries[ServiceFileEntry!]! · ServiceFileEntry
providerString!
deploymentIdString!

ServiceFileContent

FieldTypeDescription
pathString!
contentString!
sizeInt!Total size in bytes: may exceed content length when truncated.
truncatedBoolean!True when the file exceeded the 1 MB read cap. View-only.
providerString!
deploymentIdString!

ServiceFileWriteResult

FieldTypeDescription
pathString!
bytesWrittenInt!

ServiceFileAccessPolicy

FieldTypeDescription
serviceNameString!
serviceSlugString!
projectIdID!
projectNameString!
orgIdID
modeServiceFileAccessMode! · ServiceFileAccessMode
rootPathString!Directory the file browser opens at.
writablePaths[String!]!CONFIG_ONLY: absolute path prefixes that accept mutations.
noteKeyStringi18n key suffix (Services.ServiceFilesPanel.notes.*) or null.
availableBoolean!Transport-level availability: active deployment + provider support.
unavailableReasonStringWhen available=false: NO_ACTIVE_DEPLOYMENT | FILE_ACCESS_UNAVAILABLE.
providerString
shellAccessServiceShellAccessMode! · ServiceShellAccessModeUnmediated 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.

Feedback & bug reports

FeedbackReport

FieldTypeDescription
idID!
titleString!
categoryFeedbackCategory! · FeedbackCategory
locationString
descriptionString!
createdAtDate!

Subscription health monitoring

SubscriptionHealth

FieldTypeDescription
statusHealthStatus! · HealthStatus
metricsSubscriptionMetrics! · SubscriptionMetrics
alerts[String!]!

SubscriptionMetrics

FieldTypeDescription
activeSubscriptionsInt!
totalSubscriptionsCreatedInt!
totalSubscriptionsClosedInt!
totalEventsEmittedInt!
lastEventTimestampDate
errors[SubscriptionError!]! · SubscriptionError

SubscriptionError

FieldTypeDescription
timestampDate!
errorString!
deploymentIdString

Agent chat system

Agent

FieldTypeDescription
idID!
nameString!
slugString!
descriptionString
avatarString
systemPromptString
modelString!
statusAgentStatus! · AgentStatus
userIdID!
userUser! · User
chats[Chat!]! · Chat
createdAtDate!
updatedAtDate!
Some fields omitted

Chat

FieldTypeDescription
idID!
titleString
userIdID!
userUser! · User
agentIdID!
agentAgent! · Agent
messages[Message!]! · Message
lastMessageAtDate
metadataJSON
createdAtDate!
updatedAtDate!

Message

FieldTypeDescription
idID!
contentString!
roleMessageRole! · MessageRole
chatIdID!
chatChat! · Chat
userIdID
userUser · User
agentIdID
agentAgent · Agent
attachments[Attachment!]! · Attachment
metadataJSON
createdAtDate!
updatedAtDate!

Attachment

FieldTypeDescription
idID!
filenameString!
contentTypeString!
sizeInt!
urlString!
cidString
createdAtDate!
updatedAtDate!
Some fields omitted

Observability / APM

Span

FieldTypeDescription
timestampDate!
traceIdString!
spanIdString!
parentSpanIdString
traceStateString
spanNameString!
spanKindString!
serviceNameString!
resourceAttributesJSON
scopeNameString
scopeVersionString
spanAttributesJSON
durationNsString!
durationMsFloat!
statusCodeString!
statusMessageString
events[SpanEvent!]! · SpanEvent
links[SpanLink!]! · SpanLink

SpanEvent

FieldTypeDescription
timestampDate!
nameString!
attributesJSON
FieldTypeDescription
traceIdString!
spanIdString!
traceStateString
attributesJSON

Trace

FieldTypeDescription
traceIdString!
rootSpanSpan · Span
spans[Span!]! · Span
serviceNameString!
startTimeDate!
endTimeDate!
durationMsFloat!
spanCountInt!
hasErrorBoolean!

MetricDataPoint

FieldTypeDescription
timestampDate!
metricNameString!
metricDescriptionString
metricUnitString
metricTypeString!
valueFloat
histogramCountInt
histogramSumFloat
histogramBuckets[Float!]
histogramBucketCounts[Int!]
attributesJSON
resourceAttributesJSON

MetricSeries

FieldTypeDescription
metricNameString!
metricUnitString
metricTypeString!
dataPoints[MetricDataPoint!]! · MetricDataPoint

LogEntry

FieldTypeDescription
timestampDate!
traceIdString
spanIdString
severityTextString!
severityNumberInt!
bodyString!
resourceAttributesJSON
logAttributesJSON

ServiceStats

FieldTypeDescription
serviceNameString!
spanCountInt!
traceCountInt!
errorCountInt!
errorRateFloat!
avgDurationMsFloat!
p50DurationMsFloat!
p95DurationMsFloat!
p99DurationMsFloat!

ObservabilitySettings

FieldTypeDescription
idID!
projectIdString!
tracesEnabledBoolean!
metricsEnabledBoolean!
logsEnabledBoolean!
traceRetentionInt!
metricRetentionInt!
logRetentionInt!
sampleRateFloat!
maxBytesPerHourString
createdAtDate!
updatedAtDate!

TelemetryUsageSummary

FieldTypeDescription
projectIdString!
bytesIngestedString!
bytesFormattedString!
spansCountInt!
metricsCountInt!
logsCountInt!
costCentsInt!
costFormattedString!
periodStartDate!
periodEndDate!

Templates

TemplateEnvVar

FieldTypeDescription
keyString!
defaultString
descriptionString!
requiredBoolean!
secretBoolean
platformInjectedString

TemplateGpu

FieldTypeDescription
unitsInt!
vendorString!
modelString

TemplateResources

FieldTypeDescription
cpuFloat!
memoryString!
storageString!
gpuTemplateGpu · TemplateGpu

TemplatePort

FieldTypeDescription
portInt!
asInt!
globalBoolean!

TemplateHealthCheck

FieldTypeDescription
pathString!
portInt!

TemplatePersistentStorage

FieldTypeDescription
nameString!
sizeString!
mountPathString!

TemplateComponent

FieldTypeDescription
idString!
nameString!
descriptionString
primaryBoolean
templateIdString
internalOnlyBoolean
sdlServiceNameString
requiredBooleanWhether this component must be deployed (default true). Primary and internalOnly are always required.
fallbacksJSONJSON-encoded fallback values when this component is disabled.
defaultResourcesTemplateResources · TemplateResourcesResolved default resources for this component (from parent or referenced template).

Template

FieldTypeDescription
idID!
nameString!
descriptionString!
featuredBoolean
releaseStageTemplateReleaseStage! · TemplateReleaseStage
categoryTemplateCategory! · TemplateCategory
tags[String!]!
iconString
repoUrlString!
dockerImageString!
requiresTeeBoolean!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.
serviceTypeString!
envVars[TemplateEnvVar!]! · TemplateEnvVar
resourcesTemplateResources! · TemplateResources
ports[TemplatePort!]! · TemplatePort
healthCheckTemplateHealthCheck · TemplateHealthCheck
persistentStorage[TemplatePersistentStorage!] · TemplatePersistentStorage
pricingUaktInt
components[TemplateComponent!] · TemplateComponent

CompositeDeploymentResult

FieldTypeDescription
primaryServiceIdID!
partialSuccessBoolean
failedComponents[FailedComponentResult!] · FailedComponentResult
succeededComponents[String!]

FailedComponentResult

FieldTypeDescription
componentIdString!
componentNameString!
errorString!

Queries

OrgBillingRunway

FieldTypeDescription
balanceCentsInt!
totalDailyBurnCentsInt!
runwayHoursFloat
runwayFormattedString!

Github deploy (phase: github deploy, 2026-04-20)

GithubInstallation

FieldTypeDescription
idID!
organizationIdIDLegacy/original AF owner. Access control also uses github_installation_access.
installationIdString!GitHub-side numeric installation id (returned as String to avoid Int32 overflow).
accountLoginString!
accountIdString!
accountTypeString!
targetTypeString!
suspendedAtDate
createdAtDate!
updatedAtDate!

GithubRepoSummary

FieldTypeDescription
idID!
nameString!
fullNameString!
ownerString!
privateBoolean!
defaultBranchString!
descriptionString
pushedAtString
languageString
htmlUrlString!

GithubBranchSummary

FieldTypeDescription
nameString!
shaString!
protectedBoolean!

GithubInstallationClaim

FieldTypeDescription
authorizeUrlString!
stateString!
expiresAtDate!

GithubInstallationSyncResult

FieldTypeDescription
installationGithubInstallation! · GithubInstallation
organizationIdID!

BuildJob

FieldTypeDescription
idID!
serviceIdID!
commitShaString!
commitMessageString
branchString!
statusBuildStatus! · BuildStatus
k8sJobNameString
imageTagString
detectedFrameworkString
detectedPortInt
logsString
triggeredByString
startedAtDate
finishedAtDate
errorMessageString
createdAtDate!
updatedAtDate!

Regions

RegionMedianPrices

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.

FieldTypeDescription
cpu1CoreFloat
h100Float
h200Float
rtx4090Float
a100Float

Region

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.

FieldTypeDescription
idString!Stable id: us-east | us-west | eu | asia | the confidential compute (TEE) tier-single-region (sentinel).
labelString!Human label, e.g. "US East" or "the confidential compute (TEE) tier (single-region)".
availableBoolean!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).
verifiedCountInt!
onlineCountInt!
recentBidCountInt!Bid observations from this region in the last 24h.
medianPricesRegionMedianPrices! · RegionMedianPrices
confidenceRegionConfidence! · RegionConfidence

Scalars

ScalarDescription
Date
JSON

† Some fields, arguments or return types are omitted from this page: provider-specific ones, or ones that belong to retired or admin-only surfaces.

On this page

User & authenticationUserPersonalAccessTokenPersonalAccessTokenListPersonalAccessTokenCreatedApiKeyRateLimitProjectsProjectProjectListProjectChatSessionPublicChatTicketService registry (canonical workloads)ServiceService deployment metricsServiceDeploymentMetricsService environment variablesServiceEnvVarService port configurationServicePortApplication healthProbeResultApplicationHealthFailover historyFailoverAttemptFailoverHistoryService links (inter-service connections)ServiceLinkDeployment health (live container status)ContainerHealthDeploymentHealthWorkspace metricsWorkspaceMetricsComputeMetricsDeploymentMetricsSpendMetricsUnified deployments (cross-service view)UnifiedDeploymentUnifiedDeploymentAuthorVersion & eventsVersionServiceLogResultAttestation registry (org-owned allowlist + verified identities)AttestationMeasurementAttestedIdentityDeployment file access (files tab)ServiceFileEntryServiceFileListServiceFileContentServiceFileWriteResultServiceFileAccessPolicyFeedback & bug reportsFeedbackReportSubscription health monitoringSubscriptionHealthSubscriptionMetricsSubscriptionErrorAgent chat systemAgentChatMessageAttachmentObservability / APMSpanSpanEventSpanLinkTraceMetricDataPointMetricSeriesLogEntryServiceStatsObservabilitySettingsTelemetryUsageSummaryTemplatesTemplateEnvVarTemplateGpuTemplateResourcesTemplatePortTemplateHealthCheckTemplatePersistentStorageTemplateComponentTemplateCompositeDeploymentResultFailedComponentResultQueriesOrgBillingRunwayGithub deploy (phase: github deploy, 2026-04-20)GithubInstallationGithubRepoSummaryGithubBranchSummaryGithubInstallationClaimGithubInstallationSyncResultBuildJobRegionsRegionMedianPricesRegionScalars