Panelr

Create Trial

POST ?action=create_trial

Requests a free trial for a customer. Runs full anti-abuse checks including VPN detection and disposable email validation. The customer's real IP must be forwarded from the frontend.

Trials belong to a service. Pass service to say which one; omit it and the only service offering trials is used. Each service has its own trial product, length, daily cap and eligibility rules, so a customer may trial each of your services once. Call get_plugins and look for trials_enabled to see which are on offer.

Request Parameters

FieldTypeRequiredDescription
emailstringRequiredCustomer email address
customer_ipstringRequiredCustomer's real browser IP — collected server-side on WordPress and forwarded here
namestringOptionalCustomer name
user_agentstringOptionalCustomer browser user agent
turnstile_tokenstringOptionalA Cloudflare Turnstile response from your own form. Checked with Cloudflare using this store's secret when Turnstile is switched on under Settings → Trials; a failed check is refused (422). Leave it out when your site runs its own human check
create_loginbooleanOptionalDefault true: the customer gets a login for the trial line the moment it is provisioned (a setup link by email). Pass false when your site creates the login itself with the password the visitor chose — call register_customer once the trial is live. Nothing is created for a request that is refused or still waiting for approval
serviceintegerOptionalWhich service to trial — a plugin_id from get_plugins. Omit it when only one service offers trials.
bypass_abuse_checksbooleanOptionalAdmin override — skips all abuse, duplicate and rate limit checks

Response — Auto-provisioned

{
  "success": true,
  "data": {
    "trial_request_id": 12,
    "activation_id": 45,
    "status": "approved"
  },
  "error": null
}

Response — Pending manual approval

{
  "success": true,
  "data": {
    "trial_request_id": 12,
    "work_order_id": 44,
    "reference_code": "WO-2026-12347",
    "status": "pending"
  },
  "error": null
}