What problem does it solve? Adding or modifying a REST endpoint in OrangeHRM requires understanding a specific dispatch pipeline — routes.yaml, GenericRestController, Endpoint interfaces, validation rules, and response models — and getting any piece wrong produces confusing 404s, 422s, or 500s. This Skill documents that entire request lifecycle so you can wire endpoints correctly the first time. ## Core Features & Use Cases - Endpoint scaffolding: Choose the right interface (CollectionEndpoint, ResourceEndpoint, CrudEndpoint), implement verb handlers and their getValidationRuleFor* methods, and register routes with correct _api, _key, and requirements settings. - Request handling patterns: Read typed params via RequestParams, wire sorting/pagination/filtering through FilterParams DTOs, and handle Base64 file uploads. - Error and access control: Map exceptions to HTTP status codes (400/403/404/422/501) and enforce row-level access with UserRoleManager checks inside handlers. - Use Case: You need a new /api/v2/pim/widgets endpoint with list, create, and delete support. Follow the full CRUD recipe to create the WidgetAPI class, add both collection and resource routes, and seed permissions via migration. ## Quick Start Ask the AI to create a new OrangeHRM REST API v2 endpoint for a resource, including the Endpoint class, routes.yaml entries, and validation rules.