Public reference

Profiles

Every endpoint in this group. Open one for its parameters and a worked example.

26 Endpoints

View as Markdown

Profiles

26
GET /api/v1/profiles List plans prm_profiles_index

One page of service plans, scoped to what the calling manager may actually see. A private plan is visible only to managers it was explicitly allow-listed for.

Authentication
Staff token or session
Requires permission
prm_profiles_index View profiles

vat_percent is a STRING, not a number. It is a NUMERIC(5,2) in the database and is serialised as text so the exact value survives the round trip. Every other money field on the plan is a bare JSON number.

Parameters

Parameter Description
filter[type] query · enum prepaid, postpaid, fup, extension or addon.
filter[status] query · string Plan status.
filter[assignable] query · boolean Only plans this caller may bind to a subscriber. Narrower than visibility, and the right filter behind a plan picker.
filter[allowed_services] query · enum ppp, hotspot or both.
filter[show_in_ucp] query · boolean Plans the subscriber portal offers for self-service renewal.
filter[private] query · boolean Plans restricted to an explicit manager allow-list.
filter[has_fup_chain] query · boolean Plans that fall back to another plan on expiry or quota exhaustion.
sort query · string id, created_at, name, type or status. Defaults to name ascending.
Response 200 OK
{
  "data": [
    {
      "id": 7,
      "tenant_id": 12,
      "name": "Home 20M",
      "type": "prepaid",
      "base_fee": 150.00,
      "end_user_price": 180.00,
      "vat_percent": "14.00",
      "enforce_expiration": true,
      "expiration_value": 30,
      "expiration_unit": "days",
      "combined_bytes_limit": 107374182400,
      "enforce_combined_bytes": true,
      "enforce_period_seconds": false,
      "download_kbps": 20480,
      "upload_kbps": 4096,
      "speed_share_mode": "per_session",
      "allowed_services": "both",
      "private": false,
      "show_in_ucp": true,
      "carry_over_remaining_quota": false,
      "auto_renew_supported": true,
      "points_award": 10
    }
  ],
  "meta": { "page": 1, "page_size": 50, "total": 18, "has_next": false }
}
POST /api/v1/profiles Create a plan prm_profiles_create

name and type are the only required fields; everything else has a schema default. A plan created with no enforce toggles on is an unlimited plan.

Authentication
Staff token or session
Requires permission
prm_profiles_create Create profiles
Rate limit
t_mutate

A quota limit does nothing until its enforce toggle is on. Setting combined_bytes_limit while enforce_combined_bytes is false leaves the plan unlimited on data, and the number sits there looking like a cap. The two always travel together.

Parameters

Parameter Description
namerequired body · string Display name.
typerequired body · enum prepaid, postpaid, fup, extension or addon.
base_fee body · number Wholesale price to the reseller, major units.
end_user_price body · number Retail price, major units.
expiration_value body · integer Period length, paired with expiration_unit.
expiration_unit body · enum hours, days or months.
GET /api/v1/profiles/all List plans for a picker prm_profiles_index

Id and name only, un-paginated, for populating a select control. Cheaper than the full list when you do not need the plan bodies.

Authentication
Staff token or session
Requires permission
prm_profiles_index View profiles
POST /api/v1/profiles/bulk-delete Delete profiles prm_profiles_delete
Authentication
Staff token or session
Requires permission
prm_profiles_delete Delete profiles
Rate limit
t_mutate

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

DELETE /api/v1/profiles/{id} Delete a plan prm_profiles_delete

Refused while the plan is still referenced — by a subscriber, a card series or another plan's fall-back chain.

Authentication
Staff token or session
Requires permission
prm_profiles_delete Delete profiles
Rate limit
t_mutate

Parameters

Parameter Description
idrequired path · integer Plan id.
GET /api/v1/profiles/{id} Fetch one plan prm_profiles_index

The full plan definition: pricing, quota limits and their enforce toggles, speed, lifecycle flags and the fall-back chain.

Authentication
Staff token or session
Requires permission
prm_profiles_index View profiles

A plan you may not see answers 404, identical to one that does not exist. This route carries wholesale terms (base_fee, max_price), so a 403 would have let a reseller walk plan ids and read a rival's private pricing.

Parameters

Parameter Description
idrequired path · integer Plan id.
PATCH /api/v1/profiles/{id} Update a plan prm_profiles_update

Partial update. Numeric and foreign-key fields can be cleared to null by sending null explicitly, which is distinct from omitting them.

Authentication
Staff token or session
Requires permission
prm_profiles_update Edit profiles
Rate limit
t_mutate

Editing a plan does not re-provision the subscribers already on it. Their quota and window were written at activation time; a price or limit change applies to the next activation, not retroactively.

Parameters

Parameter Description
idrequired path · integer Plan id.
GET /api/v1/profiles/{id}/allowed-extensions Manage profile visibility / policy prm_profiles_policy_manager
Authentication
Staff token or session
Requires permission
prm_profiles_policy_manager Manage profile visibility / policy

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

PUT /api/v1/profiles/{id}/allowed-extensions Manage profile visibility / policy prm_profiles_policy_manager
Authentication
Staff token or session
Requires permission
prm_profiles_policy_manager Manage profile visibility / policy
Rate limit
t_mutate

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

GET /api/v1/profiles/{id}/allowed-managers Read a private plan's manager allow-list prm_profiles_policy_manager

Which managers may see and assign this plan. Only meaningful while the plan is private; a public plan is visible to everyone regardless of this list.

Authentication
Staff token or session
Requires permission
prm_profiles_policy_manager Manage profile visibility / policy

Parameters

Parameter Description
idrequired path · integer Plan id.
PUT /api/v1/profiles/{id}/allowed-managers Replace a private plan's manager allow-list prm_profiles_policy_manager

Replaces the whole list. Managers omitted from the payload lose access.

Authentication
Staff token or session
Requires permission
prm_profiles_policy_manager Manage profile visibility / policy
Rate limit
t_mutate

The allow-list is inert while private is false. Setting it on a public plan stores the rows and changes nothing, which looks exactly like the restriction failing to apply.

Parameters

Parameter Description
idrequired path · integer Plan id.
GET /api/v1/profiles/{id}/allowed-parents Manage profile visibility / policy prm_profiles_policy_manager
Authentication
Staff token or session
Requires permission
prm_profiles_policy_manager Manage profile visibility / policy

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

PUT /api/v1/profiles/{id}/allowed-parents Manage profile visibility / policy prm_profiles_policy_manager
Authentication
Staff token or session
Requires permission
prm_profiles_policy_manager Manage profile visibility / policy
Rate limit
t_mutate

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

POST /api/v1/profiles/{id}/clone Clone a plan prm_profiles_create

Copies the plan, including its RADIUS attributes and policies, under a new name. The usual way to build a variant without re-entering forty fields.

Authentication
Staff token or session
Requires permission
prm_profiles_create Create profiles
Rate limit
t_mutate

Parameters

Parameter Description
idrequired path · integer Plan to copy.
GET /api/v1/profiles/{id}/policies Manage plan policy rules prm_profiles_policies
Authentication
Staff token or session
Requires permission
prm_profiles_policies Manage plan policy rules

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

POST /api/v1/profiles/{id}/policies Manage plan policy rules prm_profiles_policies
Authentication
Staff token or session
Requires permission
prm_profiles_policies Manage plan policy rules
Rate limit
t_mutate

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

POST /api/v1/profiles/{id}/policies/bulk-delete Manage plan policy rules prm_profiles_policies
Authentication
Staff token or session
Requires permission
prm_profiles_policies Manage plan policy rules
Rate limit
t_mutate

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

DELETE /api/v1/profiles/{id}/policies/{policyID} Manage plan policy rules prm_profiles_policies
Authentication
Staff token or session
Requires permission
prm_profiles_policies Manage plan policy rules
Rate limit
t_mutate

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

PATCH /api/v1/profiles/{id}/policies/{policyID} Manage plan policy rules prm_profiles_policies
Authentication
Staff token or session
Requires permission
prm_profiles_policies Manage plan policy rules
Rate limit
t_mutate

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

GET /api/v1/profiles/{id}/price-list Read a plan's per-reseller prices prm_profiles_pricing

The pricing-tree overrides for this plan: what each manager in the tree pays and may charge, where it differs from the plan default.

Authentication
Staff token or session
Requires permission
prm_profiles_pricing Manage profile pricing

Parameters

Parameter Description
idrequired path · integer Plan id.
PUT /api/v1/profiles/{id}/price-list Replace a plan's per-reseller prices prm_profiles_pricing

Replaces the whole override set for this plan in one call. An entry omitted from the payload is removed, not left alone.

Authentication
Staff token or session
Requires permission
prm_profiles_pricing Manage profile pricing
Rate limit
t_mutate

A price cap of 0 and an absent cap mean different things. Absent is "no cap"; 0 is a cap of zero, which blocks every sale of that plan below the manager it is set on and reads on screen as "Over cap 0.00".

Parameters

Parameter Description
idrequired path · integer Plan id.
GET /api/v1/profiles/{id}/radius-attrs List a plan's RADIUS attributes prm_profiles_radius_attributes

The reply attributes this plan adds to an Access-Accept, beyond the ones derived from its speed and quota settings.

Authentication
Staff token or session
Requires permission
prm_profiles_radius_attributes Manage RADIUS attributes

Parameters

Parameter Description
idrequired path · integer Plan id.
POST /api/v1/profiles/{id}/radius-attrs Add a RADIUS attribute to a plan prm_profiles_radius_attributes

Adds one reply attribute. Attributes set here ride on every session of every subscriber on the plan.

Authentication
Staff token or session
Requires permission
prm_profiles_radius_attributes Manage RADIUS attributes
Rate limit
t_mutate

Parameters

Parameter Description
idrequired path · integer Plan id.
POST /api/v1/profiles/{id}/radius-attrs/bulk-delete Manage RADIUS attributes prm_profiles_radius_attributes
Authentication
Staff token or session
Requires permission
prm_profiles_radius_attributes Manage RADIUS attributes
Rate limit
t_mutate

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

DELETE /api/v1/profiles/{id}/radius-attrs/{attrId} Manage RADIUS attributes prm_profiles_radius_attributes
Authentication
Staff token or session
Requires permission
prm_profiles_radius_attributes Manage RADIUS attributes
Rate limit
t_mutate

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

PATCH /api/v1/profiles/{id}/radius-attrs/{attrId} Manage RADIUS attributes prm_profiles_radius_attributes
Authentication
Staff token or session
Requires permission
prm_profiles_radius_attributes Manage RADIUS attributes
Rate limit
t_mutate

Read straight from the router that serves this instance. A hand-written description of this endpoint has not been added yet.

Written to be read by machines too

The reference is public and needs no account, so a tool that has never seen X-Radius can reach a correct first call on its own.

/llms.txt
An index of every page, with one-line summaries.
/llms-full.txt
The whole reference as one Markdown file, with no navigation to crawl.
/openapi.json
OpenAPI 3.1, generated from the router that serves this instance.
/skill.md
A ready-made skill file for an assistant: authentication, the response envelope and the error codes in one page.
<page-url>.md
Append .md to any reference URL for the same page as Markdown.
Accept: text/markdown
Send this header on the ordinary URL and the answer comes back as Markdown instead.
Hand this to your assistant
Read https://x-radius.com/llms.txt, then fetch the endpoint you need as Markdown by appending .md to its URL.

Try it on your own network.

50 subscribers for 7 days. You pay nothing.