MethodPathSummaryAuth
GET/v1/admin/reseller-wholesale-pricesList wholesale pricesSession
PUT/v1/admin/reseller-wholesale-prices/{price_list}/{line_group_id}/{period}Set one wholesale price (audited reseller.wholesale_price.put)Session
DELETE/v1/admin/reseller-wholesale-prices/{price_list}/{line_group_id}/{period}Remove one wholesale price (audited reseller.wholesale_price.delete)Session

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

Operation details

GET /v1/admin/reseller-wholesale-prices

List wholesale prices

operationId
listResellerWholesalePrices
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)

Prices per (price list, platform line group, period) in fen. A reseller's order costs the main line group's price plus the backup's (where priced) for the order's period; a package whose main line group has no price for a period cannot be sold for it.

Parameters

listResellerWholesalePrices Parameters
NameInTypeRequiredDescription
price_listquerystringNo—

Responses

listResellerWholesalePrices Responses
StatusDescription
200Prices ordered by list, line group name and period.

Fields:items: array<ResellerWholesalePrice>

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

PUT /v1/admin/reseller-wholesale-prices/{price_list}/{line_group_id}/{period}

Set one wholesale price (audited reseller.wholesale_price.put)

operationId
putResellerWholesalePrice
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)

Conditional write. expected_updated_at is the updated_at of the row the caller read, or null to create a row that does not exist yet; if the current row differs (changed, deleted or created by someone else) the write is refused with 409 wholesale_price_conflict and nothing changes. Every write moves updated_at forward. The line group must be one of the platform's own line groups (404 reseller_not_found otherwise).

Parameters

putResellerWholesalePrice Parameters
NameInTypeRequiredDescription
price_listpathstringYes—
line_group_idpathstring(uuid)Yes—
periodpathstring: month / quarter / yearYes—

Request body

application/json · Required:Yes

putResellerWholesalePrice Request body
NameTypeRequiredDescription
price_minorinteger(int64)Yes—
expected_updated_atstring(date-time)Yesupdated_at of the row the caller read; null = create.

Responses

putResellerWholesalePrice Responses
StatusDescription
200The price after the write.

Fields:price_list: string line_group_id: string(uuid) line_group_name: string period: string: month / quarter / year price_minor: integer(int64) currency: string updated_at: string(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.
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

DELETE /v1/admin/reseller-wholesale-prices/{price_list}/{line_group_id}/{period}

Remove one wholesale price (audited reseller.wholesale_price.delete)

operationId
deleteResellerWholesalePrice
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)

Conditional delete: removes the row only if its updated_at still equals expected_updated_at (409 wholesale_price_conflict otherwise; 404 when there is no row).

Parameters

deleteResellerWholesalePrice Parameters
NameInTypeRequiredDescription
price_listpathstringYes—
line_group_idpathstring(uuid)Yes—
periodpathstring: month / quarter / yearYes—
expected_updated_atquerystring(date-time)Yes—

Responses

deleteResellerWholesalePrice Responses
StatusDescription
204Removed.
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.
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