Public API - Namespace Documentation

Documentation Index

Fetch the complete documentation index at: /docs/llms.txt

Use this file to discover all available pages before exploring further.

Skip to main content

Assistant

Responses are generated using AI and may contain mistakes.

The Namespace API is defined in Protocol Buffers and published at buf.build/namespace/cloud. The schema registry documents every service, its procedures, and the request and response types for each one, including the fields they carry and their intended use.Use this page when you call the API without one of the maintained SDKs. The schema registry generates clients for over 15 languages, and any language that can make an HTTP request can call the API directly.

​ Generated clients for other languages

Install a client for your language from the SDKs page, which covers Python, Rust, and more. These clients are generated from the published schema rather than maintained by Namespace, so they expose every procedure and message type without the conveniences of the maintained SDKs.

Some of the available clients

For Elixir, the reference implementation maintained by Tuist demonstrates how to manage tenants, create instances, ensure readiness, and gain programmatic instance access over SSH.

​ Endpoints

Namespace serves the API over gRPC and the Connect protocol. Which host you dial depends on the service family.

Endpoint Serves
{region}.compute.namespaceapis.com Compute instances, commands run on them, their volumes, usage, and observability. {region} is a value such as us or eu.
{region}.storage.namespaceapis.com Artifact storage.
iam.namespaceapis.com Tenants, tokens, and tenant membership.
global.namespaceapis.com The container registry, vault secrets, images, GitHub integration, egress policy, and the Bazel, Gradle, and HTTP cache integrations.

The schema holds more service families than this table lists, so confirm the endpoint on the service’s own page in the schema registry before you call it.Regional resources exist in the region that created them, so a call must reach the endpoint for that region. From inside a Namespace instance, NSC_ENDPOINT points at the Compute endpoint for the region the instance runs in.

​ Authentication

Every call carries a Namespace token in an Authorization header:

Authorization: Bearer <token>

How you obtain the token depends on where your code runs.

​ Automated workloads

Configure federation so the workload exchanges its OpenID Connect identity for short-lived, scoped Namespace credentials, which avoids storing a long-lived shared secret in your CI system. Start with a trust relationship for the provider’s issuer and subject, then exchange the provider’s token:

nsc auth exchange-oidc-token \
  --token "$OIDC_TOKEN" \
  --tenant_id "$NAMESPACE_WORKSPACE_ID"

The command stores the credential where nsc and the maintained SDKs look for it, rather than printing it. To obtain a token for raw HTTP calls, run the same exchange as an API call: TokenService.IssueTenantTokenWithOIDC authenticates with the OIDC token in the request and returns a bearer_token.

See the guides for OpenID Connect, GitHub Actions, CircleCI, Google Cloud, AWS, and RWX.

​ Local development

After nsc login, print a token for your workspace:

export NSC_TOKEN=$(nsc auth generate-dev-token)

Development tokens are meant for experiments and direct calls from your own machine. Pass --output_to to write the token to a file instead. See nsc auth generate-dev-token.

​ Where federation is unavailable

Create a revokable token with an explicit scope and expiration, for CI systems without OIDC support or for automated scripts:

nsc token create

Keep the token out of source control, and revoke it when it is no longer needed.

​ Inside a Namespace workload

Workloads running on Namespace already receive a credential, so no exchange step is needed. The credential is a JSON file named by NSC_TOKEN_FILE, or /var/run/nsc/token.json when that variable is unset. Read the bearer_token field from it rather than passing the file contents:

export NSC_TOKEN=$(jq -r .bearer_token "${NSC_TOKEN_FILE:-/var/run/nsc/token.json}")

​ Make a call

Connect serves each unary procedure as an HTTP POST to /<proto package>.<Service>/<Method>, with the request message as the JSON body. Listing compute instances in the us region looks like this:

curl -X POST \
  -H "Authorization: Bearer $NSC_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"maxEntries": "10"}' \
  https://us.compute.namespaceapis.com/namespace.cloud.compute.v1beta.ComputeService/ListInstances

maxEntries is a 64-bit integer, which Protobuf JSON encodes as a string.The response is the Protobuf JSON encoding of the procedure’s response message, so this call returns a ListInstancesResponse with an instances array and a paginationCursor. Field names, defaults, and semantics are described in the ComputeService reference.

Streaming procedures, such as WaitInstance and StreamInstanceLogs, do not use this request shape. They rely on Connect’s streaming content type and envelope framing, so call them through a generated client unless you intend to implement the wire protocol yourself.

The same procedure is reachable over gRPC. For a worked gRPC example, see the HTTP Cache API, which calls a procedure on the global endpoint with grpcurl.

​ Errors

Failures carry a status code and a message. The codes are the standard gRPC and Connect set, and the schema registry documents which ones each procedure returns. The ones you are most likely to handle:

Code Meaning
Unauthenticated The token is missing, malformed, or expired.
PermissionDenied The credential is valid but not authorized for the resource.
NotFound The referenced resource, such as an instance ID, does not exist.
InvalidArgument The request is malformed, for example an unknown region.
FailedPrecondition The resource exists but is in the wrong state, such as an already terminated instance.
ResourceExhausted The workspace is out of capacity or has hit a limit.

​ IAM integration

To create and manage multiple workspaces programmatically, integrate with Namespace IAM on iam.namespaceapis.com. Namespace verifies tokens through trust relationships built on public-key cryptography and the OpenID Connect standard, rather than pre-shared keys, which are more easily compromised. See Federation for the setup on each provider.

​ Related documentation

SDKs \ \ Maintained clients for TypeScript and Go.

Federation \ \ Exchange an OIDC identity for Namespace credentials.

Examples \ \ Working examples in Go, TypeScript, and Python.

Last modified onSeptember 25, 2026

Ctrl+I

{"docsConfig":{"theme":"almond","$schema":"https://mintlify.com/docs.json","name":"Namespace Documentation","colors":{"primary":"#1C32FF","light":"#6B78FF","dark":"#1C32FF"},"logo":{"light":"https://mintcdn.com/namespace-labs/qOJQ7kaWRgoS8lyv/logo-light.svg?fit=max\\u0026auto=format\\u0026n=qOJQ7kaWRgoS8lyv\\u0026q=85\\u0026s=6827b0c81c335badc1cef13b83383e1d","dark":"https://mintcdn.com/namespace-labs/qOJQ7kaWRgoS8lyv/logo-dark.svg?fit=max\\u0026auto=format\\u0026n=qOJQ7kaWRgoS8lyv\\u0026q=85\\u0026s=63702d83d8fb259023deb79db06aabbb","href":"https://namespace.so"},"favicon":"https://mintcdn.com/namespace-labs/MoefQ379UcpNU680/favicon.svg?fit=max\\u0026auto=format\\u0026n=MoefQ379UcpNU680\\u0026q=85\\u0026s=6f14a088da55e5f41847845796737353","navbar":{"links":\[{"href":"https://namespace.so/changelog","label":"Changelog"},{"href":"https://namespace.so/support","label":"Support"}\],"primary":{"type":"button","label":"Log in","href":"https://cloud.namespace.so"}},"footer":{"socials":{"github":"https://github.com/namespacelabs","linkedin":"https://www.linkedin.com/company/namespacelabs","x":"https://x.com/namespacelabs"}},"icons":{"library":"lucide"},"contextual":{"options":\["copy","view","chatgpt","claude"\],"display":"header"},"interaction":{"drilldown":false},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"global":{"anchors":\[{"anchor":"Changelog","icon":"history","href":"https://namespace.so/changelog"},{"anchor":"Trust Center (SOC2)","icon":"shield-check","href":"https://trust.namespace.so/"},{"anchor":"Status","icon":"activity","href":"https://namespace-status.com/"},{"anchor":"Support","icon":"message-circle","href":"https://namespace.so/support"}\]},"pages":\[\]}},"deployment":{"deploymentMetadataValue":{"subdomain":"namespace-labs","hasAudioNarration":false,"actualSubdomain":"namespace-labs","customDomains":\["namespace.so"\],"gitSource":{"type":"github","owner":"namespacelabs","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ae0862207896b4595e1934b","collectionId":"847aecca-4a0b-40b4-a393-e976cc214b43","liveDeploymentHistoryId":"6ae0862207896b4595e1934b","schemaVersion":"v3"},"entitlements":{"AI\_CHAT":{"status":"ENABLED"},"WEB\_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae0a8f6edbd4c098a94623c","clientVersion":"0.0.3971","searchFilterCounts":\[{"language":"default","tag":"Products","count":377},{"language":"default","tag":"CLI","count":166},{"language":"default","tag":"Command line","count":165},{"language":"default","tag":"Namespace CLI","count":131},{"language":"default","tag":"Documentation","count":104},{"language":"default","tag":"GitHub Actions","count":40},{"language":"default","tag":"Devbox CLI","count":34},{"language":"default","tag":"Integrations","count":33},{"language":"default","tag":"SDK","count":25},{"language":"default","tag":"Namespace SDK","count":23}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":true},"customCss":[{"filePath":"snippets/diagrams/styles.css","content":".ns-diagram{--ns-diagram-background:#ffffff;--ns-diagram-grid:#e5e7ee;--ns-diagram-border:#e5e7ee;--ns-diagram-card:#ffffff;--ns-diagram-neutral-zone:#fafbfc;--ns-diagram-brand-zone-start:rgba(28, 50, 255, 0.04);--ns-diagram-brand-zone-end:rgba(28, 50, 255, 0.07);--ns-diagram-brand-border:#c8ceff;--ns-diagram-heading:#202938;--ns-diagram-muted:#8892a6;--ns-diagram-copy:#4a5468;position:relative;width:100%;margin:2rem 0;padding:clamp(20px,3.5vw,32px);overflow:hidden;color:var(--ns-diagram-heading);background:var(--ns-diagram-background);border:1px solid var(--ns-diagram-border);border-radius:20px;box-shadow:0 1px 0 rgba(32,41,56,.04),0 1px 2px rgba(32,41,56,.06)}.dark .ns-diagram{--ns-diagram-background:#111827;--ns-diagram-grid:#374151;--ns-diagram-border:#374151;--ns-diagram-card:#1f2937;--ns-diagram-neutral-zone:#171f2d;--ns-diagram-brand-zone-start:rgba(107, 120, 255, 0.1);--ns-diagram-brand-zone-end:rgba(107, 120, 255, 0.16);--ns-diagram-brand-border:#4f5fc7;--ns-diagram-heading:#f3f4f6;--ns-diagram-muted:#aeb6c5;--ns-diagram-copy:#cbd5e1}.ns-diagram-grid-background{position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(circle,var(--ns-diagram-grid) 1px,transparent 1px);background-size:16px 16px;opacity:.5;mask-image:linear-gradient(180deg,transparent 0,#000 10%,#000 90%,transparent 100%)}.ns-diagram-content{position:relative}.ns-diagram-caption{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.ns-diagram-mark{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;margin:0;border-radius:8px}.ns-diagram-mark-anthropic{color:#d97757;background:#fcefe8}.ns-diagram-mark-devin{color:#4338ca;background:#eef0ff}.ns-diagram-mark-cursor{color:#111827;background:#eef0f3}.ns-diagram-mark-control{color:#1c32ff;background:#e0e7ff}.ns-diagram-mark-terminal{color:#fff;background:#202938}.ns-diagram-mark-worker{color:#4338ca;background:#eef1ff}.ns-diagram-zone{position:relative;display:flex;flex-direction:column;padding:1.25rem;background:var(--ns-diagram-neutral-zone);border:1px dashed #d2d6e0;border-radius:14px}.dark .ns-diagram-zone{border-color:#4b5563}.ns-diagram-zone-brand{background:linear-gradient(180deg,var(--ns-diagram-brand-zone-start),var(--ns-diagram-brand-zone-end));border:1px solid var(--ns-diagram-brand-border)}.ns-diagram-zone-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem;color:var(--ns-diagram-copy);font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase}.ns-diagram-zone-center{display:flex;flex:1;align-items:center}.ns-diagram-zone-center>*{width:100%}.ns-diagram-card{position:relative;display:flex;align-items:center;gap:1rem;min-width:0;padding:1rem 1.25rem;background:var(--ns-diagram-card);border:1px solid var(--ns-diagram-border);border-radius:12px;box-shadow:0 1px 0 rgba(32,41,56,.04),0 1px 2px rgba(32,41,56,.06)}.ns-diagram-card-brand{border-color:var(--ns-diagram-brand-border)}.ns-diagram-card-copy{display:flex;min-width:0;flex-direction:column}.ns-diagram-card-label{color:var(--ns-diagram-heading);font-size:16px;font-weight:600;line-height:1.25;letter-spacing:-.01em}.ns-diagram-card-sublabel{margin-top:.125rem;color:var(--ns-diagram-muted);font-size:12px;line-height:1.35}.ns-managed-layout{display:grid;grid-template-columns:1fr auto 1.05fr;align-items:stretch}.ns-managed-connector{display:flex;width:64px;flex-direction:column;align-items:center;justify-content:center;padding:0 .25rem;color:var(--ns-diagram-muted);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:10.5px}.ns-managed-connector>span{margin-bottom:.375rem}.ns-managed-connector-path{display:flex;width:56px;align-items:center}.ns-managed-connector-line{flex:1;height:1.5px;background:#d2d6e0}.ns-managed-connector-arrow{border-top:6px solid transparent;border-bottom:6px solid transparent;border-left:9px solid #d2d6e0}.ns-mini-connector{display:flex;flex-direction:column;align-items:center;padding:.375rem 0}.ns-mini-connector>div{width:1.5px;height:12px;background:var(--ns-diagram-brand-border)}.ns-mini-connector>span{border-top:7px solid var(--ns-diagram-brand-border);border-right:5px solid transparent;border-left:5px solid transparent}.ns-devin-devboxes,.ns-devin-sessions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem}.ns-devin-mobile-layout{display:none}.ns-devin-connectors,.ns-devin-connectors>div{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.ns-devin-connectors{gap:1.5rem}.ns-devin-connectors>div{padding:0 1rem}.ns-devin-connector{position:relative;display:flex;min-height:110px;align-items:center;justify-content:center;color:var(--ns-diagram-copy);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:10px;line-height:1.25;text-align:center}.ns-devin-management-connector{min-height:70px;color:#6366f1}.ns-devin-connector-line{position:absolute;top:0;bottom:0;left:50%;width:1.5px;background:#d2d6e0;transform:translateX(-50%)}.ns-devin-management-connector .ns-devin-connector-line,.ns-diagram-connector-dashed .ns-diagram-vertical-line{width:0;background:0 0;border-left:1.5px dashed var(--ns-diagram-brand-border)}.ns-devin-connector>span,.ns-diagram-vertical-connector>span{position:relative;z-index:1;padding:0 .375rem;background:var(--ns-diagram-background)}.ns-control-plane-pill{display:flex;align-items:center;align-self:center;gap:.375rem;margin-bottom:1rem;padding:.375rem .75rem;color:#4338ca;background:#eef1ff;border:1px solid var(--ns-diagram-brand-border);border-radius:999px;font-size:12px;font-weight:500}.ns-diagram-vertical-connector{position:relative;display:flex;align-items:center;justify-content:center;color:var(--ns-diagram-copy);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:10px;line-height:1.25;text-align:center}.ns-diagram-vertical-line{position:absolute;top:0;bottom:0;left:50%;width:1.5px;background:#d2d6e0;transform:translateX(-50%)}.ns-diagram-connector-dashed{color:#6366f1}.ns-diagram-arrow-down{position:absolute;bottom:0;left:50%;border-top:8px solid #d2d6e0;border-right:5px solid transparent;border-left:5px solid transparent;transform:translateX(-50%)}.ns-devin-management-connector .ns-diagram-arrow-down,.ns-diagram-connector-dashed .ns-diagram-arrow-down{border-top-color:var(--ns-diagram-brand-border)}.ns-bazel-connector-inset{padding:0 1rem}.ns-bazel-workers{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}@media (max-width:767px){.ns-managed-layout{grid-template-columns:1fr}.ns-managed-connector{position:relative;width:auto;min-height:64px;padding:.5rem 0}.ns-managed-connector-path{width:auto;flex-direction:column}.ns-managed-connector-line{width:1.5px;height:24px;flex:none}.ns-managed-connector-arrow{border-top:9px solid #d2d6e0;border-right:6px solid transparent;border-bottom:0;border-left:6px solid transparent}.ns-devin-connectors,.ns-devin-devboxes,.ns-devin-sessions{grid-template-columns:1fr}.ns-devin-desktop-layout{display:none}.ns-devin-mobile-layout{display:block}.ns-devin-mobile-lane+.ns-devin-mobile-lane{margin-top:1.5rem;padding-top:1.5rem;border-top:1px solid var(--ns-diagram-border)}.ns-devin-mobile-connectors{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));padding:0 .5rem}.ns-devin-connector{min-height:80px}.ns-bazel-workers{grid-template-columns:1fr}}"},{"filePath":"style.css","content":":root{--namespace-radius-inline:0.25rem;--namespace-radius-control:0.375rem;--namespace-radius-container:0.5rem}#content-container,.almond-layout>div,.card,.chat-assistant-floating-input>div,.code-block,.frame,.pagination-next,.pagination-prev{border-radius:var(--namespace-radius-container)}.code-block [data-component-part=code-block-root],.frame>div{border-radius:inherit}#assistant-entry,#chat-assistant-textarea,#search-bar-entry,#search-input,.callout,.frame>.relative{border-radius:var(--namespace-radius-control)}.code-block-fade-overlay{border-radius:0 var(--namespace-radius-container) var(--namespace-radius-container) 0}#page-context-menu>button:first-child{border-radius:var(--namespace-radius-control) 0 0 var(--namespace-radius-control)}#page-context-menu>button:last-child{border-radius:0 var(--namespace-radius-control) var(--namespace-radius-control) 0}#content :not(pre)>code,#navigation-items li>a,#navigation-items li>button{border-radius:var(--namespace-radius-inline)}#navigation-items .nav-anchor>:is(svg, img),#navigation-items .sidebar-group-icon,#navigation-items [data-component-part=scroll-area-content]:has(>ul.nav-anchors),#navigation-items li>:is(a, button)>div[class=\"h-[1lh]\"]:first-child{display:flex;flex-direction:column}#navigation-items [data-component-part=scroll-area-content]>ul.nav-anchors{order:1;margin-top:1rem;padding-top:1rem;border-top:1px solid color-mix(in srgb,currentColor 10%,transparent)}#navigation-items [data-component-part=scroll-area-content]>ul.sidebar-group{margin-top:.5rem}#navigation-items [data-component-part=scroll-area-content]>ul.sidebar-group+div{margin-top:1rem}.tab-container{overflow:hidden;padding:0 1rem 1rem;border:1px solid color-mix(in srgb,currentColor 12%,transparent);border-radius:var(--namespace-radius-container)}.tab-container [data-component-part=tab-content]>[data-table-wrapper]:last-child{margin-bottom:0;padding-bottom:0}#content .katex-display>.katex{text-align:left}.compact-table table td{min-width:0}#navigation-items ul.sidebar-group>li.space-y-px+li.space-y-px{margin-top:.75rem}#navigation-items .my-2>.sidebar-group-header{margin-bottom:.625rem;font-size:.8125rem;line-height:1.625rem;font-weight:600;letter-spacing:-.02em;text-transform:none;opacity:1}#navigation-items ul.sidebar-group>li.space-y-px>button{font-size:.8125rem;font-weight:600;letter-spacing:-.02em;background-color:transparent}#navigation-items ul.sidebar-group>li.space-y-px>button:hover,#navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>button:hover{background-color:color-mix(in srgb,currentColor 6%,transparent)}#navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>button,#navigation-items ul.sidebar-group>li.space-y-px>ul>li>a{padding-left:3rem!important;font-size:.8125rem;font-weight:400;letter-spacing:-.02em}#navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>ul>li[data-active-nav-item=true]>a,#navigation-items ul.sidebar-group>li.space-y-px>ul>li[data-active-nav-item=true]>a{color:#121516!important;background-color:rgb(18 21 22/6%)!important}.dark #navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>ul>li[data-active-nav-item=true]>a,.dark #navigation-items ul.sidebar-group>li.space-y-px>ul>li[data-active-nav-item=true]>a{color:#f4f4f5!important;background-color:rgb(255 255 255/8%)!important}#navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>button{background-color:transparent}#navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>button>div[class=\"h-[1lh]\"]:first-child{margin-left:-1.75rem}.dark #navigation-items img[src*=buildkite-mark]{filter:brightness(.7)}.dark img[src*=\"/icons/apple.svg\"]{filter:invert(1)}.dark img.tab-icon[src*=\"/icons/linux.svg\"]{filter:invert(.35) brightness(1.54)}#navigation-items ul.sidebar-group>li.space-y-px>ul>li.space-y-px>ul>li>a{padding-left:4rem!important;font-size:.8125rem;font-weight:400;letter-spacing:-.02em}@media (min-width:1024px){#sidebar-content{width:calc(16.5rem + 10px)}#content-container{margin-left:calc(16.5rem + 10px)}#navbar{container-type:inline-size}#navbar .nav-tabs{position:fixed;top:0;left:20rem;height:3.5rem;column-gap:2rem}#navbar div:has(>div>.nav-tabs){justify-content:flex-end}@container (max-width: 69rem){#navbar .navbar-link:has(>a[href=\"https://namespace.so/changelog\\"\]){display:none}}}@media (min-width:1280px){#content-container{padding-right:1.5rem;padding-left:3rem}#content-container>div{column-gap:1.5rem;justify-content:flex-start}#content-area{width:calc(100% - 13.5rem);max-width:52rem;flex:none}#content-side-layout{width:15rem;max-width:15rem;flex-basis:15rem}#content-side-layout>div{width:15rem;padding-left:1rem}#content-side-layout>div>div{width:14rem}}@media (min-width:1700px){#content-container>div{justify-content:center}}"},{"filePath":"reference/github-actions/runner-configuration.css","content":""},{"filePath":"workspaces/access.css","content":""},{"filePath":"platform/workspaces/access.css","content":""},{"filePath":"reference/devbox-cli/desktop.css","content":""}],"page":{"pagePath":"reference/api","slug":"/reference/api","pageMetadata":{"title":"Public API","sidebarTitle":"Public API","description":"Call the Namespace API directly over gRPC or Connect, from any language.","icon":"webhook","href":"/reference/api"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Call the Namespace API directly over gRPC or Connect, from any language.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Card,CodeBlock,Columns,Frame,Heading,Info,OptimizedImage,Table}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Columns)_missingMdxReference(`Columns`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`The Namespace API is defined in Protocol Buffers and published at `,_jsx(_components.a,{href:`https://buf.build/namespace/cloud\`,children:\`buf.build/namespace/cloud\`}),\`. The schema registry documents every service, its procedures, and the request and response types for each one, including the fields they carry and their intended use.`]}),`\n`,_jsxs(_components.p,{children:[`Use this page when you call the API without one of the `,_jsx(_components.a,{href:`/reference/sdk`,children:`maintained SDKs`}),`. The schema registry generates clients for over 15 languages, and any language that can make an HTTP request can call the API directly.`]}),`\n`,_jsx(Heading,{level:`2`,id:`generated-clients-for-other-languages`,children:`Generated clients for other languages`}),`\n`,_jsxs(_components.p,{children:[`Install a client for your language from the `,_jsx(_components.a,{href:`https://buf.build/namespace/cloud/sdks\`,children:\`SDKs page`}),`, which covers Python, Rust, and more. These clients are generated from the published schema rather than maintained by Namespace, so they expose every procedure and message type without the conveniences of the `,_jsx(_components.a,{href:`/reference/sdk`,children:`maintained SDKs`}),`.`]}),`\n`,_jsx(Frame,{caption:`Some of the available clients`,className:`mint-m-0`,style:{maxWidth:800,marginInline:`auto`},children:_jsx(OptimizedImage,{src:`https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/buf-sdks.webp?fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=4d0b2297fdb9a6955dca43492c83d3a0\`,alt:\`Generated clients available for the Namespace API on the Buf schema registry`,width:1600,height:583,\"data-og-width\":`1600`,\"data-og-height\":`583`,\"data-path\":`images/buf-sdks.webp`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/buf-sdks.webp?w=280\\u0026fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=9215b8b3eeba91c557f369071cc0b7e7 280w, https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/buf-sdks.webp?w=560\\u0026fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=522619ac34e11175704bcbf1d4640735 560w, https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/buf-sdks.webp?w=840\\u0026fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=1e2154fa72378bc8600731b937d3d7a4 840w, https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/buf-sdks.webp?w=1100\\u0026fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=782ca89024e32602b5822f2bbc18e389 1100w, https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/buf-sdks.webp?w=1650\\u0026fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=89991ec11b7e4e7b24436e7b66deec83 1650w, https://mintcdn.com/namespace-labs/QVtD1jw4ML2vd3TZ/images/buf-sdks.webp?w=2500\\u0026fit=max\\u0026auto=format\\u0026n=QVtD1jw4ML2vd3TZ\\u0026q=85\\u0026s=3e09460f3dc40117cfea37cc73b71a93 2500w`})}),`\n`,_jsxs(_components.p,{children:[`For Elixir, the `,_jsx(_components.a,{href:`https://github.com/tuist/tuist/blob/401ab9e171311d8428ec4793f46ea4eb4dab64a7/server/lib/tuist/namespace.ex\`,children:\`reference implementation`}),` maintained by `,_jsx(_components.a,{href:`https://tuist.dev\`,children:\`Tuist\`}),\` demonstrates how to manage tenants, create instances, ensure readiness, and gain programmatic instance access over SSH.`]}),`\n`,_jsx(Heading,{level:`2`,id:`endpoints`,children:`Endpoints`}),`\n`,_jsxs(_components.p,{children:[`Namespace serves the API over gRPC and the `,_jsx(_components.a,{href:`https://connectrpc.com\`,children:\`Connect protocol`}),`. Which host you dial depends on the service family.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Endpoint`}),_jsx(_components.th,{children:`Serves`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{region}.compute.namespaceapis.com`})}),_jsxs(_components.td,{children:[`Compute instances, commands run on them, their volumes, usage, and observability. `,_jsx(_components.code,{children:`{region}`}),` is a value such as `,_jsx(_components.code,{children:`us`}),` or `,_jsx(_components.code,{children:`eu`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{region}.storage.namespaceapis.com`})}),_jsx(_components.td,{children:`Artifact storage.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`iam.namespaceapis.com`})}),_jsx(_components.td,{children:`Tenants, tokens, and tenant membership.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`global.namespaceapis.com`})}),_jsx(_components.td,{children:`The container registry, vault secrets, images, GitHub integration, egress policy, and the Bazel, Gradle, and HTTP cache integrations.`})]})]})]}),`\n`,_jsx(_components.p,{children:`The schema holds more service families than this table lists, so confirm the endpoint on the service’s own page in the schema registry before you call it.`}),`\n`,_jsxs(_components.p,{children:[`Regional resources exist in the region that created them, so a call must reach the endpoint for that region. From inside a Namespace instance, `,_jsx(_components.code,{children:`NSC_ENDPOINT`}),` points at the Compute endpoint for the region the instance runs in.`]}),`\n`,_jsx(Heading,{level:`2`,id:`authentication`,children:`Authentication`}),`\n`,_jsxs(_components.p,{children:[`Every call carries a Namespace token in an `,_jsx(_components.code,{children:`Authorization`}),` header:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Authorization: Bearer \u003ctoken>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`How you obtain the token depends on where your code runs.`}),`\n`,_jsx(Heading,{level:`3`,id:`automated-workloads`,children:`Automated workloads`}),`\n`,_jsxs(_components.p,{children:[`Configure `,_jsx(_components.a,{href:`/federation`,children:`federation`}),` so the workload exchanges its OpenID Connect identity for short-lived, scoped Namespace credentials, which avoids storing a long-lived shared secret in your CI system. Start with a `,_jsx(_components.a,{href:`/reference/cli/auth-trust-relationships-add`,children:`trust relationship`}),` for the provider’s issuer and subject, then exchange the provider’s token:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`nsc`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` auth`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` exchange-oidc-token`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --token`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$OIDC_TOKEN`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --tenant_id`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$NAMESPACE_WORKSPACE_ID`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`})]}),`\n`]})})}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`The command stores the credential where `,_jsx(_components.code,{children:`nsc`}),` and the maintained SDKs look for it, rather than printing it. To obtain a token for raw HTTP calls, run the same exchange as an API call: `,_jsx(_components.a,{href:`https://buf.build/namespace/cloud/docs/main:namespace.cloud.iam.v1beta#namespace.cloud.iam.v1beta.TokenService\`,children:\_jsx(\_components.code,{children:\`TokenService.IssueTenantTokenWithOIDC\`})}),\` authenticates with the OIDC token in the request and returns a `,_jsx(_components.code,{children:`bearer_token`}),`.`]})}),`\n`,_jsxs(_components.p,{children:[`See the guides for `,_jsx(_components.a,{href:`/federation/openid`,children:`OpenID Connect`}),`, `,_jsx(_components.a,{href:`/federation/github-actions`,children:`GitHub Actions`}),`, `,_jsx(_components.a,{href:`/federation/circleci`,children:`CircleCI`}),`, `,_jsx(_components.a,{href:`/federation/gcp`,children:`Google Cloud`}),`, `,_jsx(_components.a,{href:`/federation/aws`,children:`AWS`}),`, and `,_jsx(_components.a,{href:`/federation/rwx`,children:`RWX`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`local-development`,children:`Local development`}),`\n`,_jsxs(_components.p,{children:[`After `,_jsx(_components.a,{href:`/reference/cli/login`,children:_jsx(_components.code,{children:`nsc login`})}),`, print a token for your workspace:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` NSC_TOKEN`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`nsc`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` auth`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` generate-dev-token`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Development tokens are meant for experiments and direct calls from your own machine. Pass `,_jsx(_components.code,{children:`--output_to`}),` to write the token to a file instead. See `,_jsx(_components.a,{href:`/reference/cli/auth-generate-dev-token`,children:_jsx(_components.code,{children:`nsc auth generate-dev-token`})}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`where-federation-is-unavailable`,children:`Where federation is unavailable`}),`\n`,_jsxs(_components.p,{children:[`Create a `,_jsx(_components.a,{href:`/reference/cli/token-create`,children:`revokable token`}),` with an explicit scope and expiration, for CI systems without OIDC support or for automated scripts:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`nsc`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` token`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` create`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Keep the token out of source control, and `,_jsx(_components.a,{href:`/reference/cli/token-revoke`,children:`revoke`}),` it when it is no longer needed.`]}),`\n`,_jsx(Heading,{level:`3`,id:`inside-a-namespace-workload`,children:`Inside a Namespace workload`}),`\n`,_jsxs(_components.p,{children:[`Workloads running on Namespace already receive a credential, so no exchange step is needed. The credential is a JSON file named by `,_jsx(_components.code,{children:`NSC_TOKEN_FILE`}),`, or `,_jsx(_components.code,{children:`/var/run/nsc/token.json`}),` when that variable is unset. Read the `,_jsx(_components.code,{children:`bearer_token`}),` field from it rather than passing the file contents:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` NSC_TOKEN`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`jq`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -r`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` .bearer_token`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:' \"${'}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`NSC_TOKEN_FILE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:-/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`var`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`run`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`nsc`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`/`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`token`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`json`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`}\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`make-a-call`,children:`Make a call`}),`\n`,_jsxs(_components.p,{children:[`Connect serves each unary procedure as an HTTP `,_jsx(_components.code,{children:`POST`}),` to `,_jsx(_components.code,{children:`/\u003cproto package>.\u003cService>/\u003cMethod>`}),`, with the request message as the JSON body. Listing compute instances in the `,_jsx(_components.code,{children:`us`}),` region looks like this:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$NSC_TOKEN`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{\"maxEntries\": \"10\"}'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://us.compute.namespaceapis.com/namespace.cloud.compute.v1beta.ComputeService/ListInstances\`})}),\`\\n\`\]})})}),\`\\n\`,\_jsxs(\_components.p,{children:\[\_jsx(\_components.code,{children:\`maxEntries\`}),\` is a 64-bit integer, which Protobuf JSON encodes as a string.`]}),`\n`,_jsxs(_components.p,{children:[`The response is the Protobuf JSON encoding of the procedure’s response message, so this call returns a `,_jsx(_components.code,{children:`ListInstancesResponse`}),` with an `,_jsx(_components.code,{children:`instances`}),` array and a `,_jsx(_components.code,{children:`paginationCursor`}),`. Field names, defaults, and semantics are described in the `,_jsx(_components.a,{href:`https://buf.build/namespace/cloud/docs/main:namespace.cloud.compute.v1beta\`,children:\_jsx(\_components.code,{children:\`ComputeService\`})}),\` reference.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`Streaming procedures, such as `,_jsx(_components.code,{children:`WaitInstance`}),` and `,_jsx(_components.code,{children:`StreamInstanceLogs`}),`, do not use this request shape. They rely on Connect’s streaming content type and envelope framing, so call them through a generated client unless you intend to implement the wire protocol yourself.`]})}),`\n`,_jsxs(_components.p,{children:[`The same procedure is reachable over gRPC. For a worked gRPC example, see the `,_jsx(_components.a,{href:`/integrations/any-framework#using-the-http-cache-api`,children:`HTTP Cache API`}),`, which calls a procedure on the global endpoint with `,_jsx(_components.code,{children:`grpcurl`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsx(_components.p,{children:`Failures carry a status code and a message. The codes are the standard gRPC and Connect set, and the schema registry documents which ones each procedure returns. The ones you are most likely to handle:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Code`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Unauthenticated`})}),_jsx(_components.td,{children:`The token is missing, malformed, or expired.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`PermissionDenied`})}),_jsx(_components.td,{children:`The credential is valid but not authorized for the resource.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`NotFound`})}),_jsx(_components.td,{children:`The referenced resource, such as an instance ID, does not exist.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`InvalidArgument`})}),_jsx(_components.td,{children:`The request is malformed, for example an unknown region.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`FailedPrecondition`})}),_jsx(_components.td,{children:`The resource exists but is in the wrong state, such as an already terminated instance.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ResourceExhausted`})}),_jsx(_components.td,{children:`The workspace is out of capacity or has hit a limit.`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`iam-integration`,children:`IAM integration`}),`\n`,_jsxs(_components.p,{children:[`To create and manage multiple workspaces programmatically, integrate with `,_jsx(_components.a,{href:`https://buf.build/namespace/cloud/docs/main:namespace.cloud.iam.v1beta\`,children:\`Namespace IAM`}),` on `,_jsx(_components.code,{children:`iam.namespaceapis.com`}),`. Namespace verifies tokens through trust relationships built on public-key cryptography and the OpenID Connect standard, rather than pre-shared keys, which are more easily compromised. See `,_jsx(_components.a,{href:`/federation`,children:`Federation`}),` for the setup on each provider.`]}),`\n`,_jsx(Heading,{level:`2`,id:`related-documentation`,children:`Related documentation`}),`\n`,_jsxs(Columns,{cols:3,children:[_jsx(Card,{title:`SDKs`,icon:`code-xml`,href:`/reference/sdk`,children:_jsx(_components.p,{children:`Maintained clients for TypeScript and Go.`})}),_jsx(Card,{title:`Federation`,icon:`shield-check`,href:`/federation`,children:_jsx(_components.p,{children:`Exchange an OIDC identity for Namespace credentials.`})}),_jsx(Card,{title:`Examples`,icon:`github`,href:`https://github.com/namespacelabs/examples\`,children:\_jsx(_components.p,{children:`Working examples in Go, TypeScript, and Python.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Public API","sidebarTitle":"Public API","description":"Call the Namespace API directly over gRPC or Connect, from any language.","icon":"webhook","href":"/reference/api"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Generated clients for other languages","slug":"generated-clients-for-other-languages","depth":2,"children":[]},{"title":"Endpoints","slug":"endpoints","depth":2,"children":[]},{"title":"Authentication","slug":"authentication","depth":2,"children":[{"title":"Automated workloads","slug":"automated-workloads","depth":3,"children":[]},{"title":"Local development","slug":"local-development","depth":3,"children":[]},{"title":"Where federation is unavailable","slug":"where-federation-is-unavailable","depth":3,"children":[]},{"title":"Inside a Namespace workload","slug":"inside-a-namespace-workload","depth":3,"children":[]}]},{"title":"Make a call","slug":"make-a-call","depth":2,"children":[]},{"title":"Errors","slug":"errors","depth":2,"children":[]},{"title":"IAM integration","slug":"iam-integration","depth":2,"children":[]},{"title":"Related documentation","slug":"related-documentation","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/namespace-labs/fa018fe02fd436c8/navigation.js","/docs/_mintlify/custom/namespace-labs/4276600b7cb636ff/legacy-anchor-redirects.js"],"dynamicCss":".mint-m-0 {\n margin: 0px\n}","subdomain":"namespace-labs","siteName":"Namespace Documentation","title":"Public API - Namespace Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-25T10:30:13.103Z","gitLastModified":"2026-09-25T10:29:59.000Z","originalFileLocation":"reference/api.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Call the Namespace API directly over gRPC or Connect, from any language.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Namespace Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6_kI/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6_kI/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6_kI/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6_kI/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6_kI/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6_kI/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6_kI/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6_kI/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6_kI/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Public API - Namespace Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Call the Namespace API directly over gRPC or Connect, from any language.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Namespace Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://namespace.so/docs/reference/api\\">\\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://namespace-labs.mintlify.app/\_mintlify/api/og/v2?division=Documentation\\u0026amp;title=Public+API\\u0026amp;description=Call+the+Namespace+API+directly+over+gRPC+or+Connect%2C+from+any+language.\\u0026amp;theme=1f89d53762a6d5304d1c63c4\\u0026amp;signature=eaffd351d115d7b0b7a6bdd99c99036905f44ae406336f785b548f096771f212\\">\\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Public API - Namespace Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Call the Namespace API directly over gRPC or Connect, from any language.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://namespace-labs.mintlify.app/\_mintlify/api/og/v2?division=Documentation\\u0026amp;title=Public+API\\u0026amp;description=Call+the+Namespace+API+directly+over+gRPC+or+Connect%2C+from+any+language.\\u0026amp;theme=1f89d53762a6d5304d1c63c4\\u0026amp;signature=eaffd351d115d7b0b7a6bdd99c99036905f44ae406336f785b548f096771f212\\">\\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/namespace-labs/kZKeJ4zhJEuE6_kI/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Namespace Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1C32FF\">\u003clink data-mint-head rel=\"canonical\" href=\"https://namespace.so/docs/reference/api\\">\\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/reference/api.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\\",\\"@graph\\":\[{\\"@type\\":\\"Organization\\",\\"@id\\":\\"https://namespace.so/#organization\\",\\"name\\":\\"Namespace Documentation\",\"url\":\"https://namespace.so\\",\\"logo\\":{\\"@type\\":\\"ImageObject\\",\\"url\\":\\"https://mintcdn.com/namespace-labs/qOJQ7kaWRgoS8lyv/logo-light.svg?fit=max\\u0026auto=format\\u0026n=qOJQ7kaWRgoS8lyv\\u0026q=85\\u0026s=6827b0c81c335badc1cef13b83383e1d\\"}},{\\"@type\\":\\"WebSite\\",\\"@id\\":\\"https://namespace.so/docs#website\\",\\"name\\":\\"Namespace Documentation\",\"url\":\"https://namespace.so/docs\\",\\"publisher\\":{\\"@id\\":\\"https://namespace.so/#organization\\"}},{\\"@type\\":\\"WebPage\\",\\"@id\\":\\"https://namespace.so/docs/reference/api#webpage\\",\\"url\\":\\"https://namespace.so/docs/reference/api\\",\\"name\\":\\"Public API\",\"description\":\"Call the Namespace API directly over gRPC or Connect, from any language.\",\"dateModified\":\"2026-09-25T10:29:59.000Z\",\"isPartOf\":{\"@id\":\"https://namespace.so/docs#website\\"}},{\\"@type\\":\[\\"Article\\",\\"TechArticle\\"\],\\"@id\\":\\"https://namespace.so/docs/reference/api#article\\",\\"headline\\":\\"Public API\",\"name\":\"Public API\",\"description\":\"Call the Namespace API directly over gRPC or Connect, from any language.\",\"url\":\"https://namespace.so/docs/reference/api\\",\\"mainEntityOfPage\\":{\\"@id\\":\\"https://namespace.so/docs/reference/api#webpage\\"},\\"dateModified\\":\\"2026-09-25T10:29:59.000Z\\",\\"publisher\\":{\\"@id\\":\\"https://namespace.so/#organization\\"},\\"isPartOf\\":{\\"@id\\":\\"https://namespace.so/docs#website\\"}}\]}\\u003c/script>\\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\\",\\"@type\\":\\"WebSite\\",\\"name\\":\\"Namespace Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\\"}}\\u003c/script>","siteName":"Namespace Documentation","nav":{"global":{"anchors":[{"anchor":"Changelog","icon":"history","href":"https://namespace.so/changelog"},{"anchor":"Trust Center (SOC2)","icon":"shield-check","href":"https://trust.namespace.so/"},{"anchor":"Status","icon":"activity","href":"https://namespace-status.com/"},{"anchor":"Support","icon":"message-circle","href":"https://namespace.so/support"}\]},"products":\[{"product":"Products","description":"Turnkey products built on the Namespace platform","tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":""}]},{"tab":"Integrations","icon":"blocks","pages":[{"title":"Integrations","href":"/integrations/turborepo"}]},{"tab":"CLI","icon":"square-terminal","pages":[{"title":"CLI","href":"/reference/cli"}]},{"tab":"SDK","icon":"braces","pages":[{"title":"Namespace SDKs and API","sidebarTitle":"Overview","icon":"code-xml","description":null,"href":"/reference/sdk"},{"title":"Public API","sidebarTitle":"Public API","icon":"webhook","href":"/reference/api"},{"group":"Namespace SDK","pages":[{"group":"TypeScript SDK","icon":"braces","pages":[{"title":"Get started","sidebarTitle":"Get started","description":"Install the Namespace TypeScript SDK and choose an API for Devboxes or compute instances.","href":"/reference/typescript-sdk/index"},{"group":"Devbox","pages":[{"title":"Get started","href":"/reference/typescript-sdk/devbox/index"},{"title":"Devbox Client","sidebarTitle":"Devbox Client","href":"/reference/typescript-sdk/devbox/devbox-client"},{"title":"Authenticate with Namespace","sidebarTitle":"Authentication","href":"/reference/typescript-sdk/devbox/authentication"},{"title":"Create and manage Devboxes","sidebarTitle":"Create and manage","href":"/reference/typescript-sdk/devbox/manage"},{"title":"Run commands","sidebarTitle":"Commands","href":"/reference/typescript-sdk/devbox/commands"},{"title":"Run services","sidebarTitle":"Services","href":"/reference/typescript-sdk/devbox/services"},{"title":"Expose ports","sidebarTitle":"Exposed ports","href":"/reference/typescript-sdk/devbox/exposed-ports"},{"title":"Use interactive terminals","sidebarTitle":"Interactive terminals","href":"/reference/typescript-sdk/devbox/terminals"},{"title":"Work with files","sidebarTitle":"Files","href":"/reference/typescript-sdk/devbox/files"},{"title":"Interact with the display","sidebarTitle":"Display","href":"/reference/typescript-sdk/devbox/display"},{"title":"Use blueprints","sidebarTitle":"Blueprints","href":"/reference/typescript-sdk/devbox/blueprints"},{"title":"Manage images","sidebarTitle":"Images","href":"/reference/typescript-sdk/devbox/images"},{"title":"Handle errors and timeouts","sidebarTitle":"Errors and timeouts","href":"/reference/typescript-sdk/devbox/errors"}]},{"group":"Compute","pages":[{"title":"Get started","sidebarTitle":"Get started","href":"/reference/typescript-sdk/compute/index"},{"title":"Compute Client","sidebarTitle":"Compute Client","href":"/reference/typescript-sdk/compute/compute-client"},{"title":"Authenticate with Namespace","sidebarTitle":"Authentication","href":"/reference/typescript-sdk/compute/authentication"},{"title":"Create and manage compute instances","sidebarTitle":"Create and manage","href":"/reference/typescript-sdk/compute/manage"},{"title":"Access and networking","sidebarTitle":"Access and networking","href":"/reference/typescript-sdk/compute/access"},{"title":"Run commands on an instance","sidebarTitle":"Command","href":"/reference/typescript-sdk/compute/command"},{"title":"Inspect and release volumes","sidebarTitle":"Storage","href":"/reference/typescript-sdk/compute/storage"},{"title":"Report on usage","sidebarTitle":"Usage","href":"/reference/typescript-sdk/compute/usage"},{"title":"Read logs and egress records","sidebarTitle":"Observability","href":"/reference/typescript-sdk/compute/observability"}]}]}]}]},{"tab":"MCP","icon":"plug","pages":[{"title":"MCP","href":"/reference/mcp"}]}]},{"product":"Platform","description":"Lower-level primitives to build your own","pages":[{"title":"Platform","href":"/platform"}]}]},"title":"Public API - Namespace Documentation","buildId":"dpl_GvhK4qVXq51DpfYJLCtPpYNN4YHN","deploymentId":"dpl_GvhK4qVXq51DpfYJLCtPpYNN4YHN","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-5VlDM5Io.js","DynamicMarkdown-DO1Fz7ar.js","zoom-image-lightbox-uyuQJRFs.js","lightbox-handle-r17bVUz3.js"]}