Panelr

Overview

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_NAME

GET 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.