Skip to main content
A managed account is a customer account you provision and own. This guide covers the full lifecycle. Every call needs the provision scope except the reads, which need read.

Provision an account

POST /accounts creates a customer account keyed by your own externalRef.
Idempotent by design. Two calls with the same externalRef return the same account. The first returns 201 with existing: false; a repeat returns 200 with existing: true and ignores the other body fields. Build your provisioning as fire-and-forget: retries never create duplicates.
The account is created with no password. Your customer never logs into WPOS directly; they activate the plugin with the returned licenseKey, and you drive everything else through the API or the dashboard.
If the email already belongs to an account that is not yours, the call returns 409 email_conflict and never attaches to it. Use an email your customer controls, or one namespaced to your platform.

Read an account

GET /accounts/:accountId returns the account with its credit balances and site count.

Change the plan

POST /accounts/:accountId/plan moves an account to a different plan.

Grant credits

POST /accounts/:accountId/credits adds credits to an account. This is a grant from your partner allocation, not a purchase: the customer gets no billing email.
amount is a positive integer. The response returns the new balance. Watch for the credits.low webhook to top accounts up before they run dry.

Suspend or reactivate

POST /accounts/:accountId/status sets the account’s status. Suspending stops the account from spending credits within one plugin validation cycle (about five minutes); setting it back to active re-enables it.
status is one of active, suspended, or cancelled. Use this when a customer churns or fails to pay you: it is your lever, not WPOS’s.

List an account’s sites

GET /accounts/:accountId/sites returns the WordPress sites connected to the account, including each site’s white-label handoff state.
You do not create sites by API. A site appears here once your customer activates the plugin on a real WordPress site with the account’s license key. That registration also fires a site.registered webhook.

Ownership and errors

Every account and site must resolve to your partner. A request for one that is not yours returns 404 not_found, never 403, so the API never leaks whether an id exists. See the error reference.

Next

Build jobs

Run the agent on a connected site.

Branding

White-label the assistant on a site.