# /resellers/{id}/promote - Promote reseller to distributor **PATCH /resellers/{id}/promote** Move a reseller one level up to distributor, in place. Restricted to the Owner organization (Staff or Owner user role), with global reach: promotion changes the shape of the commercial hierarchy, so no partner role can trigger it (403 otherwise). The organization keeps its `id` and `logto_id`, so its customers, users, systems, applications, alert history and Mimir tenant stay attached. Its `custom_data.createdBy` moves to the Owner organization, so the distributor that manages it drops it — and the customers under it — from its scope, and the alerting config chain stops inheriting that distributor's layer. Members get the `Distributor` organization role in place of `Reseller`, so each of them picks up the new level at the next login or token refresh. Rejected with 409 when the reseller is suspended (reactivate it first), when it is not yet synced with Logto, or when the Owner organization cannot be resolved; with 400 when its VAT already belongs to an active distributor (VAT is unique per level). Both carry the `validation_error` shape with stable `message` codes — see the individual responses. ## Servers - Backend API server: https://my.nethesis.it/backend/api (Backend API server) ## Authentication methods - Bearer auth ## Parameters ### Path parameters - **id** (string) Reseller Logto ID ## Responses ### 200 Reseller promoted successfully #### Body: application/json (object) - **code** (integer) - **message** (string) - **data** (object) ### 400 Validation failed. `data.type` is always `validation_error` and `data.errors[]` carries a stable `message` code the UI turns into an i18n key: `already exists` on `custom_data.vat` when the VAT already belongs to an active distributor (`value` is the VAT). #### Body: application/json (object) - **code** (integer) HTTP error code - **message** (string) Error message - **data** (object) ### 401 Unauthorized - invalid or missing token #### Body: application/json (object) - **code** (integer) - **message** (string) - **data** (object | null) ### 403 Forbidden - insufficient permissions #### Body: application/json (object) - **code** (integer) - **message** (string) - **data** (object | null) ### 404 Resource not found #### Body: application/json (object) - **code** (integer) HTTP error code - **message** (string) Error message - **data** (object) ### 409 The organization cannot be promoted in its current state. Same `validation_error` shape as the 400, on key `promote`, with stable `message` codes: `organization_is_suspended` (reactivate it first), `organization_not_synced` (no Logto organization yet), `owner_organization_not_found` (no Owner organization to attach it to). #### Body: application/json (object) - **code** (integer) HTTP error code - **message** (string) Error message - **data** (object) [Powered by Bump.sh](https://bump.sh)