Hyperscale docs Sign in Start building

Plan an HSX program or compiled .udl document against a build

composer.plan

Accepts HSX source text or a compiled .udl object. HSX compilation uses catalogRevisionId and the tenant overlay. The operation checks the compiled document, diffs it against the Product's current Build or an empty one, and returns every changed term with its cause, the open agreements that stay on the current Build, the deterministic complexity price and planDigest, which product.recompose takes as expectedPlanDigest. liveBlockedCapabilityIds names capabilities with no live provider admission, and unboundParties names businesses still to bind. The operation reads the build without changing it. Every successful read returns operationId and receiptId for its durable receipt. Callers: the founder's CLI login, or an agent token with blueprints:read, or a personal access token with blueprints:read.

POST /v1/composer/plan

Principal user_session. Idempotency not_required. Environment either.

Input

FieldInTypeDescription
X-Hyperscale-Environmentheadersandbox | live
tenantId requiredbodystringOrganization tenant ID
catalogRevisionIdbodystringImmutable tenant catalog revision used when document is HSX source
productIdbodystringPlan against this Product's current build; omit to plan a fresh composition
document requiredbodystring | objectAn HSX program source string for server-side compilation, or a decoded .udl JSON object that is already compiled.
partyBindings requiredbodyobject

Request sample

curl --request POST 'https://hyperscale0.ai/v1/composer/plan' \
  --header "Authorization: Bearer $HYPERSCALE_API_KEY" \
  --header 'X-Hyperscale-Environment: sandbox' \
  --header 'Content-Type: application/json' \
  --data-raw '{"tenantId":"ten_sandbox_fb76ff74228aa14d","document":"program desk_key \"Desk & Key\"\ncurrency SAR\n\nobject day_pass \"Day pass\" {\n  fields { day: date }\n  attach payment = money.transfer {\n    payer: owner, payee: operator, amount: 60 SAR\n    economics pay { purpose: earning, sourceParty: payer }\n    expose create as book_day_pass\n    expose pay as pay_day_pass\n  }\n}","partyBindings":{}}'

Errors

CodeHTTPCause
agent_approval_denied403A human denied the agent's proposed operation.
agent_approval_required202An agent proposed a protected live operation.
csrf_token_invalid403A browser session mutation did not carry a current Hyperscale CSRF token.
environment_mismatch403The session was issued for sandbox or live and the request targets the other environment.
internal_error500Hyperscale hit an unexpected server-side condition and hid internal implementation details from this audience.
invalid_request400The request does not match the API reference.
missing_required_permission403The signed-in member's current role does not grant the permission required for this operation.
missing_required_scope403The credential is valid but does not grant one or more operation scopes.
not_found404No Hyperscale route matched the requested path and method.
product_access_suspended403The Product is disabled or closed, so its credentials are suspended in every environment.
product_activation_required403The live Product or required live capability is not active yet.
rate_limited429The credential sent more than its limit in the current 60-second window: 600 requests per API key or session, 1,200 per IP address. Every response carries `x-ratelimit-limit`, `x-ratelimit-remaining` and `x-ratelimit-reset` (Unix seconds).
request_body_too_large413The JSON request body exceeded Hyperscale's accepted payload size.
resource_not_found404The requested resource does not exist in the credential's visible scope.
state_conflict409The operation conflicts with the current durable state of the resource.
state_constraint_failed422The request is syntactically valid but violates a business-state constraint.
tenant_mismatch403The request mixed tenant-owned identifiers across tenant boundaries.
tenant_not_found404The credential resolved to a tenant Hyperscale cannot find.
unauthorized403The request did not include a valid Hyperscale bearer credential for this environment.
agent_token_expired401The agent token is real, but its grant ended. A grant lasts 30 days, or 7 days unused. `details.expiresAt` holds the date in ISO 8601 and `details.agentName` names the agent.
agent_token_replaced401The founder ran `hyperscale agent setup` again for this agent, which replaced this token with a newer one. `details.agentName` names the agent and `details.replacedAt` holds the date.
device_login_expired401The bearer is the founder's own device login from `hyperscale auth login`, not an agent token. Its access token lasts an hour and the CLI refreshes it; the login itself ends after 30 days, or 7 days unused. `details.expiresAt` holds when it ended in ISO 8601.
invalid_credentials401Hyperscale could not accept the account or credential request. Signup, login, and bearer authentication use one 401 for every case they reject, so the response exposes no credential-specific reason or registered-email verdict. The single exception is a key that is real but homed in the other environment: because the presented secret already matched a stored key, the message names the mismatch instead of leaving a working credential looking unknown. A bearer that matched nothing gets text that fits its prefix (an agent token, a refresh token, a personal access token, a session or no Hyperscale token at all), which says only what the caller sent, never whether a credential like it exists.
product_not_found404No Product matches the `productId` in this tenant and environment, or a resource the request names belongs to a different Product than the API key's. A missing, foreign or ambiguous resource binding also reports this code.
session_expired401The session behind this request has ended. A console session ends 30 days after sign-in, or after 12 hours with no request. An admin or customer session ends 24 hours after sign-in, or after 15 minutes with no request. A personal access token ends at the `expiresAt` set when it was created.
session_required401This operation needs a person signed in through the browser or the `hyperscale` CLI. A Product API key cannot call it. The request carried no session, or its token matched no live session.
session_revoked401The session or personal access token behind this request was ended before its expiry. Sign-out, `user.session.revoke`, a password reset, a role change, removal from the team, user suspension and `personal_access_token.revoke` all end sessions.
tenant_status_forbidden409The company is suspended or closed, so every credential bound to it is refused, reads included. `details.tenantId` names the company.

All operations