MethodPathSummaryAuth
GET/v1/admin/resellersList reseller profilesSession
GET/v1/admin/resellers/{scope_id}Read a reseller profileSession
PUT/v1/admin/resellers/{scope_id}Open a tenant as a reseller, suspend or resume it, set its parametersSession

Contract file:api/openapi/v1/control.yaml

Operation details

GET /v1/admin/resellers

List reseller profiles

operationId
listResellers
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:identity.users.manage

Responses

listResellers Responses
StatusDescription
200Every reseller, active first.

Fields:items: array<ResellerProfile>

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
500The request could not be completed because of an internal failure.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 500 Outcome unknown: read back by ID or list first, then decide whether to retry with the original Idempotency-Key.

↑ Back to list

GET /v1/admin/resellers/{scope_id}

Read a reseller profile

operationId
getReseller
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:identity.users.manage

Parameters

getReseller Parameters
NameInTypeRequiredDescription
scope_idpathstring(uuid)Yes—

Responses

getReseller Responses
StatusDescription
200The profile.

Fields:scope_id: string(uuid) tenant_name: string status: string: active / suspended customer_limit: integer | null customer_count: integer(int64) wholesale_price_list: string prepaid_account_id: string(uuid) | null(uuid) low_balance_minor: integer(int64) currency: string revision: integer(int64) created_at: string(date-time) updated_at: string(date-time) suspended_at: string(date-time) | null(date-time)

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
404The requested resource was not found.
500The request could not be completed because of an internal failure.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 500 Outcome unknown: read back by ID or list first, then decide whether to retry with the original Idempotency-Key.

↑ Back to list

PUT /v1/admin/resellers/{scope_id}

Open a tenant as a reseller, suspend or resume it, set its parameters

operationId
putReseller
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:identity.users.manage

Description (from the contract)

revision 0 opens the tenant as a reseller (status must be active); otherwise revision is the current one. An active reseller's tenant_owner role holds reseller.packages.manage, reseller.customers.manage and reseller.customers.read; suspending takes them away (customers and sold subscriptions stay). A tenant under a reseller cannot become one (422 reseller_one_level). Prepaid wholesale: each order of the reseller's package charges its wholesale cost W (by wholesale_price_list) from the prepaid balance; when an order takes the balance below low_balance_minor the reseller is notified (reseller.prepaid.low_balance).

Parameters

putReseller Parameters
NameInTypeRequiredDescription
scope_idpathstring(uuid)Yes—

Request body

application/json · Required:Yes

putReseller Request body
NameTypeRequiredDescription
statusstring: active / suspendedYes—
customer_limitinteger | nullNonull = unlimited
wholesale_price_liststringNo—
low_balance_minorinteger(int64)No—
revisioninteger(int64)Yes—

Responses

putReseller Responses
StatusDescription
200The profile after the write.

Fields:scope_id: string(uuid) tenant_name: string status: string: active / suspended customer_limit: integer | null customer_count: integer(int64) wholesale_price_list: string prepaid_account_id: string(uuid) | null(uuid) low_balance_minor: integer(int64) currency: string revision: integer(int64) created_at: string(date-time) updated_at: string(date-time) suspended_at: string(date-time) | null(date-time)

400The request body or parameters are invalid.
401Authentication failed or the session is invalid.
403The authenticated principal is not allowed to perform the action.
404The requested resource was not found.
409The requested state conflicts with an existing resource or idempotency fact.
422The request is well formed but breaks a business rule (error.code names it).
500The request could not be completed because of an internal failure.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 500 Outcome unknown: read back by ID or list first, then decide whether to retry with the original Idempotency-Key.

↑ Back to list