Set one of the caller's client accounts to a named entitlement bundle.
const url = 'https://api.siteqwality.com/partner/accounts/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/plan';const options = { method: 'PUT', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"bundle":"client_standard"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}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.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Path Parameters
Section titled “Path Parameters ”Client account identifier
Request Body required
Section titled “Request Body required ”Body for PUT /partner/accounts/{id}/plan.
object
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.
Responses
Section titled “ Responses ”Bundle applied
Response for PUT /partner/accounts/{id}/plan.
object
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.
The packs the bundle grants, with the catalog ids they resolved to.
One pack the client holds after the bundle was applied.
object
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.
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.
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