Getting started
All requests go to one host:
https://api.stg.invoicing.proradius.coEvery path starts with /v1. Requests and responses are JSON.
Before you begin
Section titled “Before you begin”- You need access to Settings > API in the PROradius web app. The page is available on the Pro and Enterprise plans.
- Some modules are add-ons. Their endpoints answer
403until the add-on is active on the organization, for example service jobs need the Ticketing System add-on.
Create a key
Section titled “Create a key”-
Open Settings > API and select Create API Key.
-
Enter an API Key Name that says what the key is for, for example
CRM integration. -
Set Max Calls Per Day. It is required and must be at least 1.
-
Optional: fill Allowed IPs, one address per line or comma-separated. Leave it empty to allow any address.
-
Tick the Permissions (abilities) the key needs. Each ability is
module:action, for exampletickets:create. Pick only what your integration uses. See Authentication for the full list. -
Optional: pick Ticket boards to limit the key to them. A key without a board list can open every board.
-
Save, then copy the key. It is shown in full only once.
The key is bound to one organization. It never needs an Organization-Id header.
Make your first call
Section titled “Make your first call”List the first five clients. The key needs clients:read.
curl https://api.stg.invoicing.proradius.co/v1/clients?pageSize=5 \ -H "Authorization: Bearer $PRORADIUS_API_KEY" \ -H "Accept: application/json"const res = await fetch('https://api.stg.invoicing.proradius.co/v1/clients?pageSize=5', { headers: { Authorization: `Bearer ${process.env.PRORADIUS_API_KEY}`, Accept: 'application/json', },});const body = await res.json();console.log(body.data);$ch = curl_init('https://api.stg.invoicing.proradius.co/v1/clients?pageSize=5');curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Authorization: Bearer '.getenv('PRORADIUS_API_KEY'), 'Accept: application/json', ],]);$body = json_decode(curl_exec($ch), true);print_r($body['data']);import os, requests
res = requests.get( "https://api.stg.invoicing.proradius.co/v1/clients", params={"pageSize": 5}, headers={"Authorization": f"Bearer {os.environ['PRORADIUS_API_KEY']}", "Accept": "application/json"},)print(res.json()["data"])The response is a page of clients (shortened here):
{ "data": [ { "id": "b8f2a1c4-7d39-4e52-9a06-1f4c8b3d5e27", "username": "demo-client", "name": "Demo Client", "phone_number": "+961 70 000 000", "external_ref": "crm-1001", "active": true } ], "links": { "first": "...", "last": "...", "prev": null, "next": "..." }, "meta": { "current_page": 1, "from": 1, "last_page": 12, "per_page": 5, "to": 5, "total": 58 }}If you get 401, the key is missing or wrong. If you get 403, the key does not have the ability. See
Errors.
Make a write request
Section titled “Make a write request”Write requests send a JSON body with Content-Type: application/json. The same pattern works for every module.
This example creates a client; the key needs clients:create.
curl -X POST https://api.stg.invoicing.proradius.co/v1/clients \ -H "Authorization: Bearer $PRORADIUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Demo Client", "username": "demo-client", "external_ref": "crm-1001" }'A successful create answers 201 with the new resource. A validation problem answers 422 with the field errors.
See Errors.
Next steps
Section titled “Next steps”- Read the Concepts: they apply to every module.
- Open the guide for the module you are integrating, under Guides in the sidebar.
- Browse every endpoint in the API reference.
- Import the Postman collection and set its
apiKeyvariable. - Subscribe to Webhooks instead of polling.
Thank you for the feedback.

