API address
Every request goes to one address on your Panelr installation. Find it on the API page of your Panelr admin, and put it wherever these pages say PANELR_API_URL. The action is added as a query parameter:
PANELR_API_URL?action=ACTION_NAMEGET actions take their parameters in the query string. POST actions take a JSON body with Content-Type: application/json. The action is always read from the query string, even on POST.
Response envelope
Every response, success or failure, has the same shape:
{
"success": true | false,
"data": { ... } | null,
"error": null | "Human-readable message"
}More than one service
A store can connect more than one panel. Every product, bouquet, line and trial carries a plugin_id; get_plugins turns those ids into the names the store uses. The lookups take &plugin_id= to ask for one service, and a renewal or a bouquet choice can never cross services.
Dates
Every date and time the API returns is UTC, formatted YYYY-MM-DD HH:MM:SS. The store's timezone setting only changes what Panelr's own pages display; convert on your side for your visitors. Support-ticket responses also carry created_at_utc and updated_at_utc in ISO-8601.
Retries
create_activation, create_work_order and complete_order accept an idempotency_key (it defaults to wc_order_id, then payment_transaction_id). Send the same key again after a timeout and you get the original order back with already: true instead of a second order.
No webhooks
Panelr never calls your site. Provisioning after complete_order or submit_payment happens in the background: poll get_work_order a minute later, then a few more times over the following hour, until status is completed, canceled or payment_failed. Panelr emails the customer itself when a line is ready.
A storefront in five calls
Read get_store_settings once at startup. Sign the customer in with verify_customer_login, keep their customer_email or customer_id in your own session, and pass it on every later call so each request is scoped to them. Take an order with create_work_order (manual payment, admin review) or complete_order (confirmed gateway payment, provisioned at once). Show their lines with get_lines and their orders with get_work_orders.