Pay scales

For HR administrators

Pay scales are your workspace's salary scales: each one has grades, and each grade has steps with a base amount. Positions and job descriptions point at a scale and a grade. This endpoint is read-only: scales are managed in the app under Pay scales, and your ERP or payroll system reads them to map its own grades.

All endpoints sit under /api/v1 and need an API key (Authorization: Bearer jdr_live_…) created by your Workspace Admin in Settings → Integrations.

Endpoints

Method and pathWhat it doesPermission
GET /api/v1/pay-scalesList your pay scales with their grades and stepsstructure.functional.salary

The list takes limit (1–100, default 50) and cursor and returns { data, nextCursor }. updatedSince (ISO 8601) returns only scales changed since then; adding, editing or removing a grade counts as a change to its scale. Inactive scales are included. ?externalSystem=&externalId= (both together) finds the scale linked to your own id.

The pay scale object

FieldTypeNotes
idstringJadiroon id (positions show it as payScaleId).
name{ ar, en }
kindstringGENERAL, HEALTH, EDUCATION, MILITARY or CUSTOM.
builtInbooleantrue when the scale was copied from a Jadiroon template.
periodstringMONTHLY or ANNUAL: the unit of every amount on the scale.
currencystringFor example SAR.
stepModelstringCOMPUTED (base + step × increment) or EXPLICIT (amounts set per step).
activebooleanWhether the scale is active in the app.
gradesarrayLowest grade first, see below.
externalRefsarray[{ system, externalId }].
createdAt, updatedAtISO 8601

Each grade has:

FieldTypeNotes
idstringPositions show it as payGradeId.
rankintegerOrder on the scale, 1 = lowest.
codestringThe grade's label on the scale, for example G6.
name{ ar, en }Optional display name.
baseMin, incrementintegerStep 1 amount and the raise per step.
stepCountintegerNumber of steps.
stepsarray[{ number, baseAmount }] for every step, with any per-step amounts applied. A position's payStepNumber is one of these numbers.

Webhook events

EventWhendata.object
pay_scale.createdA scale is created or copied from a templateThe pay scale
pay_scale.updatedA scale or one of its grades changes; data.changedFields lists the fields (grades for grade changes)The pay scale
pay_scale.deletedA scale is deleted{ id, externalRefs }
pay_scale.bulk_changedWorkspace setup copied the sector's scales{ resource: "pay_scale" }

Editing a grade's amounts or step count also reprices what sits on it: each position whose payStepNumber or baseSalary changes sends position.updated (changedFields: ["payStepNumber", "baseSalary"]), and each job description whose band changes sends job_description.updated (changedFields: ["salaryMin", "salaryMax"]), or <resource>.bulk_changed beyond 50. Renaming a grade or changing only its code or rank reprices nothing and sends only pay_scale.updated. Endpoints without structure.functional.salary don't receive these repricing position.updated and job_description.updated events, since only pay changed.

A deleted scale also appears in GET /api/v1/deleted?resource=pay_scale for 180 days. Only endpoints whose key holds structure.functional.salary receive these events.

Errors

Status and codeMeaning
403 forbiddenThe key lacks structure.functional.salary.
422 validation_failedlimit, cursor or updatedSince is invalid.
422 validation_failedOnly one of externalSystem and externalId was sent.

Example

curl https://jadiroon.com/api/v1/pay-scales?limit=1 \
  -H "Authorization: Bearer $JADIROON_KEY"
{
  "data": [
    {
      "id": "cmvk2a7p10002kn5s3d4e5f6a",
      "name": { "ar": "سلم الموظفين العام", "en": "General civil service scale" },
      "kind": "GENERAL",
      "builtIn": true,
      "period": "MONTHLY",
      "currency": "SAR",
      "stepModel": "COMPUTED",
      "active": true,
      "grades": [
        {
          "id": "cmvk2a7q40003kn5s7a8b9c0d",
          "rank": 1,
          "code": "1",
          "name": { "ar": "المرتبة الأولى", "en": "Grade 1" },
          "baseMin": 3000,
          "increment": 135,
          "stepCount": 3,
          "steps": [
            { "number": 1, "baseAmount": 3000 },
            { "number": 2, "baseAmount": 3135 },
            { "number": 3, "baseAmount": 3270 }
          ]
        }
      ],
      "externalRefs": [],
      "createdAt": "2026-10-20T09:12:44.120Z",
      "updatedAt": "2026-10-20T09:12:44.120Z"
    }
  ],
  "nextCursor": null
}