---
title: "Associate an enrolled host with observed AWS or Google Cloud capacity"
method: POST
path: "/v1/cloud-connections/{id}/execution/hosts"
tags: ["Cloud observation"]
---

# Associate an enrolled host with observed AWS or Google Cloud capacity

`POST /v1/cloud-connections/{id}/execution/hosts`

## Request

- Base URL: `/` (relative, and the document was published on a file host, not at the API’s origin)
- URL: `/v1/cloud-connections/{id}/execution/hosts`
- Auth: HTTP bearer

Requires an API key owned by a user who is currently a team administrator. The console uses the same service with its authenticated session. Requires execution setup to be enabled and the Nodus host to belong to its dedicated pool. Checks the exact running GPU instance and region against ready account or project inventory collected within the last two hours. Google Cloud requires zone and matches its server-generated numeric instance ID in the connected project. The administrator declares where the host was installed. This does not attest physical host identity or enable execution credentials. Existing associations are immutable, with exact retries returning the same record. Missing hosts return 404. Unavailable inventory and conflicting associations return 409.

## Path parameters

- `id` string, required

## Request body

- CloudExecutionHostInput
  - `host_id` string, required
  - `resource_id` string, required: AWS EC2 instance ID or Google Compute Engine server-generated uint64 instance ID, supplied as a decimal string. IDs and regions must match the connection provider.
  - `region` string, required
  - `zone` string: Required for Google Cloud and must belong to the supplied region. Omit for AWS.

## Response `200`

Associate an enrolled host with observed AWS or Google Cloud capacity

- CloudExecutionHost: An administrator-declared association between an enrolled Nodus host and observed AWS or Google Cloud capacity. This association does not attest the physical instance identity or grant execution credentials.
  - `host_id` string, required: Nodus host identity in the dedicated pool.
  - `resource_id` string, required: Customer-owned AWS EC2 instance ID or Google Compute Engine numeric instance ID recorded by the administrator.
  - `region` string, required: Cloud region containing the observed instance.
  - `bound_at` string, date-time, required
  - `execution_configured` boolean, required: The enrolled host has declared the required Nodus execution configuration. Health, cloud authorization and available capacity are checked separately. This is not a physical host attestation.
  - `zone` string: Google Compute Engine zone containing the instance. Omitted for AWS associations.

## Other responses

- `default`: Authentication, administrator access, invalid input, missing records, conflicts, rate limits, credential storage, and transient failures are returned using the stable error and message fields.

## Changes

- **2026-10-01** `ba84c74aeec8`: 2 warning, 2 info
  - changed the pattern of the request property `region` from `^[a-z]{2}(?:-[a-z]+)+-[0-9]+$` to `^(?:[a-z]{2}(?:-[a-z]+)+-[0-9]+|[a-z]+(?:-[a-z]+)+[0-9]+)$`
  - changed the pattern of the request property `resource_id` from `^i-(?:[a-f0-9]{8}|[a-f0-9]{17})$` to `^(?:i-(?:[a-f0-9]{8}|[a-f0-9]{17})|[1-9][0-9]{0,19})$`
  - added the new optional request property `zone`
  - added the optional property `zone` to the response with the `200` status
- **2026-10-01** `544fef290a54`: 4 warning
  - changed the pattern of the request property `region` from `^(?:[a-z]{2}(?:-[a-z]+)+-[0-9]+|[a-z]+(?:-[a-z]+)+[0-9]+)$` to `^[a-z]{2}(?:-[a-z]+)+-[0-9]+$`
  - changed the pattern of the request property `resource_id` from `^(?:i-(?:[a-f0-9]{8}|[a-f0-9]{17})|[1-9][0-9]{0,19})$` to `^i-(?:[a-f0-9]{8}|[a-f0-9]{17})$`
  - removed the request property `zone`
  - removed the optional property `zone` from the response with the `200` status
- **2026-09-28** `621fe4052ff9`: 2 warning, 2 info
  - changed the pattern of the request property `region` from `^[a-z]{2}(?:-[a-z]+)+-[0-9]+$` to `^(?:[a-z]{2}(?:-[a-z]+)+-[0-9]+|[a-z]+(?:-[a-z]+)+[0-9]+)$`
  - changed the pattern of the request property `resource_id` from `^i-(?:[a-f0-9]{8}|[a-f0-9]{17})$` to `^(?:i-(?:[a-f0-9]{8}|[a-f0-9]{17})|[1-9][0-9]{0,19})$`
  - added the new optional request property `zone`
  - added the optional property `zone` to the response with the `200` status
- …earlier changes not shown

[Operation history](https://skmtc.dev/nodus-compute/apis/nodus-infrastructure-execution-api/changes/v1/cloud-connections/:id/execution/hosts/post.md)

---

[API](https://skmtc.dev/nodus-compute/apis/nodus-infrastructure-execution-api.md) - [All operations](https://skmtc.dev/nodus-compute/apis/nodus-infrastructure-execution-api/llms.txt) - [OpenAPI document](https://skmtc.dev/nodus-compute/apis/nodus-infrastructure-execution-api/revisions/a59210899d95?raw)
