Docs Sign in Start building

Read a wire run

wire.run.retrieve

Shows where a run stands: its status, each step's state with what it wrote and found, the Product once composed, and the refusal when it failed. Callers: the account owner's CLI login, or an agent token with blueprints:read, or a personal access token with blueprints:read.

GET /v1/wire/runs/{runId}

Principal user_session. Idempotency not_required. Environment sandbox.

Input

FieldInTypeDescription
runId requiredpathstringWire run ID, such as wrn_sandbox_...
tenantId requiredquerystringOrganization tenant ID
X-Hyperscale-Environmentheadersandbox | live

Output

FieldTypeDescription
runId requiredstringWire run ID, such as wrn_sandbox_...
tenantId requiredstringOrganization tenant ID
packKey requiredstringA pack's key: its file name in the packs directory, without .json
brdDigest requiredstringSHA-256 of the BRD after whitespace normalisation: trimmed, every run of whitespace one space
productId requiredstring | nullThe Core's Product, once compose has run; null before
requestedBy requiredstringThe user id of the analyst who ran it
status requiredpending | running | done | failed
steps requiredobject[]compose, records and tests, in order. compose counts the Product it made or found; records counts lifecycle records; tests counts the first SIT cycle, its run results and the records that hang on that cycle. tests stays pending while the Core's checks run
attempts requiredintegerHow many times the sweep has taken the run's current step; it starts again at each step and each rerun, and a sweep that finds the Core's checks still running does not count
refusal requiredobject | nullWhy a failed run stopped: wire_run_failed with the refusal the step met in details.cause, such as a compile refusal and its diagnostics, or when the Core's checks never settled; wire_pack_invalid when the pack cannot be written; wire_pack_check_unknown when a test case names a check the Core's results lack
createdAt requiredstring
updatedAt requiredstring
finishedAt requiredstring | null

Request sample

Only a signed-in person may call this: the CLI after hyperscale auth login, or curl with a personal access token (hyperscale_pat_...) with blueprints:read or an agent token with blueprints:read. The agent's grant must span every Product the call reads. A Product key cannot, so the SDK, which signs in with a Product key or a customer session, has no sample for it.

curl

curl --request GET 'https://hyperscale0.ai/v1/wire/runs/resource_sandbox_example0001' \
  --header "Authorization: Bearer $HYPERSCALE_TOKEN" \
  --header 'X-Hyperscale-Environment: sandbox'

CLI

hyperscale api call wire.run.retrieve \
  --input '{"runId":"resource_sandbox_example0001"}'

Errors

CodeHTTPCause
approval_rejected403A person rejected the call or returned it to the maker, so it never runs.
approval_required202The call waits for decisions: an agent's call over its grant waits on its delegator, and a program action under `requires approval` waits on distinct people other than the maker.
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.
method_not_allowed405The route exists, but not for the request's HTTP method.
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.
oauth_client_not_admitted403The bearer is an OAuth client token, and this operation does not admit the oauth2_client principal.
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).
resource_not_found404The requested resource does not exist in the credential's visible scope.
resource_reader_unavailable503A generated read model could not serve the request at this moment.
state_conflict409The operation conflicts with the current durable state of the resource.
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 account owner 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 account owner'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.
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.
wire_pack_check_unknown422A test case in the pack names a check the pack's HSX program does not declare, so the run could not take its result from the Core's checks. details.cases lists each case and the check it names.
wire_pack_invalid422The pack cannot be written as this company: a record names a role no member can play, or a record breaks the pack's own rules. details.cause.message names what failed.
wire_run_failed422A step of the run met a refusal it cannot pass, such as the pack's HSX failing to compile. details.step names the step and details.cause holds the refusal with its diagnostics.

All operations