Skip to content

Performance API

Endpoints for accessing performance appraisal cycles and individual ratings.

Base path: /api/v1/performance


Appraisal Cycles

List Cycles

http
GET /api/v1/performance/cycles
Authorization: Bearer {token}

Query Parameters

ParameterTypeDescription
statusstringdraft, active, completed
yearintegerFilter by year (based on start date)
department_idintegerFilter by department scope
pageintegerPage number
per_pageintegerRecords per page

Response

json
{
  "success": true,
  "data": [
    {
      "id": 3,
      "name": "Annual Appraisal 2026",
      "start_date": "2026-01-01",
      "end_date": "2026-12-31",
      "review_deadline": "2027-01-31",
      "status": "active",
      "department": null,
      "total_employees": 50,
      "completed_count": 35,
      "pending_count": 15,
      "average_score": 3.42,
      "created_at": "2025-12-15T10:00:00.000000Z"
    },
    {
      "id": 2,
      "name": "Mid-Year Review 2025",
      "start_date": "2025-01-01",
      "end_date": "2025-06-30",
      "review_deadline": "2025-07-31",
      "status": "completed",
      "department": null,
      "total_employees": 48,
      "completed_count": 48,
      "pending_count": 0,
      "average_score": 3.58,
      "created_at": "2024-12-20T10:00:00.000000Z"
    }
  ]
}

Get Cycle

http
GET /api/v1/performance/cycles/{id}
Authorization: Bearer {token}

Response

json
{
  "success": true,
  "data": {
    "id": 3,
    "name": "Annual Appraisal 2026",
    "start_date": "2026-01-01",
    "end_date": "2026-12-31",
    "review_deadline": "2027-01-31",
    "status": "active",
    "description": "Company-wide annual performance appraisal",
    "department": null,
    "total_employees": 50,
    "completed_count": 35,
    "pending_count": 15,
    "average_score": 3.42,
    "rating_distribution": {
      "outstanding": 8,
      "excellent": 12,
      "good": 10,
      "average": 4,
      "poor": 1,
      "pending": 15
    },
    "created_by": { "id": 1, "name": "Admin User" },
    "created_at": "2025-12-15T10:00:00.000000Z"
  }
}

Performance Ratings

List Ratings

http
GET /api/v1/performance/ratings
Authorization: Bearer {token}

Query Parameters

ParameterTypeDescription
cycle_idintegerFilter by appraisal cycle
employee_idintegerFilter by employee
statusstringpending_self, pending_manager, completed
rating_labelstringoutstanding, excellent, good, average, poor
pageintegerPage number
per_pageintegerRecords per page

Response

json
{
  "success": true,
  "data": [
    {
      "id": 201,
      "cycle": { "id": 3, "name": "Annual Appraisal 2026" },
      "employee": {
        "id": 42,
        "employee_id": "EMP-042",
        "full_name": "John Doe",
        "department": "Engineering",
        "position": "Senior Developer"
      },
      "self_score": 4.2,
      "manager_score": 3.8,
      "final_score": 3.96,
      "rating_label": "excellent",
      "self_submitted_at": "2027-01-15T10:00:00.000000Z",
      "manager_submitted_at": "2027-01-20T14:00:00.000000Z",
      "finalised_at": "2027-01-31T09:00:00.000000Z",
      "status": "completed"
    }
  ]
}

Get Rating

http
GET /api/v1/performance/ratings/{id}
Authorization: Bearer {token}

Response

json
{
  "success": true,
  "data": {
    "id": 201,
    "cycle": { "id": 3, "name": "Annual Appraisal 2026" },
    "employee": {
      "id": 42,
      "employee_id": "EMP-042",
      "full_name": "John Doe",
      "department": "Engineering"
    },
    "criteria_scores": {
      "self": {
        "work_quality": 4,
        "productivity": 5,
        "communication": 4,
        "teamwork": 4,
        "problem_solving": 4,
        "goal_achievement": 4,
        "overall_comment": "I delivered all Q1 and Q2 features on time and mentored two junior developers."
      },
      "manager": {
        "work_quality": 4,
        "productivity": 4,
        "communication": 3,
        "teamwork": 4,
        "problem_solving": 4,
        "goal_achievement": 4,
        "overall_comment": "John consistently delivers quality work. Communication with stakeholders could be improved."
      }
    },
    "self_score": 4.17,
    "manager_score": 3.83,
    "final_score": 3.96,
    "rating_label": "excellent",
    "status": "completed",
    "self_submitted_at": "2027-01-15T10:00:00.000000Z",
    "manager_submitted_at": "2027-01-20T14:00:00.000000Z",
    "finalised_at": "2027-01-31T09:00:00.000000Z"
  }
}

Get Employee's Own Rating (Self-Service)

Employees can retrieve their own rating for a cycle:

http
GET /api/v1/performance/my-rating?cycle_id=3
Authorization: Bearer {token}

Returns the same structure as Get Rating but restricted to the authenticated user's own record.

Released under the MIT License.