Docs Sign in Start building

Name the auditor who receives each closed month

company.close.recipient.set

Names a receiver the box sends each closed month's evidence file to on its own: a webhook endpoint with audience auditor, scope redacted, subscribed to reporting.company_close.delivered only. Only the company owner may name one (company_owner_required). The call answers approval_required with the approval pending: a second administrator who holds desk.settings.manage across every Product, not the owner, decides it with approval.decide, and the owner's own decision refuses approval_decider_refused. The approve runs this call again and the recipient reads active; from then on the maintenance tick delivers the live close of every month with no delivery yet, signed as every webhook is, and the audit row reporting.company_close.delivered names the recipient, its approval, the manifestDigest, the bytes and the receiver's status. Get the endpoint's signing secret with webhook.endpoint.secret.rotate; list, resend and recover its deliveries with the webhook operations. webhook.endpoint.update, enable, disable and delete refuse an auditor endpoint, so its URL and scope change only through a new recipient. Callers: the account owner's own CLI login (`hyperscale auth login`). An agent token is refused.

POST /v1/company-close-recipients

Principal user_session. Idempotency required. Environment either.

Input

FieldInTypeDescription
X-Hyperscale-Environmentheadersandbox | live
Idempotency-Key requiredheaderstring
X-Hyperscale-Rehearsalheader"true"`true` runs the request through admission and execution, keeps nothing, and answers OperationRehearsal with 200 in place of the operation's own output. Needs a signed-in caller. Identity operations, such as sign-in, sessions, team members and agent grants, refuse it with invalid_request.
tenantId requiredbodystringOrganization tenant ID
url requiredbodystringThe auditor's receiver. https in live; a sandbox receiver may use http.

Output

FieldTypeDescription
tenantId requiredstringOrganization tenant ID
status requiredpending | active | removed
url requiredstring
approvalId requiredstringThe approval a second administrator decides; the recipient receives only once it approves.
webhookEndpointId requiredstring | nullThe webhook endpoint the box delivers to, audience auditor; null while pending. Its secret, deliveries, resend and recovery are the webhook operations.
productId requiredstring | nullThe company's first Product, which the endpoint is filed under; it receives every month of the company. Null while pending.
scope required"redacted"Always redacted: nothing widens what leaves the box.
setBy requiredstringThe company owner who named the recipient.
expiresAt requiredstring | nullWhen a pending recipient's approval lapses; null once decided.
createdAt requiredstring

Request sample

Only a signed-in person may call this: the founder's own CLI after hyperscale auth login. 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 POST 'https://hyperscale0.ai/v1/company-close-recipients' \
  --header "Authorization: Bearer $HYPERSCALE_TOKEN" \
  --header 'X-Hyperscale-Environment: sandbox' \
  --header "Idempotency-Key: $(uuidgen)" \
  --header 'Content-Type: application/json' \
  --data-raw '{"tenantId":"ten_sandbox_example0001","url":"https://api.hyperscale.example"}'

CLI

hyperscale api call company.close.recipient.set \
  --input '{"tenantId":"ten_sandbox_example0001","url":"https://api.hyperscale.example"}'

Errors

CodeHTTPCause
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.
idempotency_conflict409The request reused an Idempotency-Key for a different logical mutation.
idempotency_required400The operation is a mutation and Hyperscale requires a replay key before executing it.
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.
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.
upgrading503The box is installing a release and replays its stored Cores on it first, for up to 300 seconds. Writes wait for the replay, so a release it refuses rolls back with nothing written.
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.
company_owner_required403The full evidence file carries the names of the company's counterparties, a reopen sets a closed month aside, and a recipient receives every closed month. Your role in the company is not owner. Nothing was exported or changed.
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.
instrument_instance_not_found404No record of this instrument matches the `instanceId` in this Product, company and environment. `details.instrumentId` and `details.instrumentInstanceId` name what was looked up.
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.
operation_not_finalized409The operation in `details.operationId` has started but has no final receipt. It is still running, or its outcome is unknown after a failure past the point where it may have committed. `details.error` carries the underlying failure when there is one.
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