---
title: "Register or move one app host membership (operator)"
method: PUT
path: "/internal/app-hosts/{hostId}"
---

# Register or move one app host membership (operator)

`PUT /internal/app-hosts/{hostId}`

## Request

- Base URL: `https://api.eurobase.dev`
- URL: `https://api.eurobase.dev/internal/app-hosts/{hostId}`
- Auth: none declared

Bearer: the internal maintenance token. A host is born provisioning; provisioning -> active | retired, active -> draining, draining -> active | retired. Retired is terminal. Address, port, instance and zone never change.

## Path parameters

- `hostId` string, required

## Request body

- AppHostMembershipRequest
  - `privateAddress` string, ipv4, required: A private IPv4 address
  - `port` integer, required
  - `state` 'provisioning' | 'active' | 'draining' | 'retired', required
  - `instanceId` string, uuid, required
  - `zone` string, required
  - `capacityVcpu` integer: Operator-owned immutable CPU capacity; never taken from host facts

## Response `200`

Membership after the write; changed is false when the host already had this state

- AppHostMembershipResponse
  - `changed` boolean, required
  - `host` object, required
    - `id` string, required
    - `privateAddress` string, required
    - `port` integer, required
    - `state` 'provisioning' | 'active' | 'draining' | 'retired', required
    - `instanceId` string, required
    - `zone` string, required
    - `capacityVcpu` integer, nullable
    - `bootId` string, nullable, required
    - `softwareRevision` string, nullable, required
    - `binaries` object[], required
    - `binaryChange` object, nullable: Latest pending, applied or restored binary-set transition
    - `factsReportedAt` string, date-time, nullable, required
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `retiredAt` string, date-time, nullable, required

## Other responses

- `401`: Internal maintenance token required
- `409`: app-host-transition-invalid, app-host-retired, app-host-identity-mismatch, app-host-facts-missing or app-host-address-in-use
- `422`: Invalid membership (app-host-membership-invalid)

---

[API](https://skmtc.dev/eurobase/apis/eurobase-api.md) · [All operations](https://skmtc.dev/eurobase/apis/eurobase-api/llms.txt) · [OpenAPI document](https://skmtc.dev/eurobase/apis/eurobase-api/revisions/5266a299d18a?raw)
