Skip to content

Set one of the caller's client accounts to a named entitlement bundle.

PUT
/partner/accounts/{client_account_id}/plan
curl --request PUT \
--url https://api.siteqwality.com/partner/accounts/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/plan \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "bundle": "client_standard" }'

A partner picks a bundle, never individual packs: the wholesale rate is flat per client, so what a client gets is one of the two compositions that rate was priced against.

The bundle becomes ordinary subscription rows on the client account, so quota metering, paid feature unlocks and every other downstream consequence behave exactly as they do for a direct customer.

Idempotent, and that is the intended way to use it. Setting the bundle a client is already on grants nothing, cancels nothing, and does not move a billing anniversary, so a console that re-asserts state on every save is safe.

Changing a client’s bundle moves that client between the wholesale lines on your own subscription, prorated for the remainder of the current period.

client_account_id
required
string format: uuid

Client account identifier

Media type application/json

Body for PUT /partner/accounts/{id}/plan.

object
bundle
required

The named entitlement presets a partner may set on a client account.

Presets rather than free choice of packs: the partner pays a flat wholesale rate per client, so what a client gets has to be one of the two things that rate was priced against. A partner who needs something else buys it retail on the client account or talks to us.

string
Allowed values: client_standard client_pro

Bundle applied

Media type application/json

Response for PUT /partner/accounts/{id}/plan.

object
account_id
required
string format: uuid
bundle
required

The named entitlement presets a partner may set on a client account.

Presets rather than free choice of packs: the partner pays a flat wholesale rate per client, so what a client gets has to be one of the two things that rate was priced against. A partner who needs something else buys it retail on the client account or talks to us.

string
Allowed values: client_standard client_pro
packs
required

The packs the bundle grants, with the catalog ids they resolved to.

Array<object>

One pack the client holds after the bundle was applied.

object
pack_id
required
string format: uuid
product
required
string
Allowed values: uptime synthetic telemetry incidents sms status_pages rum_observe rum_analyze session_replay partner
name
required
string
granted
required

How many partner-sourced entitlement rows this call created. Zero when the client was already on the bundle, which is what makes the endpoint safe to call repeatedly.

integer
cancelled
required

How many partner-sourced entitlement rows this call cancelled, i.e. what the previous bundle had that this one does not. Rows sourced from Stripe or from a staff grant are never counted here because they are never touched.

integer
Example
{
"bundle": "client_standard",
"packs": [
{
"product": "uptime"
}
]
}

Missing or invalid authentication

Caller is not an admin, or the account is not in the partner program

No live client account of yours with that id

Unknown bundle name, or no bundle in the body

Internal server error