Skip to content

API reference

Pay

Pay history. Reading your own pay works with a key; recording pay happens in the web app.

3 actions · base URL https://api.bizisy.com/v1 · generated from the same definitions as the API.

List a person's pay#

POST/v1/org/pay.listRead

Returns a person's pay history (amount, currency, period: year, month or hour; effective from valid_from until the next row) and the row in force today. Visible to the person themselves and to owners, admins and HR in the app; managers never see pay. Over MCP or an API key, pay is only returned for yourself.

Who can call it
Manage key any Manage role
Me key anyone
Keys and apps
Only your own pay.
MCP tool
org_pay_list on My Workplace, HR Assistant
Method
POST with a JSON body, or GET with the input as query parameters

Input

  • person_idstringrequired

Returns

  • person_idstringrequired
  • currentobject | nullrequired
    8 fields
    • idstringrequired
    • valid_fromstringrequired
    • valid_tostring | nullrequired
    • amountnumberrequired
    • currencystringrequired
    • period"year" | "month" | "hour"required
    • notestring | nullrequired
    • created_atstringrequired
  • historyobject[]required
    8 fields
    • idstringrequired
    • valid_fromstringrequired
    • valid_tostring | nullrequired
    • amountnumberrequired
    • currencystringrequired
    • period"year" | "month" | "hour"required
    • notestring | nullrequired
    • created_atstringrequired
  • payroll_changed_atstring | nullrequired

Errors

validation_failed unauthenticated forbidden not_found rate_limited internal

curl
curl https://api.bizisy.com/v1/org/pay.list \
  -H "Authorization: Bearer $BIZISY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"person_id":"p1"}'
Response
{
  "data": {
    "person_id": "p1",
    "current": {
      "id": "pay1",
      "valid_from": "2024-01-15",
      "valid_to": null,
      "amount": 42000,
      "currency": "EUR",
      "period": "year",
      "note": null,
      "created_at": "2026-10-04T10:00:00.000Z"
    },
    "history": [
      {
        "id": "pay1",
        "valid_from": "2024-01-15",
        "valid_to": null,
        "amount": 42000,
        "currency": "EUR",
        "period": "year",
        "note": null,
        "created_at": "2026-10-04T10:00:00.000Z"
      }
    ],
    "payroll_changed_at": "2026-09-01T10:00:00.000Z"
  }
}

Record a pay change#

POST/v1/org/pay.addWrite

Records pay from effective_date (YYYY-MM-DD, may be in the future): amount (gross, at most 2 decimals), currency (ISO code, e.g. EUR), period (year, month or hour) and an optional note. It applies until the next recorded change. One row per date: a second change on the same date is refused (remove the wrong one with org_pay_remove first). Only in the app (never over MCP or an API key), by owners, admins and HR, never for their own pay; an HR member's pay only by an owner or admin, an owner's only by another owner. When Settings → Approval rules requires HR approval for pay changes, a request is created instead (approval in the result) and the pay applies when another owner, admin or HR member approves it.

Web app only
Refused for API keys and connected apps. Pay is recorded in the app only.
MCP tool
org_pay_add on HR Assistant
Preview
?dry_run=true runs every check and saves nothing
Retries
An Idempotency-Key prevents a second run, but the result is never stored (it holds a secret or personal data): a retry gets a 409 that points to Activity

Input

  • person_idstringrequired
  • effective_datestringrequired
  • amountnumberrequired

    From 0 to 100000000.

  • currencyanyrequired
  • period"year" | "month" | "hour"required
  • notestring

    Up to 200 characters.

Returns

  • person_idstringrequired
  • currentobject | nullrequired
    8 fields
    • idstringrequired
    • valid_fromstringrequired
    • valid_tostring | nullrequired
    • amountnumberrequired
    • currencystringrequired
    • period"year" | "month" | "hour"required
    • notestring | nullrequired
    • created_atstringrequired
  • historyobject[]required
    8 fields
    • idstringrequired
    • valid_fromstringrequired
    • valid_tostring | nullrequired
    • amountnumberrequired
    • currencystringrequired
    • period"year" | "month" | "hour"required
    • notestring | nullrequired
    • created_atstringrequired
  • payroll_changed_atstring | nullrequired
  • approvalobject | nullrequired
    11 fields
    • idstringrequired
    • status"pending" | "approved"required
    • waiting_for"manager" | "hr"required
    • approversstring[]required
    • automaticbooleanrequired
    • note"proposed_by_approver" | "no_other_approver"required
    • fallbackbooleanrequired
    • team_leadobject | nullrequired
      3 fields
      • unit_idstringrequired
      • unit_namestringrequired
      • reason"no_manager" | "manager_left"required
    • team_lead_blockedobject | nullrequired
      3 fields
      • unit_idstringrequired
      • unit_namestringrequired
      • what"lead" | "removed" | "moved" | "archived"required
    • untrusted"no_login" | "invited_by_proposer"required
    • then"manager" | "hr"required

Errors

validation_failed unauthenticated forbidden not_found conflict rate_limited internal

curl
curl https://api.bizisy.com/v1/org/pay.add \
  -H "Authorization: Bearer $BIZISY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "person_id": "p1",
  "effective_date": "2026-11-01",
  "amount": 21.5,
  "currency": "EUR",
  "period": "hour",
  "note": "Promotion"
}'
Response
{
  "data": {
    "person_id": "p1",
    "current": {
      "id": "pay1",
      "valid_from": "2024-01-15",
      "valid_to": null,
      "amount": 42000,
      "currency": "EUR",
      "period": "year",
      "note": null,
      "created_at": "2026-10-04T10:00:00.000Z"
    },
    "history": [
      {
        "id": "pay1",
        "valid_from": "2024-01-15",
        "valid_to": null,
        "amount": 42000,
        "currency": "EUR",
        "period": "year",
        "note": null,
        "created_at": "2026-10-04T10:00:00.000Z"
      }
    ],
    "payroll_changed_at": "2026-09-01T10:00:00.000Z",
    "approval": null
  }
}

Remove a pay row (fix a mistake)#

POST/v1/org/pay.removeDestructive

Deletes one pay row recorded by mistake (pay_id from org_pay_list); the previous row then applies until the next one. Same rules as org_pay_add: in the app only, never your own pay. When Settings → Approval rules requires HR approval for pay changes, removing the row in force today or a scheduled one creates a request instead (approval in the result); removing an older row applies at once.

Web app only
Refused for API keys and connected apps. Pay is changed in the app only.
MCP tool
org_pay_remove on HR Assistant
Preview
?dry_run=true runs every check and saves nothing
Retries
An Idempotency-Key replays the first result

Input

  • pay_idstringrequired

Returns

  • person_idstringrequired
  • currentobject | nullrequired
    8 fields
    • idstringrequired
    • valid_fromstringrequired
    • valid_tostring | nullrequired
    • amountnumberrequired
    • currencystringrequired
    • period"year" | "month" | "hour"required
    • notestring | nullrequired
    • created_atstringrequired
  • historyobject[]required
    8 fields
    • idstringrequired
    • valid_fromstringrequired
    • valid_tostring | nullrequired
    • amountnumberrequired
    • currencystringrequired
    • period"year" | "month" | "hour"required
    • notestring | nullrequired
    • created_atstringrequired
  • payroll_changed_atstring | nullrequired
  • approvalobject | nullrequired
    11 fields
    • idstringrequired
    • status"pending" | "approved"required
    • waiting_for"manager" | "hr"required
    • approversstring[]required
    • automaticbooleanrequired
    • note"proposed_by_approver" | "no_other_approver"required
    • fallbackbooleanrequired
    • team_leadobject | nullrequired
      3 fields
      • unit_idstringrequired
      • unit_namestringrequired
      • reason"no_manager" | "manager_left"required
    • team_lead_blockedobject | nullrequired
      3 fields
      • unit_idstringrequired
      • unit_namestringrequired
      • what"lead" | "removed" | "moved" | "archived"required
    • untrusted"no_login" | "invited_by_proposer"required
    • then"manager" | "hr"required

Errors

validation_failed unauthenticated forbidden not_found conflict rate_limited internal

curl
curl https://api.bizisy.com/v1/org/pay.remove \
  -H "Authorization: Bearer $BIZISY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"pay_id":"pay1"}'
Response
{
  "data": {
    "person_id": "p1",
    "current": null,
    "history": [],
    "payroll_changed_at": null,
    "approval": null
  }
}

Something missing or wrong on this page? Write to hello@bizisy.com.

Developer docs