{"openapi":"3.0.3","info":{"title":"Mihnaro API","version":"v1","description":"The Mihnaro HR REST API. Company endpoints take the company's ID in {company} and an app token or a company API key (mhk_\u2026) as a bearer token. Every call checks the company's license, then the person's permission, then their scope (branch and employees), as the app does. Send Accept: application/json, and Accept-Language: ar for Arabic messages. Guides: https://help.mihnaro.com"},"servers":[{"url":"https://api.mihnaro.com/api/v1"}],"tags":[{"name":"public: brand"},{"name":"public: branding"},{"name":"public: help"},{"name":"public: meta"},{"name":"public: password"},{"name":"public: server-switch"},{"name":"public: site"},{"name":"public: sso"},{"name":"public: token"},{"name":"public: tools"},{"name":"access"},{"name":"accounting"},{"name":"accounting-postings"},{"name":"activity-log"},{"name":"air-ticket-policies"},{"name":"air-tickets"},{"name":"announcements"},{"name":"api-keys"},{"name":"app-activity"},{"name":"app-devices"},{"name":"app-policy"},{"name":"approval-chains"},{"name":"approval-setup"},{"name":"approval-templates"},{"name":"approvals"},{"name":"assessments"},{"name":"asset-types"},{"name":"assets"},{"name":"attendance"},{"name":"attest"},{"name":"biometric-devices"},{"name":"biometric-templates"},{"name":"boarding-templates"},{"name":"boardings"},{"name":"branch"},{"name":"branches"},{"name":"buddy-punching"},{"name":"business-travel"},{"name":"cancellations"},{"name":"checklist-items"},{"name":"checklists"},{"name":"clocking-devices"},{"name":"clocking-wifi-networks"},{"name":"companies"},{"name":"competency-ratings"},{"name":"competency-setup"},{"name":"connected-apps"},{"name":"cost-allocations"},{"name":"cost-center-groups"},{"name":"custom-reports"},{"name":"dashboard-metrics"},{"name":"dashboards"},{"name":"device-audit-log"},{"name":"device-batches"},{"name":"device-commands"},{"name":"device-compatibility"},{"name":"device-enrollments"},{"name":"device-people"},{"name":"device-settings"},{"name":"device-sync-report"},{"name":"devices"},{"name":"directory"},{"name":"disciplinary-action-types"},{"name":"disciplinary-actions"},{"name":"disciplinary-rules"},{"name":"discipline-setup"},{"name":"documents"},{"name":"door-events"},{"name":"employee-geolocations"},{"name":"employee-groups"},{"name":"employee-invitations"},{"name":"employee-numbering"},{"name":"employee-settings"},{"name":"employee-shifts"},{"name":"employees"},{"name":"engine"},{"name":"enrollment-rules"},{"name":"eos-policies"},{"name":"evaluation-criteria"},{"name":"evaluation-cycles"},{"name":"evaluation-templates"},{"name":"evaluations"},{"name":"events"},{"name":"exchange-rates"},{"name":"feedback-cycles"},{"name":"feedback-form-assignments"},{"name":"feedback-forms"},{"name":"feedback-requests"},{"name":"field"},{"name":"financial-transactions"},{"name":"general"},{"name":"general-factor-templates"},{"name":"geolocations"},{"name":"goals"},{"name":"help"},{"name":"holiday-calendar"},{"name":"holidays"},{"name":"import"},{"name":"imported-sheets"},{"name":"insurance-members"},{"name":"insurance-policies"},{"name":"integrations"},{"name":"job-grade-levels"},{"name":"job-grades"},{"name":"key-positions"},{"name":"leave-adjustments"},{"name":"leave-balance-history"},{"name":"leave-balances"},{"name":"leave-encashments"},{"name":"leave-types"},{"name":"leaves"},{"name":"legal-rules"},{"name":"letter-templates"},{"name":"letters"},{"name":"line-manager-access"},{"name":"live-location"},{"name":"loans"},{"name":"location"},{"name":"map-tiles"},{"name":"mass-actions"},{"name":"me"},{"name":"miscellaneous-requests"},{"name":"nine-box"},{"name":"notification-events"},{"name":"notification-log"},{"name":"notification-setup"},{"name":"objectives"},{"name":"off-cycle-settlements"},{"name":"okr-templates"},{"name":"okrs"},{"name":"org-chart"},{"name":"org-units"},{"name":"overtime-types"},{"name":"overtimes"},{"name":"part-time-assignments"},{"name":"payroll"},{"name":"payroll-lists"},{"name":"payroll-rules"},{"name":"payroll-runs"},{"name":"payroll-settings"},{"name":"payslips"},{"name":"pending-biometrics"},{"name":"people"},{"name":"performance-kpis"},{"name":"performance-setup"},{"name":"permission-groups"},{"name":"permission-overrides"},{"name":"plan-actions"},{"name":"position-competencies"},{"name":"positions"},{"name":"potential-assessments"},{"name":"professional-data"},{"name":"projects"},{"name":"proof"},{"name":"provisions"},{"name":"rating-types"},{"name":"recruitment"},{"name":"regional-settings"},{"name":"reports"},{"name":"request-types"},{"name":"requests"},{"name":"role-assignments"},{"name":"roles"},{"name":"salaries"},{"name":"salary-batches"},{"name":"salary-package-templates"},{"name":"salary-packages-screening"},{"name":"salary-scales"},{"name":"saved-reports"},{"name":"search"},{"name":"settings"},{"name":"setup-forms"},{"name":"shifts"},{"name":"signatures"},{"name":"slack"},{"name":"social-security-salaries"},{"name":"stb-encashments"},{"name":"succession"},{"name":"successors"},{"name":"suspensions"},{"name":"system-announcements"},{"name":"task-templates"},{"name":"tasks"},{"name":"team-leaves"},{"name":"team-schedule"},{"name":"template-conflicts"},{"name":"terminations"},{"name":"timesheets"},{"name":"token"},{"name":"tv"},{"name":"users"},{"name":"webhook-deliveries"},{"name":"webhook-events"},{"name":"webhooks"},{"name":"platform: ai"},{"name":"platform: app-activity"},{"name":"platform: app-debug"},{"name":"platform: app-fleet"},{"name":"platform: app-releases"},{"name":"platform: appearance"},{"name":"platform: backups"},{"name":"platform: branches"},{"name":"platform: broadcasts"},{"name":"platform: buddy-punching"},{"name":"platform: calculator-rule-sets"},{"name":"platform: companies"},{"name":"platform: company-availability"},{"name":"platform: deleted-companies"},{"name":"platform: deletion-preview"},{"name":"platform: demo"},{"name":"platform: device-data"},{"name":"platform: domains"},{"name":"platform: event-location"},{"name":"platform: flash-messages"},{"name":"platform: leads"},{"name":"platform: licenses"},{"name":"platform: limits"},{"name":"platform: login-designs"},{"name":"platform: messaging"},{"name":"platform: monitor"},{"name":"platform: notification-log"},{"name":"platform: phone-sharing"},{"name":"platform: platform-admins"},{"name":"platform: security"},{"name":"platform: seo"},{"name":"platform: server-switch"},{"name":"platform: sign-in-options"},{"name":"platform: site"},{"name":"platform: support-sessions"},{"name":"platform: system-announcements"},{"name":"platform: users"},{"name":"platform: zenhr-sync"},{"name":"device: biometric"}],"x-tagGroups":[{"name":"Public and sign-in","tags":["public: brand","public: branding","public: help","public: meta","public: password","public: server-switch","public: site","public: sso","public: token","public: tools"]},{"name":"App API","tags":["access","accounting","accounting-postings","activity-log","air-ticket-policies","air-tickets","announcements","api-keys","app-activity","app-devices","app-policy","approval-chains","approval-setup","approval-templates","approvals","assessments","asset-types","assets","attendance","attest","biometric-devices","biometric-templates","boarding-templates","boardings","branch","branches","buddy-punching","business-travel","cancellations","checklist-items","checklists","clocking-devices","clocking-wifi-networks","companies","competency-ratings","competency-setup","connected-apps","cost-allocations","cost-center-groups","custom-reports","dashboard-metrics","dashboards","device-audit-log","device-batches","device-commands","device-compatibility","device-enrollments","device-people","device-settings","device-sync-report","devices","directory","disciplinary-action-types","disciplinary-actions","disciplinary-rules","discipline-setup","documents","door-events","employee-geolocations","employee-groups","employee-invitations","employee-numbering","employee-settings","employee-shifts","employees","engine","enrollment-rules","eos-policies","evaluation-criteria","evaluation-cycles","evaluation-templates","evaluations","events","exchange-rates","feedback-cycles","feedback-form-assignments","feedback-forms","feedback-requests","field","financial-transactions","general","general-factor-templates","geolocations","goals","help","holiday-calendar","holidays","import","imported-sheets","insurance-members","insurance-policies","integrations","job-grade-levels","job-grades","key-positions","leave-adjustments","leave-balance-history","leave-balances","leave-encashments","leave-types","leaves","legal-rules","letter-templates","letters","line-manager-access","live-location","loans","location","map-tiles","mass-actions","me","miscellaneous-requests","nine-box","notification-events","notification-log","notification-setup","objectives","off-cycle-settlements","okr-templates","okrs","org-chart","org-units","overtime-types","overtimes","part-time-assignments","payroll","payroll-lists","payroll-rules","payroll-runs","payroll-settings","payslips","pending-biometrics","people","performance-kpis","performance-setup","permission-groups","permission-overrides","plan-actions","position-competencies","positions","potential-assessments","professional-data","projects","proof","provisions","rating-types","recruitment","regional-settings","reports","request-types","requests","role-assignments","roles","salaries","salary-batches","salary-package-templates","salary-packages-screening","salary-scales","saved-reports","search","settings","setup-forms","shifts","signatures","slack","social-security-salaries","stb-encashments","succession","successors","suspensions","system-announcements","task-templates","tasks","team-leaves","team-schedule","template-conflicts","terminations","timesheets","token","tv","users","webhook-deliveries","webhook-events","webhooks"]},{"name":"Platform API","tags":["platform: ai","platform: app-activity","platform: app-debug","platform: app-fleet","platform: app-releases","platform: appearance","platform: backups","platform: branches","platform: broadcasts","platform: buddy-punching","platform: calculator-rule-sets","platform: companies","platform: company-availability","platform: deleted-companies","platform: deletion-preview","platform: demo","platform: device-data","platform: domains","platform: event-location","platform: flash-messages","platform: leads","platform: licenses","platform: limits","platform: login-designs","platform: messaging","platform: monitor","platform: notification-log","platform: phone-sharing","platform: platform-admins","platform: security","platform: seo","platform: server-switch","platform: sign-in-options","platform: site","platform: support-sessions","platform: system-announcements","platform: users","platform: zenhr-sync"]},{"name":"Fingerprint machines","tags":["device: biometric"]}],"paths":{"/app/brand":{"get":{"tags":["public: brand"],"operationId":"app_brand","summary":"GET /api/v1/app/brand (docs/mobile-app.md, \"\u0623\u064a\u0642\u0648\u0646\u0629 \u0627\u0644\u062a\u0637\u0628\u064a\u0642\")","description":"GET /api/v1/app/brand (docs/mobile-app.md, \"\u0623\u064a\u0642\u0648\u0646\u0629 \u0627\u0644\u062a\u0637\u0628\u064a\u0642\"): the main brand from the admin panel, for the app's build script (icon, splash) and its screens. Public and cacheable. The icon sources fall back to the mark; `version` changes whenever any of it does. data: name, colors {brand, accent}, logo_url, logo_white_url, mark_url, mark_white_url, icon_url, icon_white_url, icon_source (app_icon|mark), version.\n\n120 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/branding":{"get":{"tags":["public: branding"],"operationId":"app_branding","summary":"What the mobile app is painted with before anyone signs in","description":"What the mobile app is painted with before anyone signs in: the system palette and logos from the admin panel.\n\n60 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/help/categories":{"get":{"tags":["public: help"],"operationId":"help_categories","summary":"GET /api/v1/help/categories","description":"60 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/help/articles":{"get":{"tags":["public: help"],"operationId":"help_articles_index","summary":"GET /api/v1/help/articles","description":"60 requests a minute.","security":[],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","nullable":true},"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},{"name":"category","in":"query","required":false,"schema":{"type":"string","enum":["getting-started","employees","payroll","leaves","attendance","documents","performance","recruitment","reports","settings","api"],"nullable":true},"description":"nullable|string|in:getting-started,employees,payroll,leaves,attendance,documents,performance,recruitment,reports,settings,api"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/help/articles/{category}/{article}":{"get":{"tags":["public: help"],"operationId":"help_articles_show","summary":"GET /api/v1/help/articles/{category}/{article}","description":"60 requests a minute.","security":[],"parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9-]+$"}},{"name":"article","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9-]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/meta":{"get":{"tags":["public: meta"],"operationId":"app_meta","summary":"GET /api/v1/app/meta","description":"120 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/password/options":{"get":{"tags":["public: password"],"operationId":"app_password_options","summary":"GET /api/v1/app/password/options","description":"60 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/password/forgot":{"post":{"tags":["public: password"],"operationId":"app_password_forgot","summary":"POST /api/v1/app/password/forgot","description":"10 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"required|email"},"channel":{"type":"string","description":"required|Rule::in(self::availableChannels())"}},"required":["email","channel"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/password/reset":{"post":{"tags":["public: password"],"operationId":"app_password_reset","summary":"POST /api/v1/app/password/reset","description":"10 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"required|string"},"password":{"type":"string","description":"required|string|confirmed|\\App\\Support\\PasswordPolicy::rule($link->user)|new \\App\\Rules\\NotRecentlyUsedPassword($link->user)"}},"required":["token","password"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/server-switch":{"get":{"tags":["public: server-switch"],"operationId":"app_server_switch","summary":"GET /api/v1/app/server-switch (docs/mobile-server-switch.md)","description":"GET /api/v1/app/server-switch (docs/mobile-server-switch.md): only whether the app's live/dev switch works now, nothing else. Public, never cached: the app asks at the moment of the 15th tap, and on dev at every open.\n\n60 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/site/contact/options":{"get":{"tags":["public: site"],"operationId":"site_contact_options","summary":"GET /api/v1/site/contact/options","description":"60 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/site/contact":{"post":{"tags":["public: site"],"operationId":"site_contact_store","summary":"POST /api/v1/site/contact","description":"","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":null,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"422":{"$ref":"#/components/responses/ValidationError"}}}},"/app/sso/token":{"post":{"tags":["public: sso"],"operationId":"app_sso_token","summary":"The mobile app after single sign-on (MobileSso)","description":"The mobile app after single sign-on (MobileSso): the one-time code and its PKCE code_verifier. No 2FA code: the provider checked.\n\n10 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"required|string|max:100"},"code_verifier":{"type":"string","description":"required|string|min:43|max:128"},"device_name":{"type":"string","description":"required|string|max:80"},"device_id":{"type":"string","nullable":true,"description":"nullable|string|max:100"}},"required":["code","code_verifier","device_name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/token":{"post":{"tags":["public: token"],"operationId":"app_token","summary":"POST /api/v1/app/token","description":"10 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","description":"required|string|max:190"},"password":{"type":"string","description":"required|string"},"device_name":{"type":"string","description":"required|string|max:80"},"code":{"type":"string","nullable":true,"description":"nullable|string|max:20"},"device_id":{"type":"string","nullable":true,"description":"nullable|string|max:100"}},"required":["email","password","device_name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["token"],"operationId":"app_token_destroy","summary":"DELETE /api/v1/app/token","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/tools/calculators":{"get":{"tags":["public: tools"],"operationId":"tools_calculators_index","summary":"GET /api/v1/tools/calculators","description":"60 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/tools/calculators/{tool}":{"get":{"tags":["public: tools"],"operationId":"tools_calculators_show_get","summary":"GET /api/v1/tools/calculators/{tool}","description":"60 requests a minute.","security":[],"parameters":[{"name":"tool","in":"path","required":true,"schema":{"type":"string","pattern":"^end-of-service|net-salary|gross-salary|overtime|leave|cost-to-company$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["public: tools"],"operationId":"tools_calculators_show_post","summary":"POST /api/v1/tools/calculators/{tool}","description":"60 requests a minute.","security":[],"parameters":[{"name":"tool","in":"path","required":true,"schema":{"type":"string","pattern":"^end-of-service|net-salary|gross-salary|overtime|leave|cost-to-company$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/tools/countries":{"get":{"tags":["public: tools"],"operationId":"tools_countries_index","summary":"Every country with rules","description":"Every country with rules: the tools each can run, its variants and how many of its rules are verified.\n\n60 requests a minute.","security":[],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/tools/countries/{country}":{"get":{"tags":["public: tools"],"operationId":"tools_countries_show","summary":"A country's rules in force, with each rule's source and verified mark; a country with none says so.","description":"A country's rules in force, with each rule's source and verified mark; a country with none says so.\n\n60 requests a minute.","security":[],"parameters":[{"name":"country","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9-]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/access/time-zones":{"get":{"tags":["access"],"operationId":"app_access_time_zones","summary":"GET /api/v1/app/companies/{company}/access/time-zones","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["access"],"operationId":"app_access_time_zones_store","summary":"POST /api/v1/app/companies/{company}/access/time-zones","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"device_tz_id":{"type":"integer","description":"required|integer|between:2,50|unique:access_time_zones"},"schedule":{"type":"array","items":{"type":"array","items":{"type":"array","items":{"type":"string","format":"date"}}},"description":"array"},"holidays_closed":{"type":"boolean","description":"sometimes|boolean"},"branch_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|exists:branches,id"}},"required":["name","device_tz_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/access/time-zones/{zone}":{"put":{"tags":["access"],"operationId":"app_access_time_zones_update","summary":"PUT /api/v1/app/companies/{company}/access/time-zones/{zone}","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"zone","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"device_tz_id":{"type":"integer","description":"required|integer|between:2,50|unique:access_time_zones"},"schedule":{"type":"array","items":{"type":"array","items":{"type":"array","items":{"type":"string","format":"date"}}},"description":"array"},"holidays_closed":{"type":"boolean","description":"sometimes|boolean"},"branch_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|exists:branches,id"}},"required":["name","device_tz_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/access/levels":{"get":{"tags":["access"],"operationId":"app_access_levels","summary":"GET /api/v1/app/companies/{company}/access/levels","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["access"],"operationId":"app_access_levels_store","summary":"POST /api/v1/app/companies/{company}/access/levels","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"access_time_zone_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:access_time_zones,id"},"doors":{"type":"array","items":{"type":"object","properties":{"device_id":{"type":"integer","description":"required|integer|exists:biometric_devices,id"},"door":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,8"}}},"description":"required|array|min:1|max:200"},"branch_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|exists:branches,id"}},"required":["name","doors"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/access/levels/{level}":{"put":{"tags":["access"],"operationId":"app_access_levels_update","summary":"PUT /api/v1/app/companies/{company}/access/levels/{level}","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"level","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"access_time_zone_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:access_time_zones,id"},"doors":{"type":"array","items":{"type":"object","properties":{"device_id":{"type":"integer","description":"required|integer|exists:biometric_devices,id"},"door":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,8"}}},"description":"required|array|min:1|max:200"},"branch_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|exists:branches,id"}},"required":["name","doors"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/access/assignments":{"get":{"tags":["access"],"operationId":"app_access_assignments","summary":"GET /api/v1/app/companies/{company}/access/assignments","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["access"],"operationId":"app_access_assignments_store","summary":"POST /api/v1/app/companies/{company}/access/assignments","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"access_level_id":{"type":"integer","nullable":true,"description":"nullable|required_unless:effect,deny|integer|exists:access_levels,id"},"target_type":{"type":"string","enum":["employee","group","department","branch","position","all","visitor"],"description":"required|in:employee,group,department,branch,position,all,visitor"},"effect":{"type":"string","enum":["allow","deny"],"description":"required|in:allow,deny"},"target_id":{"type":"integer","nullable":true,"description":"nullable|Rule::requiredIf(fn() => in_array($input['target_type'] ?? '', ['employee', 'gro...|integer"},"biometric_device_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:biometric_devices,id"},"visitor_name":{"type":"string","nullable":true,"description":"nullable|required_if:target_type,visitor|string|max:100"},"visitor_pin":{"type":"string","nullable":true,"description":"nullable|required_if:target_type,visitor|string|max:32|regex:/^[0-9]+$/"},"visitor_card":{"type":"string","nullable":true,"description":"nullable|string|max:32"},"starts_at":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"ends_at":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after:starts_at|required_if:target_type,visitor"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(255)"}},"required":["target_type","effect"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/access/assignments/{assignment}":{"put":{"tags":["access"],"operationId":"app_access_assignments_update","summary":"PUT /api/v1/app/companies/{company}/access/assignments/{assignment}","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"assignment","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"access_level_id":{"type":"integer","nullable":true,"description":"nullable|required_unless:effect,deny|integer|exists:access_levels,id"},"target_type":{"type":"string","enum":["employee","group","department","branch","position","all","visitor"],"description":"required|in:employee,group,department,branch,position,all,visitor"},"effect":{"type":"string","enum":["allow","deny"],"description":"required|in:allow,deny"},"target_id":{"type":"integer","nullable":true,"description":"nullable|Rule::requiredIf(fn() => in_array($input['target_type'] ?? '', ['employee', 'gro...|integer"},"biometric_device_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:biometric_devices,id"},"visitor_name":{"type":"string","nullable":true,"description":"nullable|required_if:target_type,visitor|string|max:100"},"visitor_pin":{"type":"string","nullable":true,"description":"nullable|required_if:target_type,visitor|string|max:32|regex:/^[0-9]+$/"},"visitor_card":{"type":"string","nullable":true,"description":"nullable|string|max:32"},"starts_at":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"ends_at":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after:starts_at|required_if:target_type,visitor"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(255)"}},"required":["target_type","effect"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/access/{kind}/{id}":{"delete":{"tags":["access"],"operationId":"app_access_destroy","summary":"DELETE /api/v1/app/companies/{company}/access/{kind}/{id}","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^time-zones|levels|assignments$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting":{"get":{"tags":["accounting"],"operationId":"app_accounting_index","summary":"GET /api/v1/app/companies/{company}/accounting","description":"Permission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting/{provider}":{"get":{"tags":["accounting"],"operationId":"app_accounting_show","summary":"GET /api/v1/app/companies/{company}/accounting/{provider}","description":"Permission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["accounting"],"operationId":"app_accounting_save","summary":"PUT /api/v1/app/companies/{company}/accounting/{provider}","description":"Permission: integrations.manage.*. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["accounting"],"operationId":"app_accounting_disconnect","summary":"DELETE /api/v1/app/companies/{company}/accounting/{provider}","description":"Permission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting/{provider}/test":{"post":{"tags":["accounting"],"operationId":"app_accounting_test","summary":"POST /api/v1/app/companies/{company}/accounting/{provider}/test","description":"Permission: integrations.manage.*. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting/{provider}/refresh":{"post":{"tags":["accounting"],"operationId":"app_accounting_refresh","summary":"POST /api/v1/app/companies/{company}/accounting/{provider}/refresh","description":"Permission: integrations.manage.*. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting/{provider}/catalog":{"get":{"tags":["accounting"],"operationId":"app_accounting_catalog","summary":"The ledger's accounts, analytics, partners and journals as last read.","description":"The ledger's accounts, analytics, partners and journals as last read.\n\nPermission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting/{provider}/oauth-url":{"get":{"tags":["accounting"],"operationId":"app_accounting_oauth_url","summary":"OAuth 2 (QuickBooks, Xero)","description":"OAuth 2 (QuickBooks, Xero): the consent link to open in a browser signed in to Mihnaro as the same person.\n\nPermission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting/{provider}/mappings":{"get":{"tags":["accounting"],"operationId":"app_accounting_mappings","summary":"GET /api/v1/app/companies/{company}/accounting/{provider}/mappings","description":"Permission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["accounting"],"operationId":"app_accounting_mappings_update","summary":"PUT items","description":"PUT items: [{type, local_key, external_id}]; auto_match: true maps accounts whose codes match.\n\nPermission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting/{provider}/preview":{"get":{"tags":["accounting"],"operationId":"app_accounting_preview","summary":"GET /api/v1/app/companies/{company}/accounting/{provider}/preview","description":"Permission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}},{"name":"run_id","in":"query","required":true,"schema":{"type":"integer"},"description":"required|integer"}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting/{provider}/post":{"post":{"tags":["accounting"],"operationId":"app_accounting_post","summary":"POST /api/v1/app/companies/{company}/accounting/{provider}/post","description":"Permission: integrations.manage.*. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"run_id":{"type":"integer","description":"required|integer"}},"required":["run_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting/{provider}/sync-employees":{"post":{"tags":["accounting"],"operationId":"app_accounting_sync","summary":"POST /api/v1/app/companies/{company}/accounting/{provider}/sync-employees","description":"Permission: integrations.manage.*. 10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_ids":{"type":"array","items":{"type":"integer"},"description":"sometimes|array"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting-postings":{"get":{"tags":["accounting-postings"],"operationId":"app_accounting_postings","summary":"GET /api/v1/app/companies/{company}/accounting-postings","description":"Permission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting-postings/{posting}":{"get":{"tags":["accounting-postings"],"operationId":"app_accounting_postings_show","summary":"GET /api/v1/app/companies/{company}/accounting-postings/{posting}","description":"Permission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"posting","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/accounting-postings/{posting}/{action}":{"post":{"tags":["accounting-postings"],"operationId":"app_accounting_postings_act","summary":"POST /api/v1/app/companies/{company}/accounting-postings/{posting}/{action}","description":"Permission: integrations.manage.*. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"posting","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","pattern":"^retry|reverse|repost$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":30,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/activity-log":{"get":{"tags":["activity-log"],"operationId":"app_activity_index","summary":"GET activity-log?tab=changes|requests|sign_ins plus the tab's filters","description":"GET activity-log?tab=changes|requests|sign_ins plus the tab's filters\n\nPermission: activity.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["activity.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/air-ticket-policies":{"get":{"tags":["air-ticket-policies"],"operationId":"app_payroll_air_ticket_policies","summary":"GET /api/v1/app/companies/{company}/air-ticket-policies","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["air-ticket-policies"],"operationId":"app_payroll_air_ticket_policies_store","summary":"POST /api/v1/app/companies/{company}/air-ticket-policies","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"apply_changes":{"type":"string","enum":["update","new"],"nullable":true,"description":"nullable|in:update,new"},"balance_date":{"type":"string","format":"date","nullable":true,"description":"required_if:apply_changes,new|nullable|date"},"name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"tickets":{"type":"number","description":"required|numeric|min:0|max:20"},"period_months":{"type":"integer","description":"required|integer|min:1|max:120"},"period_anchor":{"type":"string","enum":["hire","calendar"],"description":"required|in:hire,calendar"},"accrual":{"type":"string","enum":["period_start","monthly"],"description":"required|in:period_start,monthly"},"amount":{"type":"number","description":"required|numeric|min:0"},"family_members":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:20"},"eligible_after_months":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:120"},"applies_to":{"type":"string","enum":["all","assigned"],"description":"required|in:all,assigned"},"expire_option":{"type":"string","enum":["after","immediately","none"],"nullable":true,"description":"nullable|in:after,immediately,none"},"expire_after_months":{"type":"integer","nullable":true,"description":"required_if:expire_option,after|nullable|integer|min:1|max:120"},"distribution":{"type":"string","enum":["per_person","shared"],"nullable":true,"description":"nullable|in:per_person,shared"},"default_payroll":{"type":"string","enum":["in_payroll","off_cycle"],"nullable":true,"description":"nullable|in:in_payroll,off_cycle"},"default_request_type":{"type":"string","enum":["cash_out","ticket"],"nullable":true,"description":"nullable|in:cash_out,ticket"},"transaction_type_id":{"type":"string","nullable":true,"description":"nullable|exists:transaction_types,id"},"gl_identifier":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"clearance_account":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"setups":{"type":"array","items":{"type":"object","properties":{"position_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"nationalities":{"type":"string","nullable":true,"description":"nullable|string|max:500"},"years_from":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:60"},"years_to":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:60"},"amount":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"currency":{"type":"string","nullable":true,"description":"nullable|string|max:3"},"beneficiaries":{"type":"array","items":{"type":"object","properties":{"relation":{"type":"string","enum":["parent","spouse","child","sibling"],"nullable":true,"description":"nullable|in:parent,spouse,child,sibling"},"deduction":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100"}}},"nullable":true,"description":"nullable|array"}}},"nullable":true,"description":"nullable|array|max:30"}},"required":["name_en","tickets","period_months","period_anchor","accrual","amount","applies_to"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/air-ticket-policies/{policy}":{"get":{"tags":["air-ticket-policies"],"operationId":"app_payroll_air_ticket_policies_show","summary":"The policy and the employees in my payroll.manage scope it was given to, with their opening balance.","description":"The policy and the employees in my payroll.manage scope it was given to, with their opening balance.\n\nPermission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["air-ticket-policies"],"operationId":"app_payroll_air_ticket_policies_update","summary":"PUT /api/v1/app/companies/{company}/air-ticket-policies/{policy}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"apply_changes":{"type":"string","enum":["update","new"],"nullable":true,"description":"nullable|in:update,new"},"balance_date":{"type":"string","format":"date","nullable":true,"description":"required_if:apply_changes,new|nullable|date"},"name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"tickets":{"type":"number","description":"required|numeric|min:0|max:20"},"period_months":{"type":"integer","description":"required|integer|min:1|max:120"},"period_anchor":{"type":"string","enum":["hire","calendar"],"description":"required|in:hire,calendar"},"accrual":{"type":"string","enum":["period_start","monthly"],"description":"required|in:period_start,monthly"},"amount":{"type":"number","description":"required|numeric|min:0"},"family_members":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:20"},"eligible_after_months":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:120"},"applies_to":{"type":"string","enum":["all","assigned"],"description":"required|in:all,assigned"},"expire_option":{"type":"string","enum":["after","immediately","none"],"nullable":true,"description":"nullable|in:after,immediately,none"},"expire_after_months":{"type":"integer","nullable":true,"description":"required_if:expire_option,after|nullable|integer|min:1|max:120"},"distribution":{"type":"string","enum":["per_person","shared"],"nullable":true,"description":"nullable|in:per_person,shared"},"default_payroll":{"type":"string","enum":["in_payroll","off_cycle"],"nullable":true,"description":"nullable|in:in_payroll,off_cycle"},"default_request_type":{"type":"string","enum":["cash_out","ticket"],"nullable":true,"description":"nullable|in:cash_out,ticket"},"transaction_type_id":{"type":"string","nullable":true,"description":"nullable|exists:transaction_types,id"},"gl_identifier":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"clearance_account":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"setups":{"type":"array","items":{"type":"object","properties":{"position_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"nationalities":{"type":"string","nullable":true,"description":"nullable|string|max:500"},"years_from":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:60"},"years_to":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:60"},"amount":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"currency":{"type":"string","nullable":true,"description":"nullable|string|max:3"},"beneficiaries":{"type":"array","items":{"type":"object","properties":{"relation":{"type":"string","enum":["parent","spouse","child","sibling"],"nullable":true,"description":"nullable|in:parent,spouse,child,sibling"},"deduction":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100"}}},"nullable":true,"description":"nullable|array"}}},"nullable":true,"description":"nullable|array|max:30"}},"required":["name_en","tickets","period_months","period_anchor","accrual","amount","applies_to"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["air-ticket-policies"],"operationId":"app_payroll_air_ticket_policies_destroy","summary":"DELETE /api/v1/app/companies/{company}/air-ticket-policies/{policy}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/air-ticket-policies/{policy}/assign":{"post":{"tags":["air-ticket-policies"],"operationId":"app_payroll_air_ticket_policies_assign","summary":"scope all | selected (employee_ids[]), opening_balance.","description":"scope all | selected (employee_ids[]), opening_balance.\n\nPermission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"type":"string","enum":["all","selected"],"description":"required|in:all,selected"},"employee_ids":{"type":"array","items":{"type":"integer"},"description":"required_if:scope,selected|array"},"opening_balance":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:99"}},"required":["scope"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/air-ticket-policies/{policy}/employees/{employee}":{"delete":{"tags":["air-ticket-policies"],"operationId":"app_payroll_air_ticket_policies_unassign","summary":"DELETE /api/v1/app/companies/{company}/air-ticket-policies/{policy}/employees/{employee}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/air-tickets":{"get":{"tags":["air-tickets"],"operationId":"app_payroll_air_tickets","summary":"Transactions in my scope with the screen's filters (employee_id, policy, status, payment, payroll, request_status, fr\u2026","description":"Transactions in my scope with the screen's filters (employee_id, policy, status, payment, payroll, request_status, from, to, paid_from, paid_to, resident_id).\n\nPermission: payroll.air_tickets.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.air_tickets.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["air-tickets"],"operationId":"app_payroll_air_tickets_store","summary":"POST /api/v1/app/companies/{company}/air-tickets","description":"Permission: payroll.air_tickets.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.air_tickets.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"policy_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"slice":{"type":"integer","nullable":true,"description":"nullable|integer|min:0"},"tickets":{"type":"array","items":{"type":"object","properties":{"owner":{"type":"string","description":"required|string|max:20|distinct"},"count":{"type":"number","nullable":true,"description":"nullable|numeric|gt:0|max:50"},"amount":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"}}},"nullable":true,"description":"required_without:owners|nullable|array|min:1|max:20"},"owners":{"type":"array","items":{"type":"string"},"nullable":true,"description":"required_without:tickets|nullable|array|min:1"},"cash_out":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"amount":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"destination":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"travel_date":{"type":"string","format":"date","description":"required|date"},"return_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:travel_date"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}},"required":["employee_id","travel_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/air-tickets/balances":{"get":{"tags":["air-tickets"],"operationId":"app_payroll_air_tickets_balances","summary":"Every active employee's balance in my scope under each of their policies (policy filters one).","description":"Every active employee's balance in my scope under each of their policies (policy filters one).\n\nPermission: payroll.air_tickets.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.air_tickets.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/air-tickets/paid":{"post":{"tags":["air-tickets"],"operationId":"app_payroll_air_tickets_paid","summary":"ids[], paid_at, payment_reference","description":"ids[], paid_at, payment_reference: booked (not cash out) unpaid ones are marked.\n\nPermission: payroll.air_tickets.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.air_tickets.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1"},"paid_at":{"type":"string","format":"date","description":"required|date"},"payment_reference":{"type":"string","nullable":true,"description":"nullable|string|max:100"}},"required":["ids","paid_at"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/air-tickets/bulk-delete":{"post":{"tags":["air-tickets"],"operationId":"app_payroll_air_tickets_bulk_destroy","summary":"ids[]","description":"ids[]: the unpaid ones are deleted; returns how many.\n\nPermission: payroll.air_tickets.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.air_tickets.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer"},"description":"required|array"}},"required":["ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/air-tickets/{transaction}":{"delete":{"tags":["air-tickets"],"operationId":"app_payroll_air_tickets_destroy","summary":"DELETE /api/v1/app/companies/{company}/air-tickets/{transaction}","description":"Permission: payroll.air_tickets.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"transaction","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.air_tickets.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/announcements":{"get":{"tags":["announcements"],"operationId":"app_announcements_index","summary":"q","description":"q: search; show; per_page. Only those the person may read (their targets; all with announcements.manage).\n\nPermission: self.announcements or announcements.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.announcements","announcements.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["announcements"],"operationId":"app_announcements_store","summary":"title {en, ar}, body {en, ar}, pinned, starts_on, expires_on, gallery, attachments, targets (Announcements::save).","description":"title {en, ar}, body {en, ar}, pinned, starts_on, expires_on, gallery, attachments, targets (Announcements::save). The people it is for are notified.\n\nPermission: announcements.create. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["announcements.create"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(200)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(200)"}}},"body":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(200000)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(200000)"}}},"starts_on":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"expires_on":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:starts_on"}},"required":["title","body"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/announcements/{announcement}":{"get":{"tags":["announcements"],"operationId":"app_announcements_show","summary":"GET /api/v1/app/companies/{company}/announcements/{announcement}","description":"Permission: self.announcements or announcements.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"announcement","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.announcements","announcements.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["announcements"],"operationId":"app_announcements_update_patch","summary":"PATCH /api/v1/app/companies/{company}/announcements/{announcement}","description":"Permission: announcements.edit. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"announcement","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["announcements.edit"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["announcements"],"operationId":"app_announcements_update_put","summary":"PUT /api/v1/app/companies/{company}/announcements/{announcement}","description":"Permission: announcements.edit. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"announcement","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["announcements.edit"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["announcements"],"operationId":"app_announcements_destroy","summary":"DELETE /api/v1/app/companies/{company}/announcements/{announcement}","description":"Permission: announcements.delete. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"announcement","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["announcements.delete"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/announcements/{announcement}/read":{"post":{"tags":["announcements"],"operationId":"app_announcements_read","summary":"Marks one the person may read as read (their bell notice of it), as opening it on the screen does.","description":"Marks one the person may read as read (their bell notice of it), as opening it on the screen does.\n\nPermission: self.announcements or announcements.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"announcement","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.announcements","announcements.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/announcements/images/{file}":{"get":{"tags":["announcements"],"operationId":"app_announcements_image","summary":"A picture of the company's announcements (their text and galleries).","description":"A picture of the company's announcements (their text and galleries).\n\nPermission: self.announcements or announcements.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"file","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]+\\.(png|jpe?g|gif|webp)$"}}],"x-permissions":["self.announcements","announcements.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/announcements/{announcement}/attachments/{index}":{"get":{"tags":["announcements"],"operationId":"app_announcements_attachment","summary":"An attached file of an announcement the person may read (copied from ZenHR or added in Mihnaro).","description":"An attached file of an announcement the person may read (copied from ZenHR or added in Mihnaro).\n\nPermission: self.announcements or announcements.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"announcement","in":"path","required":true,"schema":{"type":"integer"}},{"name":"index","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.announcements","announcements.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/announcements/media":{"post":{"tags":["announcements"],"operationId":"app_announcements_media","summary":"Multipart","description":"Multipart: file, kind (image: for the text or the gallery; file: an attachment). Returns the file to save with.\n\nPermission: announcements.create or announcements.edit. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["announcements.create","announcements.edit"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/api-keys":{"get":{"tags":["api-keys"],"operationId":"app_api_keys_index","summary":"GET /api/v1/app/companies/{company}/api-keys","description":"Permission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["api-keys"],"operationId":"app_api_keys_store","summary":"POST api-keys","description":"POST api-keys: the token is in the answer this once.\n\nPermission: integrations.api_keys.manage. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":20,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"$req|string|max:100"},"abilities":{"type":"array","items":{"type":"string","enum":["read","write","update","delete"]},"description":"$req|array|min:1"},"ip_addresses":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:1000"},"expires_on":{"type":"string","format":"date","nullable":true,"description":"sometimes|nullable|date|after:today"},"user_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer"},"auth_type":{"type":"string","enum":["basic","oauth1","oauth2","credentials"],"description":"sometimes|in:basic,oauth1,oauth2,credentials"},"consumer_key":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"consumer_secret":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:500"},"realm":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"client_id":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"client_secret":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:500"},"username":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"password":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:500"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/api-keys/{apiKey}":{"patch":{"tags":["api-keys"],"operationId":"app_api_keys_update_patch","summary":"PATCH /api/v1/app/companies/{company}/api-keys/{apiKey}","description":"Permission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"apiKey","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"$req|string|max:100"},"abilities":{"type":"array","items":{"type":"string","enum":["read","write","update","delete"]},"description":"$req|array|min:1"},"ip_addresses":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:1000"},"expires_on":{"type":"string","format":"date","nullable":true,"description":"sometimes|nullable|date|after:today"},"user_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer"},"auth_type":{"type":"string","enum":["basic","oauth1","oauth2","credentials"],"description":"sometimes|in:basic,oauth1,oauth2,credentials"},"consumer_key":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"consumer_secret":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:500"},"realm":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"client_id":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"client_secret":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:500"},"username":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"password":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:500"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["api-keys"],"operationId":"app_api_keys_update_put","summary":"PUT /api/v1/app/companies/{company}/api-keys/{apiKey}","description":"Permission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"apiKey","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"$req|string|max:100"},"abilities":{"type":"array","items":{"type":"string","enum":["read","write","update","delete"]},"description":"$req|array|min:1"},"ip_addresses":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:1000"},"expires_on":{"type":"string","format":"date","nullable":true,"description":"sometimes|nullable|date|after:today"},"user_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer"},"auth_type":{"type":"string","enum":["basic","oauth1","oauth2","credentials"],"description":"sometimes|in:basic,oauth1,oauth2,credentials"},"consumer_key":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"consumer_secret":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:500"},"realm":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"client_id":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"client_secret":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:500"},"username":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"password":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:500"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/api-keys/{apiKey}/revoke":{"post":{"tags":["api-keys"],"operationId":"app_api_keys_revoke","summary":"POST /api/v1/app/companies/{company}/api-keys/{apiKey}/revoke","description":"Permission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"apiKey","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/app-activity":{"get":{"tags":["app-activity"],"operationId":"app_app_activity_index","summary":"GET app-activity","description":"GET app-activity: the sign-in activity of the people in the app_devices.view scope (filters: user_id, install_id, device_id, event, result, from, to).\n\nPermission: app_devices.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["app_devices.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/app-devices":{"get":{"tags":["app-devices"],"operationId":"app_app_devices_index","summary":"GET app-devices","description":"GET app-devices: the phones of the people in the app_devices.view scope, with the summary (docs/platform-control.md).\n\nPermission: app_devices.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["app_devices.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/app-devices/people/{user}":{"get":{"tags":["app-devices"],"operationId":"app_app_devices_person","summary":"GET app-devices/people/{user}","description":"GET app-devices/people/{user}: one person's phones with their IPs and timelines (the person themselves, or app_devices.view in scope).\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"user","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/app-devices/people/{user}/context":{"get":{"tags":["app-devices"],"operationId":"app_app_devices_person_context","summary":"GET app-devices/people/{user}/context (app_devices.context, docs/platform-control.md \u00ab\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0647\u0627\u062a\u0641\u00bb)","description":"GET app-devices/people/{user}/context (app_devices.context, docs/platform-control.md \u00ab\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0647\u0627\u062a\u0641\u00bb): the phone details this company's switches collected for a person in scope, latest per phone and the history.\n\nPermission: app_devices.context. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"user","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["app_devices.context"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/app-devices/phones/{install}/test-push":{"post":{"tags":["app-devices"],"operationId":"app_app_devices_test_push","summary":"POST app-devices/phones/{install}/test-push (app_devices.test_push, docs/notifications.md \u00ab\u0627\u0644\u0625\u0634\u0639\u0627\u0631 \u0627\u0644\u062a\u062c\u0631\u064a\u0628\u064a\u00bb)","description":"POST app-devices/phones/{install}/test-push (app_devices.test_push, docs/notifications.md \u00ab\u0627\u0644\u0625\u0634\u0639\u0627\u0631 \u0627\u0644\u062a\u062c\u0631\u064a\u0628\u064a\u00bb): what Apple or Google answered.\n\nPermission: app_devices.test_push. 10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"install","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["app_devices.test_push"],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/app-devices/shared":{"get":{"tags":["app-devices"],"operationId":"app_app_devices_shared","summary":"GET app-devices/shared","description":"GET app-devices/shared: the phones in scope used by more than one account (the fleet filters too).\n\nPermission: app_devices.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["app_devices.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/app-devices/allowances":{"get":{"tags":["app-devices"],"operationId":"app_app_devices_allowances_index","summary":"GET app-devices/allowances (?phone_key=, ?active=1)","description":"GET app-devices/allowances (?phone_key=, ?active=1): HR's exceptions for the people in scope.\n\nPermission: app_devices.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["app_devices.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["app-devices"],"operationId":"app_app_devices_allowances_store","summary":"POST app-devices/allowances","description":"POST app-devices/allowances: user_id, install_id (or phone_key), reason.\n\nPermission: app_devices.allow_shared. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["app_devices.allow_shared"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"user_id":{"type":"integer","description":"required|integer"},"install_id":{"type":"integer","nullable":true,"description":"nullable|integer|required_without:phone_key"},"phone_key":{"type":"string","nullable":true,"description":"nullable|string|max:140|required_without:install_id"},"reason":{"type":"string","description":"required|string|min:3|'max:' . \\App\\Support\\Limits::chars(500)"}},"required":["user_id","reason"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/app-devices/allowances/{allowance}":{"delete":{"tags":["app-devices"],"operationId":"app_app_devices_allowances_destroy","summary":"DELETE app-devices/allowances/{id}","description":"DELETE app-devices/allowances/{id}: takes the exception back.\n\nPermission: app_devices.allow_shared. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"allowance","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["app_devices.allow_shared"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/app-devices/not-on-app":{"get":{"tags":["app-devices"],"operationId":"app_app_devices_not_on_app","summary":"GET app-devices/not-on-app","description":"GET app-devices/not-on-app: q, branch_id, account (yes|no); page, per_page.\n\nPermission: app_devices.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["app_devices.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/app-devices/reminders":{"post":{"tags":["app-devices"],"operationId":"app_app_devices_reminders","summary":"POST app-devices/reminders","description":"POST app-devices/reminders: channel (email|whatsapp), employee_ids[] or all=true (with filters {q, branch_id, account}).\n\nPermission: app_devices.remind. 10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["app_devices.remind"],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"channel":{"type":"string","enum":["email","whatsapp"],"description":"required|in:email,whatsapp"},"all":{"type":"boolean","description":"sometimes|boolean"},"employee_ids":{"type":"array","items":{"type":"integer"},"description":"required_without:all|array|max:500"},"filters":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"sometimes|array"},"q":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},"branch_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"account":{"type":"string","enum":["yes","no"],"nullable":true,"description":"nullable|in:yes,no"}},"required":["channel"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/app-policy":{"get":{"tags":["app-policy"],"operationId":"app_app_policy","summary":"Every mobile app rule for the signed-in employee","description":"Every mobile app rule for the signed-in employee: {live_location, app_lock, punch_auth} (docs/live-location.md).\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/app-policy/screen-captures/{kind}":{"post":{"tags":["app-policy"],"operationId":"app_app_policy_screen_captures","summary":"The app saw a screenshot (iOS can't stop one, only black it out) or a screen recording start while it blocks them.","description":"The app saw a screenshot (iOS can't stop one, only black it out) or a screen recording start while it blocks them. Nothing is stored here: the activity log keeps the request (route app-policy.screen-captures, the kind in the path).\n\nModule: hrm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^screenshot|recording$"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":30,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/approval-chains":{"put":{"tags":["approval-chains"],"operationId":"app_approvals_chains","summary":"chain_<kind> per kind","description":"chain_<kind> per kind: a CHAINS value, \"tpl:<id>\", or \"none\" (salary batches).\n\nPermission: approval_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["approval_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/approval-setup":{"get":{"tags":["approval-setup"],"operationId":"app_approvals_setup","summary":"Approval chains of each request kind ('' = the kind's default), and the approval templates.","description":"Approval chains of each request kind ('' = the kind's default), and the approval templates.\n\nPermission: approval_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["approval_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/approval-setup/approvers":{"get":{"tags":["approval-setup"],"operationId":"app_approvals_approvers","summary":"GET approval-setup/approvers","description":"GET approval-setup/approvers: who \"Approved By\" can name for a template (template_id) or a new one, from its own branch only.\n\nPermission: approval_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["approval_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/approval-templates":{"post":{"tags":["approval-templates"],"operationId":"app_approvals_templates_store","summary":"POST /api/v1/app/companies/{company}/approval-templates","description":"Permission: approval_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["approval_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"object_type":{"type":"string","enum":["leave","transaction","overtime","general","air_ticket","payroll_batch","in_advance_salary","loan","salary_adjustment","missing_punch","business_trip","suspension","expense","vacation_resumption","vacation_encashment","hr_letter","timesheet"],"nullable":true,"description":"nullable|in:leave,transaction,overtime,general,air_ticket,payroll_batch,in_advance_salary,loan,salary_adjustment,missing_punch,business_trip,suspension,expense,vacation_resumption,vacation_encashment,hr_letter,timesheet"},"object_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"assign":{"type":"array","items":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true},"nullable":true,"description":"nullable|array"},"steps":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"required|string"},"members":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"}}},"description":"required|array|min:1|max:8"},"skip_after":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:720"},"skip_after_unit":{"type":"string","enum":["days","hours"],"nullable":true,"description":"nullable|in:days,hours"},"notify_user_ids":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"},"overrider_ids":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"}},"required":["name","steps"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/approval-templates/{template}":{"patch":{"tags":["approval-templates"],"operationId":"app_approvals_templates_update_patch","summary":"PATCH /api/v1/app/companies/{company}/approval-templates/{template}","description":"Permission: approval_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["approval_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["approval-templates"],"operationId":"app_approvals_templates_update_put","summary":"PUT /api/v1/app/companies/{company}/approval-templates/{template}","description":"Permission: approval_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["approval_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["approval-templates"],"operationId":"app_approvals_templates_destroy","summary":"DELETE /api/v1/app/companies/{company}/approval-templates/{template}","description":"Permission: approval_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["approval_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/approvals":{"get":{"tags":["approvals"],"operationId":"app_approvals_index","summary":"The approvals page","description":"The approvals page: tab (approvals, my, team, override), status, type. Leave requests and employee requests together.\n\nPermission: self.approvals.decide or requests.view or requests.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"tab","in":"query","required":false,"schema":{"type":"string","nullable":true},"description":"nullable|'in:' . implode(',', $tabs)"},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["all","pending","approved","rejected","withdrawn","cancelled"],"nullable":true},"description":"nullable|in:all,pending,approved,rejected,withdrawn,cancelled"},{"name":"type","in":"query","required":false,"schema":{"type":"string","nullable":true},"description":"nullable|string"},{"name":"my_action","in":"query","required":false,"schema":{"type":"string","enum":["waiting","pending","approved","rejected","withdrawn","approved_non_deduct","added_by_hr","delegated","skipped","cancelled","cancel_requested","none"],"nullable":true},"description":"nullable|in:waiting,pending,approved,rejected,withdrawn,approved_non_deduct,added_by_hr,delegated,skipped,cancelled,cancel_requested,none"},{"name":"f","in":"query","required":false,"schema":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true},"description":"nullable|array"},{"name":"action_type","in":"query","required":false,"schema":{"type":"string","enum":["approval","cancellation"],"nullable":true},"description":"nullable|in:approval,cancellation"},{"name":"employee","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["employee","serial","requested","received","my_action"],"nullable":true},"description":"nullable|in:employee,serial,requested,received,my_action"},{"name":"dir","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"nullable":true},"description":"nullable|in:asc,desc"}],"x-permissions":["self.approvals.decide","requests.view","requests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/approvals/override":{"post":{"tags":["approvals"],"operationId":"app_approvals_override","summary":"Override approvals","description":"Override approvals: decide a request waiting on someone else. item is \"leave:ID\" or \"request:ID\".\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"item":{"type":"string","description":"required|string|regex:/^(leave|request):\\d+$/"},"decision":{"type":"string","enum":["approved","rejected"],"description":"required|in:approved,rejected"},"decision_note":{"type":"string","nullable":true,"description":"nullable|string|max:500"}},"required":["item","decision"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/approvals/bulk":{"post":{"tags":["approvals"],"operationId":"app_approvals_bulk","summary":"Approve or reject several items; the ones that can't be decided are skipped.","description":"Approve or reject several items; the ones that can't be decided are skipped.\n\nPermission: self.approvals.decide or requests.view or requests.manage. Module: hrm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.approvals.decide","requests.view","requests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":30,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"string"},"description":"required|array|min:1|max:200"},"decision":{"type":"string","enum":["approved","rejected"],"description":"required|in:approved,rejected"},"decision_note":{"type":"string","nullable":true,"description":"nullable|string|max:500"}},"required":["items","decision"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/approvals/delegations":{"get":{"tags":["approvals"],"operationId":"app_approvals_delegations","summary":"Approval delegations I gave or received (ZenHR's \"Delegated\").","description":"Approval delegations I gave or received (ZenHR's \"Delegated\").\n\nPermission: self.approvals.delegate or requests.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.approvals.delegate","requests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["approvals"],"operationId":"app_approvals_delegate","summary":"Delegate my approvals","description":"Delegate my approvals: delegate_id (a user of the company), starts_on, ends_on (empty = until ended), note.\n\nPermission: self.approvals.delegate or requests.manage. Module: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.approvals.delegate","requests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"delegate_id":{"type":"integer","description":"required|integer|Rule::notIn([$user->id])|exists:company_user,user_id"},"starts_on":{"type":"string","format":"date","description":"required|date"},"ends_on":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:starts_on"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(300)"}},"required":["delegate_id","starts_on"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/approvals/delegations/{delegation}":{"delete":{"tags":["approvals"],"operationId":"app_approvals_undelegate","summary":"DELETE /api/v1/app/companies/{company}/approvals/delegations/{delegation}","description":"Permission: self.approvals.delegate or requests.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"delegation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.approvals.delegate","requests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/summary":{"get":{"tags":["assessments"],"operationId":"app_assessments_summary","summary":"GET /api/v1/app/companies/{company}/assessments/summary","description":"Permission: assessments.manage.* or assessments.grade. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.grade"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/grading":{"get":{"tags":["assessments"],"operationId":"app_assessments_grading","summary":"Attempts waiting for a person, with the answers to grade.","description":"Attempts waiting for a person, with the answers to grade.\n\nPermission: assessments.manage.* or assessments.grade. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.grade"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/attempts/{attempt}":{"get":{"tags":["assessments"],"operationId":"app_assessments_attempts_show","summary":"An attempt with every answer, the right ones and the anti-cheating log.","description":"An attempt with every answer, the right ones and the anti-cheating log.\n\nPermission: assessments.manage.* or assessments.grade. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"attempt","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.grade"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/answers/{answer}/grade":{"post":{"tags":["assessments"],"operationId":"app_assessments_answers_grade","summary":"points (0 to the question's points), note; reason when changing a grade already given (an automatic one too).","description":"points (0 to the question's points), note; reason when changing a grade already given (an automatic one too).\n\nPermission: assessments.manage.* or assessments.grade. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"answer","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.grade"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"points":{"type":"number","description":"required|numeric|min:0|'max:' . $max"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"reason":{"type":"string","nullable":true,"description":"Rule::requiredIf($changing)|nullable|string|min:3|'max:' . \\App\\Support\\Limits::chars(500)"}},"required":["points"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/answers/{answer}/media":{"get":{"tags":["assessments"],"operationId":"app_assessments_answers_media","summary":"GET /api/v1/app/companies/{company}/assessments/answers/{answer}/media","description":"Permission: assessments.manage.* or assessments.grade. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"answer","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.grade"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/tests/{test}/results":{"get":{"tags":["assessments"],"operationId":"app_assessments_tests_results","summary":"Every attempt with its score and checks, and how each question did.","description":"Every attempt with its score and checks, and how each question did.\n\nPermission: assessments.manage.* or assessments.grade. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"test","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.grade"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/tests/{test}/export":{"get":{"tags":["assessments"],"operationId":"app_assessments_tests_export","summary":"GET /api/v1/app/companies/{company}/assessments/tests/{test}/export","description":"Permission: assessments.manage.* or assessments.grade. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"test","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.grade"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/invitations":{"get":{"tags":["assessments"],"operationId":"app_assessments_invitations_index","summary":"Filters","description":"Filters: test, status, candidate, employee.\n\nPermission: assessments.manage.* or assessments.grade. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.grade"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/templates":{"get":{"tags":["assessments"],"operationId":"app_assessments_templates","summary":"GET /api/v1/app/companies/{company}/assessments/templates","description":"Permission: assessments.manage.* or assessments.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/templates/{key}":{"post":{"tags":["assessments"],"operationId":"app_assessments_templates_install","summary":"POST /api/v1/app/companies/{company}/assessments/templates/{key}","description":"Permission: assessments.manage.* or assessments.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"key","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":["assessments.manage.*","assessments.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/categories":{"get":{"tags":["assessments"],"operationId":"app_assessments_categories_index","summary":"GET /api/v1/app/companies/{company}/assessments/categories","description":"Permission: assessments.manage.* or assessments.questions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.questions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["assessments"],"operationId":"app_assessments_categories_store","summary":"name {en, ar}, description {en, ar}, competency_id.","description":"name {en, ar}, description {en, ar}, competency_id.\n\nPermission: assessments.manage.* or assessments.questions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.questions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(120)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(120)"}}},"description":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"}}},"competency_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:competencies,id"}},"required":["name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/categories/{category}":{"patch":{"tags":["assessments"],"operationId":"app_assessments_categories_update_patch","summary":"PATCH /api/v1/app/companies/{company}/assessments/categories/{category}","description":"Permission: assessments.manage.* or assessments.questions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"category","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.questions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["assessments"],"operationId":"app_assessments_categories_update_put","summary":"PUT /api/v1/app/companies/{company}/assessments/categories/{category}","description":"Permission: assessments.manage.* or assessments.questions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"category","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.questions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["assessments"],"operationId":"app_assessments_categories_destroy","summary":"DELETE /api/v1/app/companies/{company}/assessments/categories/{category}","description":"Permission: assessments.manage.* or assessments.questions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"category","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.questions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/questions":{"get":{"tags":["assessments"],"operationId":"app_assessments_questions_index","summary":"Filters","description":"Filters: category, type, difficulty, active, q.\n\nPermission: assessments.manage.* or assessments.questions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.questions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["assessments"],"operationId":"app_assessments_questions_store","summary":"type, assessment_category_id, difficulty, prompt {en, ar}, options [{key?, text {en, ar}}], targets, answer, points, \u2026","description":"type, assessment_category_id, difficulty, prompt {en, ar}, options [{key?, text {en, ar}}], targets, answer, points, time_limit_seconds, explanation, is_active.\n\nPermission: assessments.manage.* or assessments.questions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.questions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["single","multiple","true_false","short_text","long_text","ordering","matching","numeric","file_upload"],"description":"required|in:single,multiple,true_false,short_text,long_text,ordering,matching,numeric,file_upload"},"assessment_category_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:assessment_categories,id"},"difficulty":{"type":"string","enum":["easy","medium","hard"],"description":"required|in:easy,medium,hard"},"prompt":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(5000)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(5000)"}}},"explanation":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"}}},"points":{"type":"number","description":"required|numeric|min:0.25|max:100"},"time_limit_seconds":{"type":"integer","nullable":true,"description":"nullable|integer|between:10,3600"},"is_active":{"type":"boolean","description":"sometimes|boolean"},"options":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","nullable":true,"description":"nullable|string|max:20"},"text":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(500)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}}}}},"nullable":true,"description":"Rule::requiredIf(in_array($type, ['single', 'multiple', 'ordering', 'matching'],...|nullable|array|max:12"},"targets":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","nullable":true,"description":"nullable|string|max:20"},"text":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(500)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}}}}},"nullable":true,"description":"Rule::requiredIf($type === 'matching')|nullable|array|max:12"},"answer":{"type":"string","nullable":true,"description":"nullable"},"correct":{"type":"string","nullable":true,"description":"nullable"},"remove_media":{"type":"boolean","nullable":true,"description":"nullable|boolean"}},"required":["type","difficulty","prompt","points"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/questions/{question}":{"get":{"tags":["assessments"],"operationId":"app_assessments_questions_show","summary":"GET /api/v1/app/companies/{company}/assessments/questions/{question}","description":"Permission: assessments.manage.* or assessments.questions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"question","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.questions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["assessments"],"operationId":"app_assessments_questions_update_patch","summary":"PATCH /api/v1/app/companies/{company}/assessments/questions/{question}","description":"Permission: assessments.manage.* or assessments.questions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"question","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.questions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["assessments"],"operationId":"app_assessments_questions_update_put","summary":"PUT /api/v1/app/companies/{company}/assessments/questions/{question}","description":"Permission: assessments.manage.* or assessments.questions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"question","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.questions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["assessments"],"operationId":"app_assessments_questions_destroy","summary":"DELETE /api/v1/app/companies/{company}/assessments/questions/{question}","description":"Permission: assessments.manage.* or assessments.questions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"question","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.questions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/questions/{question}/media":{"get":{"tags":["assessments"],"operationId":"app_assessments_questions_media","summary":"GET /api/v1/app/companies/{company}/assessments/questions/{question}/media","description":"Permission: assessments.manage.* or assessments.questions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"question","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.questions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/tests":{"get":{"tags":["assessments"],"operationId":"app_assessments_tests_index","summary":"Filters","description":"Filters: status, purpose, q.\n\nPermission: assessments.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["assessments"],"operationId":"app_assessments_tests_store","summary":"title, description, instructions ({en, ar}), purpose, time_limit_minutes, shuffle_questions, shuffle_options, attempt\u2026","description":"title, description, instructions ({en, ar}), purpose, time_limit_minutes, shuffle_questions, shuffle_options, attempts_allowed, pass_mark, negative_marking, negative_ratio, show_score, competency_id, pass_stage, fail_stage, status, items.\n\nPermission: assessments.manage.* or assessments.tests.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.tests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"description":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"}}},"instructions":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(3000)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(3000)"}}},"purpose":{"type":"string","enum":["pre_employment","post_employment"],"description":"required|in:pre_employment,post_employment"},"time_limit_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:1,480"},"shuffle_questions":{"type":"boolean","description":"boolean"},"shuffle_options":{"type":"boolean","description":"boolean"},"negative_marking":{"type":"boolean","description":"boolean"},"show_score":{"type":"boolean","description":"boolean"},"attempts_allowed":{"type":"integer","description":"required|integer|between:1,10"},"pass_mark":{"type":"number","description":"required|numeric|between:0,100"},"negative_ratio":{"type":"number","nullable":true,"description":"nullable|numeric|between:0,1"},"competency_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:competencies,id"},"pass_stage":{"type":"string","nullable":true,"description":"nullable|Rule::in($stages)"},"fail_stage":{"type":"string","nullable":true,"description":"nullable|Rule::in($stages)"},"status":{"type":"string","enum":["draft","active","archived"],"description":"required|in:draft,active,archived"},"items":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["question","random"],"description":"required|in:question,random"},"assessment_question_id":{"type":"integer","nullable":true,"description":"required_if:items.*.kind,question|nullable|integer|exists:assessment_questions,id"},"assessment_category_id":{"type":"integer","nullable":true,"description":"required_if:items.*.kind,random|nullable|integer|exists:assessment_categories,id"},"difficulty":{"type":"string","enum":["easy","medium","hard"],"nullable":true,"description":"nullable|in:easy,medium,hard"},"draw_count":{"type":"integer","nullable":true,"description":"required_if:items.*.kind,random|nullable|integer|between:1,100"}}},"nullable":true,"description":"nullable|array|max:200"}},"required":["title","purpose","attempts_allowed","pass_mark","status"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/tests/{test}":{"get":{"tags":["assessments"],"operationId":"app_assessments_tests_show","summary":"A test with its items.","description":"A test with its items.\n\nPermission: assessments.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"test","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["assessments"],"operationId":"app_assessments_tests_update_patch","summary":"PATCH /api/v1/app/companies/{company}/assessments/tests/{test}","description":"Permission: assessments.manage.* or assessments.tests.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"test","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.tests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["assessments"],"operationId":"app_assessments_tests_update_put","summary":"PUT /api/v1/app/companies/{company}/assessments/tests/{test}","description":"Permission: assessments.manage.* or assessments.tests.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"test","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.tests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["assessments"],"operationId":"app_assessments_tests_destroy","summary":"DELETE /api/v1/app/companies/{company}/assessments/tests/{test}","description":"Permission: assessments.manage.* or assessments.tests.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"test","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.tests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/tests/{test}/invitations":{"post":{"tags":["assessments"],"operationId":"app_assessments_invitations_store","summary":"candidate_ids, employee_ids, expires_at, locale.","description":"candidate_ids, employee_ids, expires_at, locale. The candidates' links are in the answer.\n\nPermission: assessments.manage.* or assessments.invite. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"test","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.invite"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"candidate_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array|max:200"},"employee_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array|max:500"},"expires_at":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after:now"},"locale":{"type":"string","enum":["en","ar"],"nullable":true,"description":"nullable|in:en,ar"},"pass_stage":{"type":"string","nullable":true,"description":"nullable|Rule::in(array_diff(\\App\\Models\\Candidate::STAGES, ['hired']))"},"fail_stage":{"type":"string","nullable":true,"description":"nullable|Rule::in(array_diff(\\App\\Models\\Candidate::STAGES, ['hired']))"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/invitations/{invitation}/cancel":{"post":{"tags":["assessments"],"operationId":"app_assessments_invitations_cancel","summary":"POST /api/v1/app/companies/{company}/assessments/invitations/{invitation}/cancel","description":"Permission: assessments.manage.* or assessments.invite. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"invitation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.invite"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assessments/invitations/{invitation}/resend":{"post":{"tags":["assessments"],"operationId":"app_assessments_invitations_resend","summary":"expires_at (optional; required when the link has expired).","description":"expires_at (optional; required when the link has expired). sent and reason (sandbox, mail_off, employees_held, no_email, failed) say what happened.\n\nPermission: assessments.manage.* or assessments.invite. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"invitation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assessments.manage.*","assessments.invite"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"expires_at":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after:now"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/asset-types":{"get":{"tags":["asset-types"],"operationId":"app_asset_types_index","summary":"GET /api/v1/app/companies/{company}/asset-types","description":"Permission: assets.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["asset-types"],"operationId":"app_asset_types_store","summary":"name {en, ar}, branch_ids (ids, or [\"all\"]), active.","description":"name {en, ar}, branch_ids (ids, or [\"all\"]), active.\n\nPermission: assets.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"branch_ids":{"type":"array","items":{"type":"string"},"description":"required|array|min:1"}},"required":["name","branch_ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/asset-types/{assetType}":{"patch":{"tags":["asset-types"],"operationId":"app_asset_types_update_patch","summary":"PATCH /api/v1/app/companies/{company}/asset-types/{assetType}","description":"Permission: assets.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"assetType","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"branch_ids":{"type":"array","items":{"type":"string"},"description":"required|array|min:1"}},"required":["name","branch_ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["asset-types"],"operationId":"app_asset_types_update_put","summary":"PUT /api/v1/app/companies/{company}/asset-types/{assetType}","description":"Permission: assets.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"assetType","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"branch_ids":{"type":"array","items":{"type":"string"},"description":"required|array|min:1"}},"required":["name","branch_ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["asset-types"],"operationId":"app_asset_types_destroy","summary":"DELETE /api/v1/app/companies/{company}/asset-types/{assetType}","description":"Permission: assets.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"assetType","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assets":{"get":{"tags":["assets"],"operationId":"app_assets_index","summary":"The list","description":"The list: status, type, owner (branch id or none), holder, expiry_from, expiry_to, q.\n\nPermission: assets.manage or assets.create or assets.edit or assets.delete or assets.assign or assets.status. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.manage","assets.create","assets.edit","assets.delete","assets.assign","assets.status"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["assets"],"operationId":"app_assets_store","summary":"POST /api/v1/app/companies/{company}/assets","description":"Permission: assets.create. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.create"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"asset_type_id":{"type":"integer","description":"required|integer|exists:asset_types,id"},"name":{"type":"string","description":"required|string|max:150"},"serial_number":{"type":"string","description":"required|string|max:100|unique:assets,serial_number"},"owner_branch_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:branches,id"},"purchase_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|before_or_equal:today"},"value":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"},"owner":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"production_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"expiry_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:production_date"},"attachments":{"type":"array","items":{"type":"string","format":"binary"},"nullable":true,"description":"nullable|array|max:10"}},"required":["asset_type_id","name","serial_number"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assets/{asset}":{"get":{"tags":["assets"],"operationId":"app_assets_show","summary":"An asset and its history.","description":"An asset and its history.\n\nPermission: assets.manage or assets.create or assets.edit or assets.delete or assets.assign or assets.status. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"asset","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.manage","assets.create","assets.edit","assets.delete","assets.assign","assets.status"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["assets"],"operationId":"app_assets_update_patch","summary":"PATCH /api/v1/app/companies/{company}/assets/{asset}","description":"Permission: assets.edit. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"asset","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.edit"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"asset_type_id":{"type":"integer","description":"required|integer|exists:asset_types,id"},"name":{"type":"string","description":"required|string|max:150"},"serial_number":{"type":"string","description":"required|string|max:100|unique:assets,serial_number"},"owner_branch_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:branches,id"},"purchase_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|before_or_equal:today"},"value":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"},"owner":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"production_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"expiry_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:production_date"},"attachments":{"type":"array","items":{"type":"string","format":"binary"},"nullable":true,"description":"nullable|array|max:10"}},"required":["asset_type_id","name","serial_number"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["assets"],"operationId":"app_assets_update_put","summary":"PUT /api/v1/app/companies/{company}/assets/{asset}","description":"Permission: assets.edit. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"asset","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.edit"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"asset_type_id":{"type":"integer","description":"required|integer|exists:asset_types,id"},"name":{"type":"string","description":"required|string|max:150"},"serial_number":{"type":"string","description":"required|string|max:100|unique:assets,serial_number"},"owner_branch_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:branches,id"},"purchase_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|before_or_equal:today"},"value":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"},"owner":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"production_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"expiry_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:production_date"},"attachments":{"type":"array","items":{"type":"string","format":"binary"},"nullable":true,"description":"nullable|array|max:10"}},"required":["asset_type_id","name","serial_number"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["assets"],"operationId":"app_assets_destroy","summary":"DELETE /api/v1/app/companies/{company}/assets/{asset}","description":"Permission: assets.delete. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"asset","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.delete"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assets/{asset}/assign":{"post":{"tags":["assets"],"operationId":"app_assets_assign","summary":"Hand it to an employee in scope","description":"Hand it to an employee in scope: assigned_to, assigned_at, return_date, notes, attachments[].\n\nPermission: assets.assign. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"asset","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.assign"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"assigned_to":{"type":"integer","description":"required|integer"},"assigned_at":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"return_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:assigned_at"},"notes":{"type":"string","nullable":true,"description":"nullable|string|max:10240"},"attachments":{"type":"array","items":{"type":"string","format":"binary"},"nullable":true,"description":"nullable|array|max:10"}},"required":["assigned_to"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assets/{asset}/release":{"post":{"tags":["assets"],"operationId":"app_assets_release","summary":"Take it back","description":"Take it back: it becomes available.\n\nPermission: assets.assign. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"asset","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.assign"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/assets/{asset}/status":{"post":{"tags":["assets"],"operationId":"app_assets_status","summary":"status","description":"status: damaged, under_repair, archived or available.\n\nPermission: assets.status. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"asset","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["assets.status"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/clock-in":{"post":{"tags":["attendance"],"operationId":"app_attendance_clock_in","summary":"POST /api/v1/app/companies/{company}/attendance/clock-in","description":"Permission: self.clock. Module: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.clock"],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"attendance_function_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:attendance_functions,id"},"photo":{"type":"string","format":"binary","description":"required|image|max:10240"}},"required":["photo"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/clock-out":{"post":{"tags":["attendance"],"operationId":"app_attendance_clock_out","summary":"POST /api/v1/app/companies/{company}/attendance/clock-out","description":"Permission: self.clock. Module: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.clock"],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"photo":{"type":"string","format":"binary","description":"required|image|max:10240"}},"required":["photo"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/scan":{"post":{"tags":["attendance"],"operationId":"app_attendance_scan","summary":"Scanning a work location's QR code (the mobile app reads the code's link /clock/qr/{token}?t=&s=)","description":"Scanning a work location's QR code (the mobile app reads the code's link /clock/qr/{token}?t=&s=): clocks out if a shift is open, otherwise in, with the same checks as the link. token, t and s from the code.\n\nPermission: self.clock. Module: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.clock"],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"required|string|max:100"},"t":{"type":"integer","nullable":true,"description":"nullable|integer"},"s":{"type":"string","nullable":true,"description":"nullable|string|max:64"},"attendance_function_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:attendance_functions,id"}},"required":["token"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/punch-log":{"get":{"tags":["attendance"],"operationId":"app_attendance_punch_log","summary":"The punch log","description":"The punch log: employee, branch, from, to, channel, device, ip, flagged, status, review; format=csv|xlsx for the branded export.\n\nPermission: attendance.security.review. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"},{"name":"employee","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"branch","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","csv","xlsx"],"nullable":true},"description":"nullable|in:json,csv,xlsx"}],"x-permissions":["attendance.security.review"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/punch-log/{context}":{"get":{"tags":["attendance"],"operationId":"app_attendance_punch_log_show","summary":"GET /api/v1/app/companies/{company}/attendance/punch-log/{context}","description":"Permission: attendance.security.review. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"context","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.security.review"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/punch-log/{context}/decide":{"post":{"tags":["attendance"],"operationId":"app_attendance_punch_log_decide","summary":"decision","description":"decision: approve or reject; note; approve_device to approve its pending device too.\n\nPermission: attendance.security.review. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"context","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.security.review"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"decision":{"type":"string","enum":["approve","reject"],"description":"required|in:approve,reject"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"approve_device":{"type":"boolean","nullable":true,"description":"nullable|boolean"}},"required":["decision"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/team":{"get":{"tags":["attendance"],"operationId":"app_attendance_team","summary":"The team's month","description":"The team's month: totals per employee in reach (attendance.view).\n\nPermission: attendance.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/today":{"get":{"tags":["attendance"],"operationId":"app_attendance_today","summary":"One day of the team (docs/mobile-hrm.md)","description":"One day of the team (docs/mobile-hrm.md): date (today by default).\n\nPermission: attendance.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"}],"x-permissions":["attendance.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/records":{"get":{"tags":["attendance"],"operationId":"app_attendance_records","summary":"Attendance records","description":"Attendance records: from, to, employee, shift (work shift id), state (incomplete, complete, trusted).\n\nPermission: attendance.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"},{"name":"employee","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"shift","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"state","in":"query","required":false,"schema":{"type":"string","enum":["incomplete","complete","trusted"],"nullable":true},"description":"nullable|in:incomplete,complete,trusted"}],"x-permissions":["attendance.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["attendance"],"operationId":"app_attendance_records_store","summary":"Add a record, or with \"replace\"","description":"Add a record, or with \"replace\": true correct the day (its records are replaced).\n\nPermission: attendance.records.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.records.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"work_date":{"type":"string","format":"date","description":"required|date|before_or_equal:today"},"clock_in":{"type":"string","format":"date","description":"required|date_format:H:i"},"clock_out":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i|after:clock_in"}},"required":["employee_id","work_date","clock_in"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/records/{record}/trust":{"post":{"tags":["attendance"],"operationId":"app_attendance_records_trust","summary":"POST /api/v1/app/companies/{company}/attendance/records/{record}/trust","description":"Permission: attendance.records.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"record","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.records.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/sheets":{"get":{"tags":["attendance"],"operationId":"app_attendance_sheets","summary":"ZenHR's Attendance Sheets","description":"ZenHR's Attendance Sheets: sheets imported from machines. Filters: machine (device id), status, from, to (import date).\n\nPermission: attendance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"machine","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["completed","with_errors","failed"],"nullable":true},"description":"nullable|in:completed,with_errors,failed"},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"}],"x-permissions":["attendance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/sheets/template/{device}":{"get":{"tags":["attendance"],"operationId":"app_attendance_sheets_template","summary":"A machine's blank attendance sheet in its template (rows of cells; the first is the headings).","description":"A machine's blank attendance sheet in its template (rows of cells; the first is the headings).\n\nPermission: attendance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/day-analysis":{"get":{"tags":["attendance"],"operationId":"app_attendance_day_analysis","summary":"ZenHR history (docs/zenhr-import.md)","description":"ZenHR history (docs/zenhr-import.md): kind days (day analysis) or punches (punch details) for attendance.view, balances (vacation balances by year) for leaves.manage. Filters: employee, from, to, status (days), type, year (balances).\n\nPermission: attendance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["present","absent","partial"],"nullable":true},"description":"nullable|in:present,absent,partial"},{"name":"type","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"year","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"}],"x-permissions":["attendance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/punches":{"get":{"tags":["attendance"],"operationId":"app_attendance_punches","summary":"ZenHR history (docs/zenhr-import.md)","description":"ZenHR history (docs/zenhr-import.md): kind days (day analysis) or punches (punch details) for attendance.view, balances (vacation balances by year) for leaves.manage. Filters: employee, from, to, status (days), type, year (balances).\n\nPermission: attendance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["present","absent","partial"],"nullable":true},"description":"nullable|in:present,absent,partial"},{"name":"type","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"year","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"}],"x-permissions":["attendance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/recommendations":{"get":{"tags":["attendance"],"operationId":"app_attendance_recommendations","summary":"Recommendations of the employees in reach","description":"Recommendations of the employees in reach: status (pending, applied, ignored), kind, from, to.\n\nPermission: attendance.recommendations.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","applied","ignored"],"nullable":true},"description":"nullable|in:pending,applied,ignored"},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["absence","lateness","early_out","incomplete","overtime","leave"],"nullable":true},"description":"nullable|in:absence,lateness,early_out,incomplete,overtime,leave"},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"}],"x-permissions":["attendance.recommendations.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/recommendations/refresh":{"post":{"tags":["attendance"],"operationId":"app_attendance_recommendations_refresh","summary":"POST /api/v1/app/companies/{company}/attendance/recommendations/refresh","description":"Permission: attendance.recommendations.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.recommendations.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/recommendations/act":{"post":{"tags":["attendance"],"operationId":"app_attendance_recommendations_act","summary":"Apply, ignore or tell the manager","description":"Apply, ignore or tell the manager: ids and action.\n\nPermission: attendance.recommendations.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.recommendations.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/attendance/missing-punches":{"get":{"tags":["attendance"],"operationId":"app_attendance_missing_punches","summary":"ZenHR Manage missing punches","description":"ZenHR Manage missing punches: status, punch dates from / to, employee; 50 a page.\n\nPermission: attendance.missing_punches.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","approved","rejected","cancelled","withdrawn"],"nullable":true},"description":"nullable|in:pending,approved,rejected,cancelled,withdrawn"},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"},{"name":"employee","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"employee_status","in":"query","required":false,"schema":{"type":"string","enum":["active","suspended","terminated"],"nullable":true},"description":"nullable|in:active,suspended,terminated"}],"x-permissions":["attendance.missing_punches.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/attest/challenge":{"post":{"tags":["attest"],"operationId":"app_attest_challenge","summary":"App Attest","description":"App Attest: a one-time challenge for the next attestation (five minutes).\n\n20 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/attest/register":{"post":{"tags":["attest"],"operationId":"app_attest_register","summary":"App Attest","description":"App Attest: key_id, attestation (base64), challenge, device_id (the device.id sent with punches).\n\n10 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key_id":{"type":"string","description":"required|string|max:100"},"attestation":{"type":"string","description":"required|string|max:20000"},"challenge":{"type":"string","description":"required|string|max:100"},"device_id":{"type":"string","description":"required|string|max:100"}},"required":["key_id","attestation","challenge","device_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/biometric-devices":{"get":{"tags":["biometric-devices"],"operationId":"app_biometric_index","summary":"GET /api/v1/app/companies/{company}/biometric-devices","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["biometric-devices"],"operationId":"app_biometric_store","summary":"POST /api/v1/app/companies/{company}/biometric-devices","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/biometric-devices/detected":{"get":{"tags":["biometric-devices"],"operationId":"app_biometric_detected","summary":"Clocks calling in from the caller's own public IP that no company has added yet (docs/devices.md).","description":"Clocks calling in from the caller's own public IP that no company has added yet (docs/devices.md).\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/biometric-devices/{device}":{"patch":{"tags":["biometric-devices"],"operationId":"app_biometric_update","summary":"Send only what changes.","description":"Send only what changes.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["biometric-devices"],"operationId":"app_biometric_destroy","summary":"DELETE /api/v1/app/companies/{company}/biometric-devices/{device}","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/biometric-devices/{device}/token":{"post":{"tags":["biometric-devices"],"operationId":"app_biometric_rotate","summary":"A new secret for the punches endpoint, shown this once.","description":"A new secret for the punches endpoint, shown this once.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/biometric-devices/{device}/users":{"get":{"tags":["biometric-devices"],"operationId":"app_biometric_users","summary":"GET biometric-devices/{id}/users","description":"GET biometric-devices/{id}/users: the machine's users and the numbers it sent, each with the employee it links to.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/biometric-devices/{device}/sheet":{"post":{"tags":["biometric-devices"],"operationId":"app_biometric_sheet","summary":"POST biometric-devices/{id}/sheet (multipart sheet)","description":"POST biometric-devices/{id}/sheet (multipart sheet): reads an attendance sheet exported from the machine.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"sheet":{"type":"string","format":"binary","description":"required|file|mimes:csv,txt,xlsx|max:10240"}},"required":["sheet"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/biometric-devices/reprocess":{"post":{"tags":["biometric-devices"],"operationId":"app_biometric_reprocess","summary":"Matches punches whose number now belongs to an employee.","description":"Matches punches whose number now belongs to an employee.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/biometric-templates/{template}/resolve":{"post":{"tags":["biometric-templates"],"operationId":"app_devices_resolve","summary":"version_id","description":"version_id: keep that version everywhere; or re_enroll_device_id: ask that device to enrol the slot again.\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"version_id":{"type":"integer","nullable":true,"description":"nullable|integer|required_without:re_enroll_device_id"},"re_enroll_device_id":{"type":"integer","nullable":true,"description":"nullable|integer"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/biometric-templates/{template}/publish":{"post":{"tags":["biometric-templates"],"operationId":"app_devices_publish_slot","summary":"POST /api/v1/app/companies/{company}/biometric-templates/{template}/publish","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/biometric-templates/{template}/remove":{"post":{"tags":["biometric-templates"],"operationId":"app_devices_remove_slot","summary":"Remove a slot from one device (device_id) or from the master set; needs confirm","description":"Remove a slot from one device (device_id) or from the master set; needs confirm: true.\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"confirm":{"type":"boolean","description":"accepted"},"device_id":{"type":"integer","nullable":true,"description":"nullable|integer"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/boarding-templates":{"get":{"tags":["boarding-templates"],"operationId":"app_boarding_templates_index","summary":"GET /api/v1/app/companies/{company}/boarding-templates","description":"Permission: employee_settings.boarding_templates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.boarding_templates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["boarding-templates"],"operationId":"app_boarding_templates_store","summary":"POST /api/v1/app/companies/{company}/boarding-templates","description":"Permission: employee_settings.boarding_templates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.boarding_templates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string","enum":["onboarding","offboarding","clearance","resumption"],"description":"required|in:onboarding,offboarding,clearance,resumption"},"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"when_to_send":{"type":"string","enum":["on_date","before"],"nullable":true,"description":"nullable|in:on_date,before"},"days_to_send":{"type":"integer","nullable":true,"description":"match ($category) {\n    'onboarding' => 'required_if:when_to_send,before',\n    '...|nullable|integer|min:0|max:365"},"arrive_by":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"location_name":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"contact_employee_id":{"type":"integer","nullable":true,"description":"nullable|integer|$employees"},"sequential":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"min_vacation_days":{"type":"integer","nullable":true,"description":"in_array($category, ['clearance', 'resumption'], true) ? 'required' : 'nullable'|nullable|integer|min:1|max:365"},"leave_type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:leave_types,id"},"resumption_trigger":{"type":"string","enum":["first_punch","employee_request","auto_send"],"nullable":true,"description":"$category === 'resumption' ? 'required' : 'nullable'|nullable|in:first_punch,employee_request,auto_send"},"auto_adjust":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"notify_after_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"},"notify_user_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array|max:50"},"filters":{"type":"array","items":{"type":"array","items":{"type":"string","nullable":true},"nullable":true},"nullable":true,"description":"nullable|array"},"tasks":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"required|Rule::in($kinds)"},"title":{"type":"string","nullable":true,"description":"nullable|required_if:tasks.*.kind,custom|string|max:200"},"document_type_id":{"type":"integer","nullable":true,"description":"nullable|required_if:tasks.*.kind,document_upload|integer|exists:document_types,id"},"document_id":{"type":"integer","nullable":true,"description":"nullable|required_if:tasks.*.kind,document_download|integer|exists:employee_documents,id"},"asset_type_id":{"type":"integer","nullable":true,"description":"nullable|required_if:tasks.*.kind,give_asset,take_asset|integer|exists:asset_types,id"},"assignee":{"type":"string","enum":["employee","person"],"nullable":true,"description":"nullable|in:employee,person"},"assignee_employee_id":{"type":"integer","nullable":true,"description":"nullable|required_if:tasks.*.kind,give_asset,take_asset|required_if:tasks.*.assignee,person|integer|$employees"},"due_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"notes_required":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"attachments_required":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"profile_fields":{"type":"array","items":{"type":"string","enum":["email","gender","mobile","religion","birth_date","national_id","nationality","marital_status","emergency_contacts"]},"nullable":true,"description":"nullable|required_if:tasks.*.kind,complete_profile|array|min:1"}}},"description":"required|array|min:1|max:50"}},"required":["category","name","tasks"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/boarding-templates/{template}":{"get":{"tags":["boarding-templates"],"operationId":"app_boarding_templates_show","summary":"GET /api/v1/app/companies/{company}/boarding-templates/{template}","description":"Permission: employee_settings.boarding_templates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.boarding_templates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["boarding-templates"],"operationId":"app_boarding_templates_update_put","summary":"PUT /api/v1/app/companies/{company}/boarding-templates/{template}","description":"Permission: employee_settings.boarding_templates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.boarding_templates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string","enum":["onboarding","offboarding","clearance","resumption"],"description":"required|in:onboarding,offboarding,clearance,resumption"},"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"when_to_send":{"type":"string","enum":["on_date","before"],"nullable":true,"description":"nullable|in:on_date,before"},"days_to_send":{"type":"integer","nullable":true,"description":"match ($category) {\n    'onboarding' => 'required_if:when_to_send,before',\n    '...|nullable|integer|min:0|max:365"},"arrive_by":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"location_name":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"contact_employee_id":{"type":"integer","nullable":true,"description":"nullable|integer|$employees"},"sequential":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"min_vacation_days":{"type":"integer","nullable":true,"description":"in_array($category, ['clearance', 'resumption'], true) ? 'required' : 'nullable'|nullable|integer|min:1|max:365"},"leave_type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:leave_types,id"},"resumption_trigger":{"type":"string","enum":["first_punch","employee_request","auto_send"],"nullable":true,"description":"$category === 'resumption' ? 'required' : 'nullable'|nullable|in:first_punch,employee_request,auto_send"},"auto_adjust":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"notify_after_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"},"notify_user_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array|max:50"},"filters":{"type":"array","items":{"type":"array","items":{"type":"string","nullable":true},"nullable":true},"nullable":true,"description":"nullable|array"},"tasks":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"required|Rule::in($kinds)"},"title":{"type":"string","nullable":true,"description":"nullable|required_if:tasks.*.kind,custom|string|max:200"},"document_type_id":{"type":"integer","nullable":true,"description":"nullable|required_if:tasks.*.kind,document_upload|integer|exists:document_types,id"},"document_id":{"type":"integer","nullable":true,"description":"nullable|required_if:tasks.*.kind,document_download|integer|exists:employee_documents,id"},"asset_type_id":{"type":"integer","nullable":true,"description":"nullable|required_if:tasks.*.kind,give_asset,take_asset|integer|exists:asset_types,id"},"assignee":{"type":"string","enum":["employee","person"],"nullable":true,"description":"nullable|in:employee,person"},"assignee_employee_id":{"type":"integer","nullable":true,"description":"nullable|required_if:tasks.*.kind,give_asset,take_asset|required_if:tasks.*.assignee,person|integer|$employees"},"due_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"notes_required":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"attachments_required":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"profile_fields":{"type":"array","items":{"type":"string","enum":["email","gender","mobile","religion","birth_date","national_id","nationality","marital_status","emergency_contacts"]},"nullable":true,"description":"nullable|required_if:tasks.*.kind,complete_profile|array|min:1"}}},"description":"required|array|min:1|max:50"}},"required":["category","name","tasks"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["boarding-templates"],"operationId":"app_boarding_templates_update_patch","summary":"PATCH /api/v1/app/companies/{company}/boarding-templates/{template}","description":"Permission: employee_settings.boarding_templates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.boarding_templates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string","enum":["onboarding","offboarding","clearance","resumption"],"description":"required|in:onboarding,offboarding,clearance,resumption"},"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"when_to_send":{"type":"string","enum":["on_date","before"],"nullable":true,"description":"nullable|in:on_date,before"},"days_to_send":{"type":"integer","nullable":true,"description":"match ($category) {\n    'onboarding' => 'required_if:when_to_send,before',\n    '...|nullable|integer|min:0|max:365"},"arrive_by":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"location_name":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"contact_employee_id":{"type":"integer","nullable":true,"description":"nullable|integer|$employees"},"sequential":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"min_vacation_days":{"type":"integer","nullable":true,"description":"in_array($category, ['clearance', 'resumption'], true) ? 'required' : 'nullable'|nullable|integer|min:1|max:365"},"leave_type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:leave_types,id"},"resumption_trigger":{"type":"string","enum":["first_punch","employee_request","auto_send"],"nullable":true,"description":"$category === 'resumption' ? 'required' : 'nullable'|nullable|in:first_punch,employee_request,auto_send"},"auto_adjust":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"notify_after_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"},"notify_user_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array|max:50"},"filters":{"type":"array","items":{"type":"array","items":{"type":"string","nullable":true},"nullable":true},"nullable":true,"description":"nullable|array"},"tasks":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","description":"required|Rule::in($kinds)"},"title":{"type":"string","nullable":true,"description":"nullable|required_if:tasks.*.kind,custom|string|max:200"},"document_type_id":{"type":"integer","nullable":true,"description":"nullable|required_if:tasks.*.kind,document_upload|integer|exists:document_types,id"},"document_id":{"type":"integer","nullable":true,"description":"nullable|required_if:tasks.*.kind,document_download|integer|exists:employee_documents,id"},"asset_type_id":{"type":"integer","nullable":true,"description":"nullable|required_if:tasks.*.kind,give_asset,take_asset|integer|exists:asset_types,id"},"assignee":{"type":"string","enum":["employee","person"],"nullable":true,"description":"nullable|in:employee,person"},"assignee_employee_id":{"type":"integer","nullable":true,"description":"nullable|required_if:tasks.*.kind,give_asset,take_asset|required_if:tasks.*.assignee,person|integer|$employees"},"due_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"notes_required":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"attachments_required":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"profile_fields":{"type":"array","items":{"type":"string","enum":["email","gender","mobile","religion","birth_date","national_id","nationality","marital_status","emergency_contacts"]},"nullable":true,"description":"nullable|required_if:tasks.*.kind,complete_profile|array|min:1"}}},"description":"required|array|min:1|max:50"}},"required":["category","name","tasks"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["boarding-templates"],"operationId":"app_boarding_templates_destroy","summary":"DELETE /api/v1/app/companies/{company}/boarding-templates/{template}","description":"Permission: employee_settings.boarding_templates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.boarding_templates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/boarding-templates/{template}/copy":{"post":{"tags":["boarding-templates"],"operationId":"app_boarding_templates_copy","summary":"POST /api/v1/app/companies/{company}/boarding-templates/{template}/copy","description":"Permission: employee_settings.boarding_templates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.boarding_templates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/boardings/{workflow}/pdf":{"get":{"tags":["boardings"],"operationId":"app_boardings_pdf","summary":"The workflow as a PDF file (application/pdf); lang en|ar, else the reader's language.","description":"The workflow as a PDF file (application/pdf); lang en|ar, else the reader's language.\n\nPermission: self.workflows or employees.view. Module: hrm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"workflow","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.workflows","employees.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":30,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/boardings":{"get":{"tags":["boardings"],"operationId":"app_boardings_index","summary":"GET /api/v1/app/companies/{company}/boardings","description":"Permission: employees.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/boardings/{workflow}":{"get":{"tags":["boardings"],"operationId":"app_boardings_show","summary":"GET /api/v1/app/companies/{company}/boardings/{workflow}","description":"Permission: employees.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"workflow","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["boardings"],"operationId":"app_boardings_destroy","summary":"DELETE /api/v1/app/companies/{company}/boardings/{workflow}","description":"Permission: employees.boardings.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"workflow","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.boardings.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/boardings/mass-onboard":{"post":{"tags":["boardings"],"operationId":"app_boardings_mass","summary":"POST /api/v1/app/companies/{company}/boardings/mass-onboard","description":"Permission: employees.boardings.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.boardings.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"boarding_template_id":{"type":"integer","description":"required|integer|exists:boarding_templates,id"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"employee_ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1|max:500"}},"required":["boarding_template_id","employee_ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/branch":{"get":{"tags":["branch"],"operationId":"app_branch_show","summary":"GET /api/v1/app/companies/{company}/branch","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["branch"],"operationId":"app_branch_update","summary":"PUT /api/v1/app/companies/{company}/branch","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"branch":{"type":"string","description":"required|regex:/^(\\d+|all)$/"}},"required":["branch"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/branches/{branch}/regional-settings":{"put":{"tags":["branches"],"operationId":"app_regional_settings_branch_put","summary":"PUT /api/v1/app/companies/{company}/branches/{branch}/regional-settings","description":"Permission: branches.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["branches.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["branches"],"operationId":"app_regional_settings_branch_patch","summary":"PATCH /api/v1/app/companies/{company}/branches/{branch}/regional-settings","description":"Permission: branches.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["branches.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/branches":{"get":{"tags":["branches"],"operationId":"app_branches_index","summary":"GET /api/v1/app/companies/{company}/branches","description":"Permission: branches.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["branches.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["branches"],"operationId":"app_branches_store","summary":"POST /api/v1/app/companies/{company}/branches","description":"Permission: branches.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["branches.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/branches/{branch}":{"patch":{"tags":["branches"],"operationId":"app_branches_update_patch","summary":"PATCH /api/v1/app/companies/{company}/branches/{branch}","description":"Permission: branches.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["branches.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["branches"],"operationId":"app_branches_update_post","summary":"POST /api/v1/app/companies/{company}/branches/{branch}","description":"Permission: branches.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["branches.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/branches/{branch}/main":{"post":{"tags":["branches"],"operationId":"app_branches_main","summary":"POST /api/v1/app/companies/{company}/branches/{branch}/main","description":"Permission: branches.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["branches.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/people":{"get":{"tags":["buddy-punching"],"operationId":"app_buddy_people","summary":"The people with a score, highest first; format=csv|xlsx with attendance.buddy.export.","description":"The people with a score, highest first; format=csv|xlsx with attendance.buddy.export.\n\nPermission: attendance.buddy.view or attendance.buddy.export. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.buddy.view","attendance.buddy.export"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/signals":{"get":{"tags":["buddy-punching"],"operationId":"app_buddy_signals","summary":"GET /api/v1/app/companies/{company}/buddy-punching/signals","description":"Permission: attendance.buddy.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.buddy.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/signals/{signal}":{"post":{"tags":["buddy-punching"],"operationId":"app_buddy_signal","summary":"POST /api/v1/app/companies/{company}/buddy-punching/signals/{signal}","description":"Permission: attendance.buddy.review. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"signal","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.buddy.review"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"decision":{"type":"string","enum":["confirm","dismiss"],"description":"required|in:confirm,dismiss"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}},"required":["decision"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/presence":{"get":{"tags":["buddy-punching"],"operationId":"app_buddy_presence","summary":"GET /api/v1/app/companies/{company}/buddy-punching/presence","description":"Permission: attendance.buddy.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.buddy.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/presence/{check}":{"post":{"tags":["buddy-punching"],"operationId":"app_buddy_presence_review","summary":"POST /api/v1/app/companies/{company}/buddy-punching/presence/{check}","description":"Permission: attendance.buddy.review. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"check","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.buddy.review"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"decision":{"type":"string","enum":["excuse","confirm"],"description":"required|in:excuse,confirm"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}},"required":["decision"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/faces":{"get":{"tags":["buddy-punching"],"operationId":"app_buddy_faces","summary":"GET /api/v1/app/companies/{company}/buddy-punching/faces","description":"Permission: attendance.face.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.face.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/faces/missing":{"get":{"tags":["buddy-punching"],"operationId":"app_buddy_faces_missing","summary":"Who hasn't taken the biometric photo yet.","description":"Who hasn't taken the biometric photo yet.\n\nPermission: attendance.face.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.face.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/faces/{template}/photo":{"get":{"tags":["buddy-punching"],"operationId":"app_buddy_faces_photo","summary":"The photo waiting for HR's approval, as a JPEG.","description":"The photo waiting for HR's approval, as a JPEG. Each look goes in the audit trail.\n\nPermission: attendance.face.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.face.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/consents":{"get":{"tags":["buddy-punching"],"operationId":"app_buddy_consents","summary":"GET /api/v1/app/companies/{company}/buddy-punching/consents","description":"Permission: attendance.face.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.face.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/faces/{template}/approve":{"post":{"tags":["buddy-punching"],"operationId":"app_buddy_face_approve","summary":"POST /api/v1/app/companies/{company}/buddy-punching/faces/{template}/approve","description":"Permission: attendance.face.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.face.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/faces/reset/{employee}":{"post":{"tags":["buddy-punching"],"operationId":"app_buddy_face_reset","summary":"POST /api/v1/app/companies/{company}/buddy-punching/faces/reset/{employee}","description":"Permission: attendance.face.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.face.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/keys":{"get":{"tags":["buddy-punching"],"operationId":"app_buddy_keys","summary":"GET /api/v1/app/companies/{company}/buddy-punching/keys","description":"Permission: attendance.buddy.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.buddy.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/buddy-punching/keys/{key}":{"post":{"tags":["buddy-punching"],"operationId":"app_buddy_key","summary":"POST /api/v1/app/companies/{company}/buddy-punching/keys/{key}","description":"Permission: attendance.device_key.approve. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"key","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.device_key.approve"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["approve","reset"],"description":"required|in:approve,reset"}},"required":["action"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/business-travel/setup":{"get":{"tags":["business-travel"],"operationId":"app_payroll_business_travel_setup","summary":"GET /api/v1/app/companies/{company}/business-travel/setup","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["business-travel"],"operationId":"app_payroll_business_travel_setup_update","summary":"PUT /api/v1/app/companies/{company}/business-travel/setup","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"trip_per_diem_type_id":{"type":"string","description":"required|$type"},"trip_payment":{"type":"string","enum":["in_payroll","off_cycle"],"description":"required|in:in_payroll,off_cycle"},"trip_air_ticket_type_id":{"type":"string","description":"required|$type"},"trip_accommodation_type_id":{"type":"string","description":"required|$type"},"trip_remind_days":{"type":"integer","description":"required|integer|min:0|max:60"},"trip_expense_type_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","nullable":true,"description":"nullable|integer"},"name_en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},"name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"nullable":true,"description":"nullable|array"}},"required":["trip_per_diem_type_id","trip_payment","trip_air_ticket_type_id","trip_accommodation_type_id","trip_remind_days"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/business-travel/policies":{"get":{"tags":["business-travel"],"operationId":"app_payroll_business_travel_policies","summary":"GET /api/v1/app/companies/{company}/business-travel/policies","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["business-travel"],"operationId":"app_payroll_business_travel_policies_store","summary":"POST /api/v1/app/companies/{company}/business-travel/policies","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"},"position_ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1"},"destinations":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["domestic","international"],"description":"required|in:domestic,international"},"country":{"type":"string","nullable":true,"description":"nullable|string|max:80"},"departure_cities":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"arrival_cities":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"departure_countries":{"type":"array","nullable":true,"description":"nullable","items":{"type":"string"}},"arrival_countries":{"type":"array","nullable":true,"description":"nullable","items":{"type":"string"}},"travel_types":{"type":"array","items":{"type":"string","enum":["airplane","bus","car","train"]},"nullable":true,"description":"nullable|array"},"air_classes":{"type":"array","items":{"type":"string","enum":["economy","business","first"]},"nullable":true,"description":"nullable|array"},"max_air_ticket":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"max_travel_cost":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"hotel_tiers":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"max_accommodation":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"components":{"type":"array","items":{"type":"object","properties":{"type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:per_diem_types,id"},"amount":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"}}},"nullable":true,"description":"nullable|array"}}},"description":"required|array|min:1|max:30"}},"required":["name_en","position_ids","destinations"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/business-travel/policies/{policy}":{"get":{"tags":["business-travel"],"operationId":"app_payroll_business_travel_policies_show","summary":"GET /api/v1/app/companies/{company}/business-travel/policies/{policy}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["business-travel"],"operationId":"app_payroll_business_travel_policies_update","summary":"PUT /api/v1/app/companies/{company}/business-travel/policies/{policy}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"},"position_ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1"},"destinations":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string","enum":["domestic","international"],"description":"required|in:domestic,international"},"country":{"type":"string","nullable":true,"description":"nullable|string|max:80"},"departure_cities":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"arrival_cities":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"departure_countries":{"type":"array","nullable":true,"description":"nullable","items":{"type":"string"}},"arrival_countries":{"type":"array","nullable":true,"description":"nullable","items":{"type":"string"}},"travel_types":{"type":"array","items":{"type":"string","enum":["airplane","bus","car","train"]},"nullable":true,"description":"nullable|array"},"air_classes":{"type":"array","items":{"type":"string","enum":["economy","business","first"]},"nullable":true,"description":"nullable|array"},"max_air_ticket":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"max_travel_cost":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"hotel_tiers":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"max_accommodation":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"components":{"type":"array","items":{"type":"object","properties":{"type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:per_diem_types,id"},"amount":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"}}},"nullable":true,"description":"nullable|array"}}},"description":"required|array|min:1|max:30"}},"required":["name_en","position_ids","destinations"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["business-travel"],"operationId":"app_payroll_business_travel_policies_destroy","summary":"DELETE /api/v1/app/companies/{company}/business-travel/policies/{policy}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/cancellations":{"get":{"tags":["cancellations"],"operationId":"app_cancellations_index","summary":"GET /api/v1/app/companies/{company}/cancellations","description":"Permission: self.requests.cancel or self.leaves.cancel or requests.manage or leaves.manage or self.approvals.decide. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.requests.cancel","self.leaves.cancel","requests.manage","leaves.manage","self.approvals.decide"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/cancellations/{kind}/{id}":{"post":{"tags":["cancellations"],"operationId":"app_cancellations_store","summary":"POST /api/v1/app/companies/{company}/cancellations/{kind}/{id}","description":"Permission: self.requests.cancel or self.leaves.cancel or requests.manage or leaves.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^requests|leaves$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.requests.cancel","self.leaves.cancel","requests.manage","leaves.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/cancellations/{kind}/{id}/decide":{"post":{"tags":["cancellations"],"operationId":"app_cancellations_decide","summary":"POST /api/v1/app/companies/{company}/cancellations/{kind}/{id}/decide","description":"Permission: self.approvals.decide or requests.manage or leaves.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^requests|leaves$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.approvals.decide","requests.manage","leaves.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/checklist-items/{item}/toggle":{"post":{"tags":["checklist-items"],"operationId":"app_checklists_toggle","summary":"POST /api/v1/app/companies/{company}/checklist-items/{item}/toggle","description":"Permission: employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"item","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/checklist-items/{item}":{"delete":{"tags":["checklist-items"],"operationId":"app_checklists_destroy","summary":"DELETE /api/v1/app/companies/{company}/checklist-items/{item}","description":"Permission: employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"item","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/checklists":{"get":{"tags":["checklists"],"operationId":"app_checklists_index","summary":"GET /api/v1/app/companies/{company}/checklists","description":"Permission: employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/clocking-devices":{"get":{"tags":["clocking-devices"],"operationId":"app_clocking_devices_index","summary":"Devices","description":"Devices: employee, kind (phone, browser), status, device.\n\nPermission: attendance.security.review. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.security.review"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/clocking-devices/{device}":{"post":{"tags":["clocking-devices"],"operationId":"app_clocking_devices_action","summary":"action","description":"action: approve, block, reset, rename (label) or share (shared, browsers only).\n\nPermission: attendance.security.review. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.security.review"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/clocking-wifi-networks":{"get":{"tags":["clocking-wifi-networks"],"operationId":"app_clocking_wifi_index","summary":"GET /api/v1/app/companies/{company}/clocking-wifi-networks","description":"Permission: attendance.security.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.security.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["clocking-wifi-networks"],"operationId":"app_clocking_wifi_store","summary":"POST /api/v1/app/companies/{company}/clocking-wifi-networks","description":"Permission: attendance.security.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.security.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/clocking-wifi-networks/{network}":{"delete":{"tags":["clocking-wifi-networks"],"operationId":"app_clocking_wifi_destroy","summary":"DELETE /api/v1/app/companies/{company}/clocking-wifi-networks/{network}","description":"Permission: attendance.security.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"network","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.security.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}":{"get":{"tags":["companies"],"operationId":"app_companies_show","summary":"What the company gives this user","description":"What the company gives this user: license, modules, branches.\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/competency-ratings":{"get":{"tags":["competency-ratings"],"operationId":"app_performance_ratings_index","summary":"Ratings of the employees in scope (employee filter).","description":"Ratings of the employees in scope (employee filter).\n\nPermission: performance.view or performance.manage.* or performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.view","performance.manage.*","performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["competency-ratings"],"operationId":"app_performance_ratings_store","summary":"employee_id, competency_id, level.","description":"employee_id, competency_id, level.\n\nPermission: performance.manage.* or performance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer|exists:employees,id"},"competency_id":{"type":"integer","description":"required|integer|exists:competencies,id"},"level":{"type":"integer","description":"required|integer|'between:1,' . \\App\\Models\\CompetencyLevel::scale()"}},"required":["employee_id","competency_id","level"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/competency-setup/{kind}":{"post":{"tags":["competency-setup"],"operationId":"app_performance_competency_setup_store","summary":"kind categories | levels | competencies","description":"kind categories | levels | competencies: as on the competencies screen.\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^categories|levels|competencies$"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/competency-setup/{kind}/{id}":{"patch":{"tags":["competency-setup"],"operationId":"app_performance_competency_setup_update_patch","summary":"kind categories | levels | competencies","description":"kind categories | levels | competencies: as on the competencies screen.\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^categories|levels|competencies$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["competency-setup"],"operationId":"app_performance_competency_setup_update_put","summary":"kind categories | levels | competencies","description":"kind categories | levels | competencies: as on the competencies screen.\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^categories|levels|competencies$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["competency-setup"],"operationId":"app_performance_competency_setup_destroy","summary":"DELETE /api/v1/app/companies/{company}/competency-setup/{kind}/{id}","description":"Permission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^categories|levels|competencies$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/connected-apps":{"get":{"tags":["connected-apps"],"operationId":"app_connected_apps_index","summary":"GET /api/v1/app/companies/{company}/connected-apps","description":"Permission: integrations.ai_apps.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.ai_apps.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/connected-apps/{grant}":{"delete":{"tags":["connected-apps"],"operationId":"app_connected_apps_destroy","summary":"DELETE /api/v1/app/companies/{company}/connected-apps/{grant}","description":"Permission: integrations.ai_apps.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"grant","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.ai_apps.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/cost-allocations":{"get":{"tags":["cost-allocations"],"operationId":"app_cost_allocations_index","summary":"Allocations in scope","description":"Allocations in scope: employee_id, status (active | inactive | upcoming), group (cost center group id), and the org filters.\n\nPermission: payroll.cost_allocations.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.cost_allocations.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["cost-allocations"],"operationId":"app_cost_allocations_store","summary":"POST /api/v1/app/companies/{company}/cost-allocations","description":"Permission: payroll.cost_allocations.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.cost_allocations.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"start_date":{"type":"string","format":"date","description":"required|date"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:start_date"},"rows":{"type":"array","items":{"type":"object","properties":{"cost_center_id":{"type":"string","description":"required|distinct|exists:cost_centers,id"},"percent":{"type":"number","description":"required|numeric|between:0.01,100"}}},"description":"required|array"}},"required":["employee_id","start_date","rows"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/cost-allocations/{allocation}":{"delete":{"tags":["cost-allocations"],"operationId":"app_cost_allocations_destroy","summary":"DELETE /api/v1/app/companies/{company}/cost-allocations/{allocation}","description":"Permission: payroll.cost_allocations.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"allocation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.cost_allocations.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/cost-center-groups":{"get":{"tags":["cost-center-groups"],"operationId":"app_cost_center_groups_index","summary":"Groups with the cost centers they include","description":"Groups with the cost centers they include: code, center (a cost center id).\n\nPermission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["cost-center-groups"],"operationId":"app_cost_center_groups_store","summary":"POST /api/v1/app/companies/{company}/cost-center-groups","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"},"code":{"type":"string","nullable":true,"description":"nullable|string|max:30"}},"required":["name_en"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/cost-center-groups/{group}":{"get":{"tags":["cost-center-groups"],"operationId":"app_cost_center_groups_show","summary":"GET /api/v1/app/companies/{company}/cost-center-groups/{group}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"group","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["cost-center-groups"],"operationId":"app_cost_center_groups_update_patch","summary":"PATCH /api/v1/app/companies/{company}/cost-center-groups/{group}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"group","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"},"code":{"type":"string","nullable":true,"description":"nullable|string|max:30"}},"required":["name_en"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["cost-center-groups"],"operationId":"app_cost_center_groups_update_put","summary":"PUT /api/v1/app/companies/{company}/cost-center-groups/{group}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"group","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"},"code":{"type":"string","nullable":true,"description":"nullable|string|max:30"}},"required":["name_en"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["cost-center-groups"],"operationId":"app_cost_center_groups_destroy","summary":"DELETE /api/v1/app/companies/{company}/cost-center-groups/{group}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"group","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/custom-reports":{"get":{"tags":["custom-reports"],"operationId":"app_custom_reports_index","summary":"GET /api/v1/app/companies/{company}/custom-reports","description":"Permission: reports.custom. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["reports.custom"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["custom-reports"],"operationId":"app_custom_reports_store","summary":"POST custom-reports","description":"POST custom-reports: name {en, ar}, locale, employee_status, schedule, notify_user_ids, columns [\"source.field\", \u2026] in order, shared_branch_ids (branches you work in).\n\nPermission: reports.custom. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["reports.custom"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"locale":{"type":"string","enum":["en","ar"],"description":"required|in:en,ar"},"employee_status":{"type":"string","enum":["active","inactive","both"],"description":"required|in:active,inactive,both"},"schedule":{"type":"string","enum":["none","daily","weekly","monthly","annually"],"description":"required|in:none,daily,weekly,monthly,annually"},"notify_user_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"shared_branch_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"columns":{"type":"array","items":{"type":"string"},"description":"required|array|min:1|max:120"},"order":{"type":"array","items":{"type":"integer","nullable":true},"nullable":true,"description":"nullable|array"}},"required":["name","locale","employee_status","schedule","columns"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/custom-reports/{report}":{"get":{"tags":["custom-reports"],"operationId":"app_custom_reports_show","summary":"GET /api/v1/app/companies/{company}/custom-reports/{report}","description":"Permission: reports.custom. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"report","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["reports.custom"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["custom-reports"],"operationId":"app_custom_reports_update","summary":"PATCH /api/v1/app/companies/{company}/custom-reports/{report}","description":"Permission: reports.custom. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"report","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["reports.custom"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"locale":{"type":"string","enum":["en","ar"],"description":"required|in:en,ar"},"employee_status":{"type":"string","enum":["active","inactive","both"],"description":"required|in:active,inactive,both"},"schedule":{"type":"string","enum":["none","daily","weekly","monthly","annually"],"description":"required|in:none,daily,weekly,monthly,annually"},"notify_user_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"shared_branch_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"columns":{"type":"array","items":{"type":"string"},"description":"required|array|min:1|max:120"},"order":{"type":"array","items":{"type":"integer","nullable":true},"nullable":true,"description":"nullable|array"}},"required":["name","locale","employee_status","schedule","columns"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["custom-reports"],"operationId":"app_custom_reports_destroy","summary":"DELETE /api/v1/app/companies/{company}/custom-reports/{report}","description":"Permission: reports.custom. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"report","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["reports.custom"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/custom-reports/{report}/run":{"get":{"tags":["custom-reports"],"operationId":"app_custom_reports_run","summary":"GET custom-reports/{id}/run","description":"GET custom-reports/{id}/run: the rows (limit, 500 by default), or format=csv.\n\nPermission: reports.custom. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"report","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["reports.custom"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/dashboard-metrics":{"get":{"tags":["dashboard-metrics"],"operationId":"app_my_dashboards_metrics","summary":"GET /api/v1/app/companies/{company}/dashboard-metrics","description":"Permission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/dashboards/{section}":{"get":{"tags":["dashboards"],"operationId":"app_dashboards_show","summary":"GET dashboards/{section}","description":"GET dashboards/{section}: hr, attendance, payroll, assets or performance (403 without that section's permission). For hr: only the widgets the person may see are computed (widgets=key,key narrows them further), with the filter period (this_month, last_month, last_30, this_quarter, this_year) or from/to, branch_id and department_id.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^hr|attendance|payroll|assets|performance$"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/device-audit-log":{"get":{"tags":["device-audit-log"],"operationId":"app_devices_audit","summary":"GET /api/v1/app/companies/{company}/device-audit-log","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/device-batches/{batch}":{"get":{"tags":["device-batches"],"operationId":"app_devices_batch","summary":"GET /api/v1/app/companies/{company}/device-batches/{batch}","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"batch","in":"path","required":true,"schema":{"type":"string","pattern":"^[\\da-fA-F]{8}-[\\da-fA-F]{4}-[\\da-fA-F]{4}-[\\da-fA-F]{4}-[\\da-fA-F]{12}$"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/device-commands/{command}/{do}":{"post":{"tags":["device-commands"],"operationId":"app_devices_command","summary":"POST /api/v1/app/companies/{company}/device-commands/{command}/{do}","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"command","in":"path","required":true,"schema":{"type":"integer"}},{"name":"do","in":"path","required":true,"schema":{"type":"string","pattern":"^retry|cancel$"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/device-compatibility":{"get":{"tags":["device-compatibility"],"operationId":"app_devices_compatibility","summary":"GET /api/v1/app/companies/{company}/device-compatibility","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/device-enrollments":{"post":{"tags":["device-enrollments"],"operationId":"app_devices_enroll","summary":"POST /api/v1/app/companies/{company}/device-enrollments","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"by":{"type":"string","description":"required|Rule::in(['employees', ...\\App\\Models\\DeviceEnrollmentRule::TARGETS])"},"ids":{"type":"array","items":{"type":"integer"},"description":"array"},"device_ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1"}},"required":["by","device_ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["device-enrollments"],"operationId":"app_devices_unenroll","summary":"DELETE /api/v1/app/companies/{company}/device-enrollments","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee_id","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"required_without:group_id|nullable|integer"},{"name":"group_id","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"device_ids","in":"query","required":true,"schema":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"}},"description":"required|array|min:1"}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/device-people":{"get":{"tags":["device-people"],"operationId":"app_devices_people","summary":"People on devices","description":"People on devices: q (number, biometric ID or name), department; paged.\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/device-settings/auto-publish":{"get":{"tags":["device-settings"],"operationId":"app_devices_auto_publish","summary":"GET /api/v1/app/companies/{company}/device-settings/auto-publish","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["device-settings"],"operationId":"app_devices_auto_publish_update","summary":"PUT /api/v1/app/companies/{company}/device-settings/auto-publish","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"auto_publish":{"type":"boolean","description":"required|boolean"}},"required":["auto_publish"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/device-sync-report":{"get":{"tags":["device-sync-report"],"operationId":"app_devices_sync_report","summary":"People whose devices are not all in sync; format=csv to export.","description":"People whose devices are not all in sync; format=csv to export.\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/devices":{"get":{"tags":["devices"],"operationId":"app_devices_index","summary":"GET /api/v1/app/companies/{company}/devices","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/devices/{device}":{"get":{"tags":["devices"],"operationId":"app_devices_show","summary":"GET /api/v1/app/companies/{company}/devices/{device}","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["devices"],"operationId":"app_devices_update","summary":"Settings and punch rules; recompute_from pairs the device's punches since that date again under the rule.","description":"Settings and punch rules; recompute_from pairs the device's punches since that date again under the rule.\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"access_mode":{"type":"string","enum":["attendance","access","both"],"description":"sometimes|in:attendance,access,both"},"family":{"type":"string","enum":["terminal","panel"],"nullable":true,"description":"sometimes|nullable|in:terminal,panel"},"sync_enabled":{"type":"boolean","description":"sometimes|boolean"},"strict_users":{"type":"boolean","description":"sometimes|boolean"},"lock_count":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|between:0,8"},"all_branches":{"type":"boolean","description":"sometimes|boolean"},"branch_ids":{"type":"array","items":{"type":"integer"},"description":"sometimes|array|min:1"},"punch_mode":{"type":"string","enum":["first_last","all","function"],"nullable":true,"description":"sometimes|nullable|in:first_last,all,function"},"pair_breaks":{"type":"boolean","description":"sometimes|boolean"},"break_function_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|exists:attendance_functions,id"},"debounce_minutes":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|between:0,60"},"punch_in_window_minutes":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|between:0,720"},"punch_out_grace_minutes":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|between:0,720"},"allowed_ips":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:1000|function ($attribute, $value, $fail) {\n    foreach (array_filter(array_map('trim..."},"confirm_ip":{"type":"boolean","description":"sometimes|boolean"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/devices/{device}/recompute":{"post":{"tags":["devices"],"operationId":"app_devices_recompute","summary":"POST /api/v1/app/companies/{company}/devices/{device}/recompute","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/devices/{device}/remove-users":{"post":{"tags":["devices"],"operationId":"app_devices_remove_users","summary":"Remove numbers from one device","description":"Remove numbers from one device: people who left or numbers no employee owns (not current employees).\n\nPermission: devices.manage. Module: hrm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":30,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pins":{"type":"array","items":{"type":"string"},"description":"required|array|max:5000"}},"required":["pins"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/devices/{device}/actions/{action}":{"post":{"tags":["devices"],"operationId":"app_devices_action","summary":"POST /api/v1/app/companies/{company}/devices/{device}/actions/{action}","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","pattern":"^sync|pull|pull_logs|info|check|reboot|clear_log|open_door|close_door|set_time|duplicate_check$"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"door":{"type":"integer","nullable":true,"description":"nullable|integer|between:1,8"},"seconds":{"type":"integer","nullable":true,"description":"nullable|integer|between:1,254"},"from":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"to":{"type":"string","format":"date","nullable":true,"description":"nullable|date"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/devices/{device}/commands":{"get":{"tags":["devices"],"operationId":"app_devices_commands","summary":"GET /api/v1/app/companies/{company}/devices/{device}/commands","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["queued","sent","done","failed","cancelled"],"nullable":true},"description":"nullable|in:queued,sent,done,failed,cancelled"}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/devices/{device}/users":{"get":{"tags":["devices"],"operationId":"app_devices_users","summary":"GET /api/v1/app/companies/{company}/devices/{device}/users","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/devices/{device}/plan":{"get":{"tags":["devices"],"operationId":"app_devices_plan","summary":"GET /api/v1/app/companies/{company}/devices/{device}/plan","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/devices/{device}/enrollment-rules":{"get":{"tags":["devices"],"operationId":"app_devices_rules","summary":"A device's enrolment rules and the people enrolled one by one.","description":"A device's enrolment rules and the people enrolled one by one.\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["devices"],"operationId":"app_devices_rules_store","summary":"target_type department|branch|position|group|all with ids (include), or employee with ids and effect exclude.","description":"target_type department|branch|position|group|all with ids (include), or employee with ids and effect exclude.\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"target_type":{"type":"string","description":"required|Rule::in([...\\App\\Models\\DeviceEnrollmentRule::TARGETS, 'employee'])"},"ids":{"type":"array","items":{"type":"integer"},"description":"array"},"effect":{"type":"string","enum":["include","exclude"],"nullable":true,"description":"nullable|in:include,exclude"}},"required":["target_type"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/devices/update-all":{"post":{"tags":["devices"],"operationId":"app_devices_update_all","summary":"\"Update all devices\" for one employee or everyone in reach","description":"\"Update all devices\" for one employee or everyone in reach: returns the batch whose progress device-batches/{batch} shows.\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/directory":{"get":{"tags":["directory"],"operationId":"app_directory_index","summary":"GET /api/v1/app/companies/{company}/directory","description":"Permission: self.directory.view or employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.directory.view","employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/disciplinary-action-types":{"post":{"tags":["disciplinary-action-types"],"operationId":"app_discipline_action_types_store","summary":"POST /api/v1/app/companies/{company}/disciplinary-action-types","description":"Permission: discipline_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"letter_template_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:letter_templates,id"},"deduction_type":{"type":"string","enum":["none","balanced_vacation","fixed","salary_day","percent"],"description":"required|in:none,balanced_vacation,fixed,salary_day,percent"},"leave_type_id":{"type":"integer","nullable":true,"description":"nullable|required_if:deduction_type,balanced_vacation|integer|exists:leave_types,id"},"transaction_type_id":{"type":"integer","nullable":true,"description":"nullable|required_if:deduction_type,fixed|integer|exists:transaction_types,id"},"deduction_value":{"type":"number","nullable":true,"description":"nullable|required_unless:deduction_type,none|numeric|min:0|($input['deduction_type'] ?? null) === 'percent' ? 'max:100' : 'max:100000000'"},"allowance_type_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"}},"required":["name","deduction_type"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/disciplinary-action-types/{type}":{"put":{"tags":["disciplinary-action-types"],"operationId":"app_discipline_action_types_update_put","summary":"PUT /api/v1/app/companies/{company}/disciplinary-action-types/{type}","description":"Permission: discipline_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"letter_template_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:letter_templates,id"},"deduction_type":{"type":"string","enum":["none","balanced_vacation","fixed","salary_day","percent"],"description":"required|in:none,balanced_vacation,fixed,salary_day,percent"},"leave_type_id":{"type":"integer","nullable":true,"description":"nullable|required_if:deduction_type,balanced_vacation|integer|exists:leave_types,id"},"transaction_type_id":{"type":"integer","nullable":true,"description":"nullable|required_if:deduction_type,fixed|integer|exists:transaction_types,id"},"deduction_value":{"type":"number","nullable":true,"description":"nullable|required_unless:deduction_type,none|numeric|min:0|($input['deduction_type'] ?? null) === 'percent' ? 'max:100' : 'max:100000000'"},"allowance_type_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"}},"required":["name","deduction_type"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["disciplinary-action-types"],"operationId":"app_discipline_action_types_update_patch","summary":"PATCH /api/v1/app/companies/{company}/disciplinary-action-types/{type}","description":"Permission: discipline_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"letter_template_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:letter_templates,id"},"deduction_type":{"type":"string","enum":["none","balanced_vacation","fixed","salary_day","percent"],"description":"required|in:none,balanced_vacation,fixed,salary_day,percent"},"leave_type_id":{"type":"integer","nullable":true,"description":"nullable|required_if:deduction_type,balanced_vacation|integer|exists:leave_types,id"},"transaction_type_id":{"type":"integer","nullable":true,"description":"nullable|required_if:deduction_type,fixed|integer|exists:transaction_types,id"},"deduction_value":{"type":"number","nullable":true,"description":"nullable|required_unless:deduction_type,none|numeric|min:0|($input['deduction_type'] ?? null) === 'percent' ? 'max:100' : 'max:100000000'"},"allowance_type_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"}},"required":["name","deduction_type"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["disciplinary-action-types"],"operationId":"app_discipline_action_types_destroy","summary":"DELETE /api/v1/app/companies/{company}/disciplinary-action-types/{type}","description":"Permission: discipline_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/disciplinary-actions":{"get":{"tags":["disciplinary-actions"],"operationId":"app_discipline_index","summary":"GET /api/v1/app/companies/{company}/disciplinary-actions","description":"Permission: discipline.view or discipline.manage or discipline.record or discipline.approve or discipline.delete. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline.view","discipline.manage","discipline.record","discipline.approve","discipline.delete"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["disciplinary-actions"],"operationId":"app_discipline_store","summary":"POST /api/v1/app/companies/{company}/disciplinary-actions","description":"Permission: discipline.record. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline.record"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"disciplinary_type_id":{"type":"integer","description":"required|integer|exists:disciplinary_types,id"},"incident_date":{"type":"string","format":"date","description":"required|date|before_or_equal:today"},"description":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"disciplinary_action_type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:disciplinary_action_types,id"},"action":{"type":"string","enum":["verbal_warning","written_warning","final_warning","deduction"],"nullable":true,"description":"nullable|in:verbal_warning,written_warning,final_warning,deduction"},"deduction_amount":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100000000"},"draft":{"type":"boolean","description":"sometimes|boolean"}},"required":["employee_id","disciplinary_type_id","incident_date","description"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/disciplinary-actions/suggest":{"get":{"tags":["disciplinary-actions"],"operationId":"app_discipline_suggest","summary":"GET /api/v1/app/companies/{company}/disciplinary-actions/suggest","description":"Permission: discipline.record. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee_id","in":"query","required":true,"schema":{"type":"integer"},"description":"required|integer"},{"name":"disciplinary_type_id","in":"query","required":true,"schema":{"type":"integer"},"description":"required|integer"},{"name":"incident_date","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"}],"x-permissions":["discipline.record"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/disciplinary-actions/generate":{"post":{"tags":["disciplinary-actions"],"operationId":"app_discipline_generate","summary":"POST /api/v1/app/companies/{company}/disciplinary-actions/generate","description":"Permission: discipline.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"leave_type_id":{"type":"integer","description":"required|integer|exists:leave_types,id"},"kind":{"type":"string","enum":["redundant","grace"],"description":"required|in:redundant,grace"},"effective_date":{"type":"string","format":"date","description":"required|date"},"from":{"type":"string","format":"date","description":"required|date"},"to":{"type":"string","format":"date","description":"required|date|after_or_equal:from"},"employee_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"branch_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"department_id":{"type":"integer","nullable":true,"description":"nullable|integer"}},"required":["leave_type_id","kind","effective_date","from","to"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/disciplinary-actions/{action}/approve":{"post":{"tags":["disciplinary-actions"],"operationId":"app_discipline_approve","summary":"POST /api/v1/app/companies/{company}/disciplinary-actions/{action}/approve","description":"Permission: discipline.approve. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline.approve"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/disciplinary-actions/{action}":{"delete":{"tags":["disciplinary-actions"],"operationId":"app_discipline_destroy","summary":"DELETE /api/v1/app/companies/{company}/disciplinary-actions/{action}","description":"Permission: discipline.delete. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline.delete"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/disciplinary-rules":{"post":{"tags":["disciplinary-rules"],"operationId":"app_discipline_rules_store","summary":"POST /api/v1/app/companies/{company}/disciplinary-rules","description":"Permission: discipline_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"disciplinary_type_id":{"type":"integer","description":"$rule ? 'sometimes' : 'required'|integer|exists:disciplinary_types,id|unique:disciplinary_rules,disciplinary_type_id"},"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"rule_type":{"type":"string","enum":["sequential","separate"],"nullable":true,"description":"nullable|in:sequential,separate"},"drop_after":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:1000"},"drop_unit":{"type":"string","enum":["day","month","year"],"nullable":true,"description":"nullable|in:day,month,year"},"prevent_repetition":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:1000"},"prevent_unit":{"type":"string","enum":["day","month","year"],"nullable":true,"description":"nullable|in:day,month,year"},"action_type_ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1|max:20"}},"required":["name","action_type_ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/disciplinary-rules/{rule}":{"put":{"tags":["disciplinary-rules"],"operationId":"app_discipline_rules_update_put","summary":"PUT /api/v1/app/companies/{company}/disciplinary-rules/{rule}","description":"Permission: discipline_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"rule","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"disciplinary_type_id":{"type":"integer","description":"$rule ? 'sometimes' : 'required'|integer|exists:disciplinary_types,id|unique:disciplinary_rules,disciplinary_type_id"},"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"rule_type":{"type":"string","enum":["sequential","separate"],"nullable":true,"description":"nullable|in:sequential,separate"},"drop_after":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:1000"},"drop_unit":{"type":"string","enum":["day","month","year"],"nullable":true,"description":"nullable|in:day,month,year"},"prevent_repetition":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:1000"},"prevent_unit":{"type":"string","enum":["day","month","year"],"nullable":true,"description":"nullable|in:day,month,year"},"action_type_ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1|max:20"}},"required":["name","action_type_ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["disciplinary-rules"],"operationId":"app_discipline_rules_update_patch","summary":"PATCH /api/v1/app/companies/{company}/disciplinary-rules/{rule}","description":"Permission: discipline_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"rule","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"disciplinary_type_id":{"type":"integer","description":"$rule ? 'sometimes' : 'required'|integer|exists:disciplinary_types,id|unique:disciplinary_rules,disciplinary_type_id"},"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"rule_type":{"type":"string","enum":["sequential","separate"],"nullable":true,"description":"nullable|in:sequential,separate"},"drop_after":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:1000"},"drop_unit":{"type":"string","enum":["day","month","year"],"nullable":true,"description":"nullable|in:day,month,year"},"prevent_repetition":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:1000"},"prevent_unit":{"type":"string","enum":["day","month","year"],"nullable":true,"description":"nullable|in:day,month,year"},"action_type_ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1|max:20"}},"required":["name","action_type_ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["disciplinary-rules"],"operationId":"app_discipline_rules_destroy","summary":"DELETE /api/v1/app/companies/{company}/disciplinary-rules/{rule}","description":"Permission: discipline_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"rule","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/discipline-setup":{"get":{"tags":["discipline-setup"],"operationId":"app_discipline_setup","summary":"GET /api/v1/app/companies/{company}/discipline-setup","description":"Permission: discipline_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/documents":{"get":{"tags":["documents"],"operationId":"app_documents_index","summary":"GET /api/v1/app/companies/{company}/documents","description":"Permission: self.documents.view or employees.view_sensitive. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.documents.view","employees.view_sensitive"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["documents"],"operationId":"app_documents_store","summary":"POST /api/v1/app/companies/{company}/documents","description":"Permission: self.documents.upload or employees.view_sensitive. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.documents.upload","employees.view_sensitive"],"x-modules":[],"x-rate-limit-per-minute":30,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/documents/{document}/download":{"get":{"tags":["documents"],"operationId":"app_documents_download","summary":"GET /api/v1/app/companies/{company}/documents/{document}/download","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"document","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/documents/{document}":{"delete":{"tags":["documents"],"operationId":"app_documents_destroy","summary":"DELETE /api/v1/app/companies/{company}/documents/{document}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"document","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/door-events":{"get":{"tags":["door-events"],"operationId":"app_door_events_index","summary":"GET /api/v1/app/companies/{company}/door-events","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"result","in":"query","required":false,"schema":{"type":"string","enum":["granted","denied","alarm","state","info"],"nullable":true},"description":"nullable|in:granted,denied,alarm,state,info"},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["json","csv"],"nullable":true},"description":"nullable|in:json,csv"}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/door-events/{event}/acknowledge":{"post":{"tags":["door-events"],"operationId":"app_door_events_acknowledge","summary":"POST /api/v1/app/companies/{company}/door-events/{event}/acknowledge","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"event","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-geolocations":{"post":{"tags":["employee-geolocations"],"operationId":"app_employee_geolocations_assign","summary":"Employees' locations","description":"Employees' locations: action assign|unassign|replace, employees, locations.\n\nPermission: attendance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["assign","unassign","replace"],"description":"required|in:assign,unassign,replace"},"employees":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1"},"locations":{"type":"array","items":{"type":"integer"},"description":"required_unless:action,unassign|array"}},"required":["action","employees"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-geolocations/replace-all":{"post":{"tags":["employee-geolocations"],"operationId":"app_employee_geolocations_replace_all","summary":"from_location \u2192 to_location for everyone in reach at from_location.","description":"from_location \u2192 to_location for everyone in reach at from_location.\n\nPermission: attendance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"from_location":{"type":"integer","description":"required|integer"},"to_location":{"type":"integer","description":"required|integer|different:from_location"}},"required":["from_location","to_location"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-groups":{"get":{"tags":["employee-groups"],"operationId":"app_employee_groups_index","summary":"GET /api/v1/app/companies/{company}/employee-groups","description":"Permission: employee_groups.manage or devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_groups.manage","devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["employee-groups"],"operationId":"app_employee_groups_store","summary":"POST /api/v1/app/companies/{company}/employee-groups","description":"Permission: employee_groups.manage or devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_groups.manage","devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"description":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}}},"color":{"type":"string","nullable":true,"description":"nullable|regex:/^#[0-9a-fA-F]{6}$/"},"branch_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:branches,id"},"rules":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array","properties":{"departments":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"positions":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"branches":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"}}},"member_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"}},"required":["name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-groups/{group}":{"get":{"tags":["employee-groups"],"operationId":"app_employee_groups_show","summary":"GET /api/v1/app/companies/{company}/employee-groups/{group}","description":"Permission: employee_groups.manage or devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"group","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_groups.manage","devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["employee-groups"],"operationId":"app_employee_groups_update_put","summary":"PUT /api/v1/app/companies/{company}/employee-groups/{group}","description":"Permission: employee_groups.manage or devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"group","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_groups.manage","devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["employee-groups"],"operationId":"app_employee_groups_update_patch","summary":"PATCH /api/v1/app/companies/{company}/employee-groups/{group}","description":"Permission: employee_groups.manage or devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"group","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_groups.manage","devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["employee-groups"],"operationId":"app_employee_groups_destroy","summary":"DELETE /api/v1/app/companies/{company}/employee-groups/{group}","description":"Permission: employee_groups.manage or devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"group","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_groups.manage","devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-groups/{group}/members":{"post":{"tags":["employee-groups"],"operationId":"app_employee_groups_members_post","summary":"employee_ids","description":"employee_ids: added (POST) or removed (DELETE).\n\nPermission: employee_groups.manage or devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"group","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_groups.manage","devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1"}},"required":["employee_ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["employee-groups"],"operationId":"app_employee_groups_members_delete","summary":"employee_ids","description":"employee_ids: added (POST) or removed (DELETE).\n\nPermission: employee_groups.manage or devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"group","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee_ids","in":"query","required":true,"schema":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"}},"description":"required|array|min:1"}],"x-permissions":["employee_groups.manage","devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-invitations":{"get":{"tags":["employee-invitations"],"operationId":"app_employee_invitations_index","summary":"GET /api/v1/app/companies/{company}/employee-invitations","description":"Permission: employees.import. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.import"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["employee-invitations"],"operationId":"app_employee_invitations_store","summary":"POST /api/v1/app/companies/{company}/employee-invitations","description":"Permission: employees.import. 5 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.import"],"x-modules":[],"x-rate-limit-per-minute":5,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expected":{"type":"integer","description":"required|integer|min:1"},"channel":{"type":"string","description":"required|Rule::in(self::CHANNELS)"},"branch_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:branches,id"},"department_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:org_units,id"}},"required":["expected","channel"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-invitations/preview":{"get":{"tags":["employee-invitations"],"operationId":"app_employee_invitations_preview","summary":"GET /api/v1/app/companies/{company}/employee-invitations/preview","description":"Permission: employees.import. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"channel","in":"query","required":true,"schema":{"type":"string"},"description":"required|Rule::in(self::CHANNELS)"},{"name":"branch_id","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer|exists:branches,id"},{"name":"department_id","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer|exists:org_units,id"}],"x-permissions":["employees.import"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-numbering":{"get":{"tags":["employee-numbering"],"operationId":"app_employee_numbering_show","summary":"Employee numbering","description":"Employee numbering: the company's settings and each branch's (docs/employee-numbering.md).\n\nPermission: employee_settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["employee-numbering"],"operationId":"app_employee_numbering_update_put","summary":"PUT /api/v1/app/companies/{company}/employee-numbering","description":"Permission: employee_settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["employee-numbering"],"operationId":"app_employee_numbering_update_patch","summary":"PATCH /api/v1/app/companies/{company}/employee-numbering","description":"Permission: employee_settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-numbering/branches/{branch}":{"put":{"tags":["employee-numbering"],"operationId":"app_employee_numbering_branch_put","summary":"PUT /api/v1/app/companies/{company}/employee-numbering/branches/{branch}","description":"Permission: employee_settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["employee-numbering"],"operationId":"app_employee_numbering_branch_patch","summary":"PATCH /api/v1/app/companies/{company}/employee-numbering/branches/{branch}","description":"Permission: employee_settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-settings/{kind}":{"get":{"tags":["employee-settings"],"operationId":"app_employee_settings_index","summary":"GET /api/v1/app/companies/{company}/employee-settings/{kind}","description":"Permission: employee_settings.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^contract_types|job_grades|document_types|custom_fields|org_levels|field_rules|e_signatures|banks$"}}],"x-permissions":["employee_settings.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["employee-settings"],"operationId":"app_employee_settings_store","summary":"POST /api/v1/app/companies/{company}/employee-settings/{kind}","description":"Permission: employee_settings.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^contract_types|job_grades|document_types|custom_fields|org_levels|field_rules|e_signatures|banks$"}}],"x-permissions":["employee_settings.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-settings/{kind}/{id}":{"patch":{"tags":["employee-settings"],"operationId":"app_employee_settings_update","summary":"PATCH /api/v1/app/companies/{company}/employee-settings/{kind}/{id}","description":"Permission: employee_settings.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^contract_types|job_grades|document_types|custom_fields|org_levels|field_rules|e_signatures|banks$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-settings/e_signatures/{id}/image":{"get":{"tags":["employee-settings"],"operationId":"app_employee_settings_signature","summary":"ZenHR E-Signatures","description":"ZenHR E-Signatures: the signature image itself.\n\nPermission: employee_settings.e_signatures.manage or letters.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employee_settings.e_signatures.manage","letters.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-shifts":{"get":{"tags":["employee-shifts"],"operationId":"app_employee_shifts_index","summary":"The schedule between from and to (a week by default) for the employees in reach.","description":"The schedule between from and to (a week by default) for the employees in reach.\n\nPermission: attendance.shift_planner.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date|after_or_equal:from"},{"name":"employee","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"}],"x-permissions":["attendance.shift_planner.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["employee-shifts"],"operationId":"app_employee_shifts_assign","summary":"Assign Shift","description":"Assign Shift: employees, shift_id (or \"off\"), start_date, end_date (none = open-ended), conflict replace|keep, draft.\n\nPermission: attendance.shift_planner.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.shift_planner.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employees":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1"},"shift_id":{"type":"string","description":"required|$request->input('shift_id') === 'off' ? 'in:off' : Rule::exists('shifts', 'id')-..."},"start_date":{"type":"string","format":"date","description":"required|date"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:start_date"},"conflict":{"type":"string","enum":["replace","keep"],"nullable":true,"description":"nullable|in:replace,keep"},"draft":{"type":"boolean","description":"sometimes|boolean"}},"required":["employees","shift_id","start_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-shifts/export":{"get":{"tags":["employee-shifts"],"operationId":"app_employee_shifts_export","summary":"The week (week=any date in it) as the Employee Shifts screen shows it, with its filters; format csv (default) or json.","description":"The week (week=any date in it) as the Employee Shifts screen shows it, with its filters; format csv (default) or json.\n\nPermission: attendance.shift_planner.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"week","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["csv","json"],"nullable":true},"description":"nullable|in:csv,json"}],"x-permissions":["attendance.shift_planner.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-shifts/regular":{"get":{"tags":["employee-shifts"],"operationId":"app_employee_shifts_regular","summary":"Regular (non-roster) shift assignments and each person's own default shift, with the Employee Shifts filters.","description":"Regular (non-roster) shift assignments and each person's own default shift, with the Employee Shifts filters.\n\nPermission: attendance.shift_planner.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.shift_planner.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-shifts/plan":{"post":{"tags":["employee-shifts"],"operationId":"app_employee_shifts_plan","summary":"Shift planner (ZenHR's roster)","description":"Shift planner (ZenHR's roster): drafts employees' days from start_date to end_date (at most 62 days, e.g. a month) with the chosen shifts and rules. employees = ids (none = everyone the role reaches).\n\nPermission: attendance.shift_planner.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.shift_planner.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shift_ids":{"type":"array","items":{"type":"string"},"description":"required|array|min:1"},"start_date":{"type":"string","format":"date","description":"required|date"},"end_date":{"type":"string","format":"date","description":"required|date|after_or_equal:start_date"},"employees":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"max_in_a_row":{"type":"integer","nullable":true,"description":"nullable|integer|between:1,14"},"days_off_a_week":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,6"},"max_weekly_hours":{"type":"number","nullable":true,"description":"nullable|numeric|between:1,168"},"fair_nights":{"type":"boolean","description":"sometimes|boolean"}},"required":["shift_ids","start_date","end_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employee-shifts/publish":{"post":{"tags":["employee-shifts"],"operationId":"app_employee_shifts_publish","summary":"Publishes the drafts between start_date and end_date (a week or a month), and tells those people when notify is true.","description":"Publishes the drafts between start_date and end_date (a week or a month), and tells those people when notify is true.\n\nPermission: attendance.shift_planner.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.shift_planner.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"start_date":{"type":"string","format":"date","description":"required|date"},"end_date":{"type":"string","format":"date","description":"required|date|after_or_equal:start_date"},"employees":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"notify":{"type":"boolean","description":"sometimes|boolean"}},"required":["start_date","end_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/professional-data":{"get":{"tags":["employees"],"operationId":"app_professional_data_index","summary":"GET /api/v1/app/companies/{company}/employees/{employee}/professional-data","description":"Permission: employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["employees"],"operationId":"app_professional_data_store","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/professional-data","description":"Permission: employees.edit. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.edit"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/rehire":{"post":{"tags":["employees"],"operationId":"app_employees_rehire","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/rehire","description":"Permission: employees.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"hire_date":{"type":"string","format":"date","description":"required|date|$old->terminated_on ? ['after:' . $old->terminated_on->toDateString()] : []"},"copy_bank_accounts":{"type":"boolean","description":"sometimes|boolean"},"copy_family":{"type":"boolean","description":"sometimes|boolean"}},"required":["hire_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/existing-users":{"get":{"tags":["employees"],"operationId":"app_employees_existing_users","summary":"\"Add Employee for an Existing User\"","description":"\"Add Employee for an Existing User\": ended records (latest per person) to rehire, and accounts with no employee record; q searches.\n\nPermission: employees.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/temporary-password":{"post":{"tags":["employees"],"operationId":"app_employees_temporary_password","summary":"temporary_password (the company's password policy); they change it after signing in.","description":"temporary_password (the company's password policy); they change it after signing in. Not the owner's or one's own account.\n\nPermission: employees.manage. 10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.manage"],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"temporary_password":{"type":"string","description":"required|string|\\App\\Support\\PasswordPolicy::rule($record->user)"}},"required":["temporary_password"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/unlock":{"post":{"tags":["employees"],"operationId":"app_employees_unlock","summary":"Unlocks an account locked by failed sign-in attempts.","description":"Unlocks an account locked by failed sign-in attempts.\n\nPermission: employees.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/termination-check":{"get":{"tags":["employees"],"operationId":"app_terminations_check","summary":"GET /api/v1/app/companies/{company}/employees/{employee}/termination-check","description":"Permission: employees.terminate. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.terminate"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/termination-check/{action}":{"post":{"tags":["employees"],"operationId":"app_terminations_resolve","summary":"substitute, withdraw-requests, take-asset, expire-insurance, pay-loans, deduct-loans","description":"substitute, withdraw-requests, take-asset, expire-insurance, pay-loans, deduct-loans\n\nPermission: employees.terminate. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","pattern":"^substitute|withdraw-requests|take-asset|expire-insurance|pay-loans|deduct-loans$"}}],"x-permissions":["employees.terminate"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/cancel-termination":{"post":{"tags":["employees"],"operationId":"app_terminations_cancel","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/cancel-termination","description":"Permission: employees.terminate. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.terminate"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/checklist":{"get":{"tags":["employees"],"operationId":"app_checklists_show","summary":"GET /api/v1/app/companies/{company}/employees/{employee}/checklist","description":"Permission: employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["employees"],"operationId":"app_checklists_store","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/checklist","description":"Permission: employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["onboarding","offboarding"],"description":"required|in:onboarding,offboarding"},"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(200)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(200)"}}}},"required":["type","title"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/boardings":{"post":{"tags":["employees"],"operationId":"app_boardings_store","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/boardings","description":"Permission: employees.boardings.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.boardings.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string","enum":["onboarding","offboarding"],"description":"required|in:onboarding,offboarding"},"boarding_template_id":{"type":"integer","description":"required|integer|exists:boarding_templates,id"},"boarding_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"arrive_by":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"location_name":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"contact_employee_id":{"type":"integer","nullable":true,"description":"nullable|integer|$employees"},"manager_employee_id":{"type":"integer","nullable":true,"description":"nullable|integer|$employees"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"sequential":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"tasks":{"type":"array","items":{"type":"object","properties":{"include":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"due_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"}}},"nullable":true,"description":"nullable|array"}},"required":["category","boarding_template_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/salary-packages":{"get":{"tags":["employees"],"operationId":"app_payroll_packages","summary":"An employee's salary packages, newest first, with the current one's id.","description":"An employee's salary packages, newest first, with the current one's id.\n\nPermission: payroll.salary_packages.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["employees"],"operationId":"app_payroll_packages_store","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/salary-packages","description":"Permission: payroll.salary_packages.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"effective_on":{"type":"string","format":"date","description":"required|date|'after_or_equal:' . $employee->hire_date->toDateString()"},"basic_salary":{"type":"number","description":"required|numeric|min:0"},"currency":{"type":"string","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLP","CNY","COP","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VES","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWL"],"nullable":true,"description":"nullable|in:AED,AFN,ALL,AMD,ANG,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BTN,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ERN,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HTG,HUF,IDR,ILS,INR,IQD,IRR,ISK,JMD,JOD,JPY,KES,KGS,KHR,KMF,KPW,KRW,KWD,KYD,KZT,LAK,LBP,LKR,LRD,LSL,LYD,MAD,MDL,MGA,MKD,MMK,MNT,MOP,MRU,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SDG,SEK,SGD,SHP,SLE,SOS,SRD,SSP,STN,SVC,SYP,SZL,THB,TJS,TMT,TND,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW,ZWL"},"salary_count":{"type":"integer","description":"required|integer|between:12,16"},"other_exemption":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"ss_salary":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"ss_currency":{"type":"string","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLP","CNY","COP","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VES","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWL"],"nullable":true,"description":"nullable|in:AED,AFN,ALL,AMD,ANG,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BTN,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ERN,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HTG,HUF,IDR,ILS,INR,IQD,IRR,ISK,JMD,JOD,JPY,KES,KGS,KHR,KMF,KPW,KRW,KWD,KYD,KZT,LAK,LBP,LKR,LRD,LSL,LYD,MAD,MDL,MGA,MKD,MMK,MNT,MOP,MRU,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SDG,SEK,SGD,SHP,SLE,SOS,SRD,SSP,STN,SVC,SYP,SZL,THB,TJS,TMT,TND,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW,ZWL"},"social_security_rule_id":{"type":"string","nullable":true,"description":"nullable|exists:social_security_rules,id"},"ss_participation_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"company_bank_account_id":{"type":"string","nullable":true,"description":"nullable|exists:company_bank_accounts,id"},"tax_number":{"type":"string","nullable":true,"description":"nullable|string|max:50"},"ss_number":{"type":"string","nullable":true,"description":"nullable|string|max:50"},"gl_account":{"type":"string","nullable":true,"description":"nullable|string|max:50"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"items":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["allowance","deduction","company_expense"],"description":"required_with:items.*.amount|in:allowance,deduction,company_expense"},"transaction_type_id":{"type":"string","nullable":true,"description":"nullable|exists:transaction_types,id"},"name_en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"},"amount":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"}}},"description":"array"}},"required":["effective_on","basic_salary","salary_count"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/salary-packages/{package}":{"delete":{"tags":["employees"],"operationId":"app_payroll_packages_destroy","summary":"DELETE /api/v1/app/companies/{company}/employees/{employee}/salary-packages/{package}","description":"Permission: payroll.salary_packages.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"package","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"get":{"tags":["employees"],"operationId":"app_payroll_packages_show","summary":"One salary package of an employee in scope, with its items and the package in force before it.","description":"One salary package of an employee in scope, with its items and the package in force before it.\n\nPermission: payroll.salary_packages.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"package","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/salary-stop":{"post":{"tags":["employees"],"operationId":"app_payroll_salary_stop","summary":"Stop (reason) or resume an employee's salary","description":"Stop (reason) or resume an employee's salary: action = stop | resume.\n\nPermission: payroll.salary_packages.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["stop","resume"],"description":"required|in:stop,resume"},"reason":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(255)"}},"required":["action","reason"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/project-contributions":{"get":{"tags":["employees"],"operationId":"app_project_contributions_show","summary":"GET employees/{employee}/project-contributions?month=YYYY-MM","description":"GET employees/{employee}/project-contributions?month=YYYY-MM: each project's contribution and the month's timesheet hours on it.\n\nPermission: payroll.cost_allocations.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.cost_allocations.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["employees"],"operationId":"app_project_contributions_update","summary":"PUT employees/{employee}/project-contributions {projects","description":"PUT employees/{employee}/project-contributions {projects: [{project_id, contribution_percent}]} adding up to 100.\n\nPermission: payroll.cost_allocations.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.cost_allocations.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"projects":{"type":"array","items":{"type":"object","properties":{"project_id":{"type":"integer","description":"required|integer|distinct"},"contribution_percent":{"type":"number","description":"required|numeric|between:0,100"}}},"description":"required|array|min:1"}},"required":["projects"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/salary-scale":{"get":{"tags":["employees"],"operationId":"app_salary_scales_placement","summary":"An employee's placement (payroll.view or payroll.manage, in scope).","description":"An employee's placement (payroll.view or payroll.manage, in scope).\n\nPermission: payroll.salary_packages.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["employees"],"operationId":"app_salary_scales_place","summary":"Places an employee in my payroll.manage scope; warning when the salary is outside the new enforced range.","description":"Places an employee in my payroll.manage scope; warning when the salary is outside the new enforced range.\n\nPermission: payroll.salary_packages.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"scale_level_id":{"type":"string","nullable":true,"description":"nullable|$in('scale_levels')"},"scale_band_id":{"type":"string","nullable":true,"description":"nullable|$in('scale_bands')"},"scale_grade_id":{"type":"string","nullable":true,"description":"nullable|$in('scale_grades')"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/stb-encashment":{"get":{"tags":["employees"],"operationId":"app_stb_encashments_available","summary":"What an employee in my scope could take now","description":"What an employee in my scope could take now: years, accrued, taken, allowed, eligible, reason.\n\nPermission: payroll.stb_encashments.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.stb_encashments.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/leave-balances":{"get":{"tags":["employees"],"operationId":"app_leaves_balances","summary":"An employee's balances (?year, ?as_of) and their time off setup rows.","description":"An employee's balances (?year, ?as_of) and their time off setup rows.\n\nPermission: leaves.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leaves.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/timeoff/{leaveType}":{"patch":{"tags":["employees"],"operationId":"app_leaves_policy_patch","summary":"One employee's setup for a leave type; with \"reset\"","description":"One employee's setup for a leave type; with \"reset\": true back to the company setup.\n\nPermission: leaves.balance_corrections.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"leaveType","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leaves.balance_corrections.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"entitlement_days":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"},"open_balance":{"type":"number","nullable":true,"description":"nullable|numeric|min:-365|max:365"},"carry_balance":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"},"balance_year":{"type":"integer","nullable":true,"description":"nullable|integer|min:2000|max:2100"},"active":{"type":"boolean","nullable":true,"description":"nullable|boolean"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["employees"],"operationId":"app_leaves_policy_post","summary":"One employee's setup for a leave type; with \"reset\"","description":"One employee's setup for a leave type; with \"reset\": true back to the company setup.\n\nPermission: leaves.balance_corrections.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"leaveType","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leaves.balance_corrections.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"entitlement_days":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"},"open_balance":{"type":"number","nullable":true,"description":"nullable|numeric|min:-365|max:365"},"carry_balance":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"},"balance_year":{"type":"integer","nullable":true,"description":"nullable|integer|min:2000|max:2100"},"active":{"type":"boolean","nullable":true,"description":"nullable|boolean"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/timeoff/{leaveType}/balance":{"get":{"tags":["employees"],"operationId":"app_leaves_policy_balance","summary":"ZenHR's \"Show balance\"","description":"ZenHR's \"Show balance\": each year since hiring (up to ten), split into opening, previous, adjustments, encashed, hourly, total, taken, pending, remaining.\n\nPermission: leaves.balance_corrections.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"leaveType","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leaves.balance_corrections.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/timeoff/{leaveType}/{action}":{"post":{"tags":["employees"],"operationId":"app_leaves_policy_action","summary":"Timeoff setup","description":"Timeoff setup: cancel-future (ZenHR's Cancel all future transactions) or deactivate-move (to_leave_type_id).\n\nPermission: leaves.balance_corrections.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"leaveType","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","pattern":"^cancel-future|deactivate-move$"}}],"x-permissions":["leaves.balance_corrections.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"to_leave_type_id":{"type":"integer","description":"required|integer|exists:leave_types,id"}},"required":["to_leave_type_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/clocking-devices/reset":{"post":{"tags":["employees"],"operationId":"app_clocking_devices_reset","summary":"Resets an employee's phone","description":"Resets an employee's phone: the next phone they clock from needs approval.\n\nPermission: attendance.security.review. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.security.review"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/clocking-from":{"get":{"tags":["employees"],"operationId":"app_employees_clocking_from","summary":"Where one employee clocks from","description":"Where one employee clocks from: their own choice, the branch's, and what applies.\n\nPermission: attendance.clocking_from.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.clocking_from.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["employees"],"operationId":"app_employees_clocking_from_update","summary":"clocking_from","description":"clocking_from: both, web, mobile or device; null or \"follow\" goes back to the branch's.\n\nPermission: attendance.clocking_from.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.clocking_from.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"clocking_from":{"type":"string","description":"present"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/devices":{"get":{"tags":["employees"],"operationId":"app_devices_employee","summary":"A person's devices","description":"A person's devices: profile, enrolments, why they are (not) on each device, templates (no data).\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/device-profile":{"put":{"tags":["employees"],"operationId":"app_devices_profile_put","summary":"PUT /api/v1/app/companies/{company}/employees/{employee}/device-profile","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"card":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:32|regex:/^[0-9A-Za-z]*$/"},"password":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:8|regex:/^[0-9]*$/"},"privilege":{"type":"integer","enum":[0,2,6,14],"description":"sometimes|integer|in:0,2,6,14"},"verify_mode":{"type":"string","enum":["default","any","finger","pin","password","card","finger_or_password","finger_or_card","card_or_password","pin_and_finger","finger_and_password","card_and_finger","card_and_password","finger_password_card","pin_finger_password","finger_and_card_or_pin","face","face_and_finger","face_and_password","face_and_card","face_finger_card","face_finger_password","vein","palm"],"description":"sometimes|in:default,any,finger,pin,password,card,finger_or_password,finger_or_card,card_or_password,pin_and_finger,finger_and_password,card_and_finger,card_and_password,finger_password_card,pin_finger_password,finger_and_card_or_pin,face,face_and_finger,face_and_password,face_and_card,face_finger_card,face_finger_password,vein,palm"},"enabled":{"type":"boolean","description":"sometimes|boolean"},"push_photo":{"type":"boolean","description":"sometimes|boolean"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["employees"],"operationId":"app_devices_profile_patch","summary":"PATCH /api/v1/app/companies/{company}/employees/{employee}/device-profile","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"card":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:32|regex:/^[0-9A-Za-z]*$/"},"password":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:8|regex:/^[0-9]*$/"},"privilege":{"type":"integer","enum":[0,2,6,14],"description":"sometimes|integer|in:0,2,6,14"},"verify_mode":{"type":"string","enum":["default","any","finger","pin","password","card","finger_or_password","finger_or_card","card_or_password","pin_and_finger","finger_and_password","card_and_finger","card_and_password","finger_password_card","pin_finger_password","finger_and_card_or_pin","face","face_and_finger","face_and_password","face_and_card","face_finger_card","face_finger_password","vein","palm"],"description":"sometimes|in:default,any,finger,pin,password,card,finger_or_password,finger_or_card,card_or_password,pin_and_finger,finger_and_password,card_and_finger,card_and_password,finger_password_card,pin_finger_password,finger_and_card_or_pin,face,face_and_finger,face_and_password,face_and_card,face_finger_card,face_finger_password,vein,palm"},"enabled":{"type":"boolean","description":"sometimes|boolean"},"push_photo":{"type":"boolean","description":"sometimes|boolean"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/remove-from-devices":{"post":{"tags":["employees"],"operationId":"app_devices_remove","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/remove-from-devices","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/pull-templates":{"post":{"tags":["employees"],"operationId":"app_devices_pull_templates","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/pull-templates","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/biometric-templates":{"get":{"tags":["employees"],"operationId":"app_devices_templates","summary":"Templates; the data itself only with include_data=1 and the permission to see sensitive employee data.","description":"Templates; the data itself only with include_data=1 and the permission to see sensitive employee data.\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/biometric-matrix":{"get":{"tags":["employees"],"operationId":"app_devices_matrix","summary":"The person's slots \u00d7 devices (present, missing, outdated, conflict, pending, incompatible, capacity\u2026).","description":"The person's slots \u00d7 devices (present, missing, outdated, conflict, pending, incompatible, capacity\u2026).\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/publish-missing":{"post":{"tags":["employees"],"operationId":"app_devices_publish_missing","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/publish-missing","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/file/{kind}":{"get":{"tags":["employees"],"operationId":"app_employees_file_index","summary":"The employee's file","description":"The employee's file: contracts, bank_accounts, family or documents (wave 1 of moving Mawarid in).\n\nPermission: employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^contracts|bank_accounts|family|documents$"}}],"x-permissions":["employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["employees"],"operationId":"app_employees_file_store","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/file/{kind}","description":"Permission: employees.edit. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^contracts|bank_accounts|family|documents$"}}],"x-permissions":["employees.edit"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/file/{kind}/{id}":{"patch":{"tags":["employees"],"operationId":"app_employees_file_update_patch","summary":"PATCH /api/v1/app/companies/{company}/employees/{employee}/file/{kind}/{id}","description":"Permission: employees.edit. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^contracts|bank_accounts|family|documents$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.edit"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["employees"],"operationId":"app_employees_file_update_post","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/file/{kind}/{id}","description":"Permission: employees.edit. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^contracts|bank_accounts|family|documents$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.edit"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["employees"],"operationId":"app_employees_file_destroy","summary":"DELETE /api/v1/app/companies/{company}/employees/{employee}/file/{kind}/{id}","description":"Permission: employees.edit. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^contracts|bank_accounts|family|documents$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.edit"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/documents/{document}/download":{"get":{"tags":["employees"],"operationId":"app_employees_file_download","summary":"GET /api/v1/app/companies/{company}/employees/{employee}/documents/{document}/download","description":"Permission: employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"document","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/history":{"get":{"tags":["employees"],"operationId":"app_employees_history","summary":"GET /api/v1/app/companies/{company}/employees/{employee}/history","description":"Permission: employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees":{"get":{"tags":["employees"],"operationId":"app_employees_index","summary":"GET /api/v1/app/companies/{company}/employees","description":"Permission: employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["employees"],"operationId":"app_employees_store","summary":"POST /api/v1/app/companies/{company}/employees","description":"Permission: employees.create. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.create"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}":{"get":{"tags":["employees"],"operationId":"app_employees_show","summary":"GET /api/v1/app/companies/{company}/employees/{employee}","description":"Permission: employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["employees"],"operationId":"app_employees_update","summary":"PATCH /api/v1/app/companies/{company}/employees/{employee}","description":"Permission: employees.edit. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.edit"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/transfer":{"post":{"tags":["employees"],"operationId":"app_employees_transfer","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/transfer","description":"Permission: employees.transfer. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.transfer"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"branch_id":{"type":"integer","description":"required|integer|exists:branches,id"},"effective_date":{"type":"string","format":"date","description":"required|date|'after_or_equal:' . $employee->started_on?->toDateString()"},"position_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:positions,id"},"work_location_id":{"type":"string","description":"$unitRule('work_location')"},"department_id":{"type":"string","description":"$unitRule('department')"},"section_id":{"type":"string","description":"$unitRule('section')"},"project_id":{"type":"string","description":"$unitRule('project')"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}},"required":["branch_id","effective_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/by-number/{number}":{"get":{"tags":["employees"],"operationId":"app_employees_by_number","summary":"One employee by the number people use (the current record first; ?branch_id= when numbers repeat across branches).","description":"One employee by the number people use (the current record first; ?branch_id= when numbers repeat across branches).\n\nPermission: employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"number","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":["employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/archive":{"post":{"tags":["employees"],"operationId":"app_employees_archive","summary":"\"Delete\"","description":"\"Delete\": archives the record and keeps everything tied to it (docs/employee-numbering.md).\n\nPermission: employees.archive. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.archive"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/restore":{"post":{"tags":["employees"],"operationId":"app_employees_restore","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/restore","description":"Permission: employees.archive. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.archive"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/employees/{employee}/terminate":{"post":{"tags":["employees"],"operationId":"app_employees_terminate","summary":"POST /api/v1/app/companies/{company}/employees/{employee}/terminate","description":"Permission: employees.terminate. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.terminate"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"terminated_on":{"type":"string","format":"date","description":"required|date|'after_or_equal:' . ($employee->started_on ?? $employee->hire_date)?->toDateStri..."},"termination_type":{"type":"string","enum":["resignation","dismissal","end_of_contract","other","retirement","transfer"],"description":"required|in:resignation,dismissal,end_of_contract,other,retirement,transfer"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"termination_reason_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:termination_reasons,id"}},"required":["terminated_on","termination_type"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/nav":{"get":{"tags":["engine"],"operationId":"app_engine_nav","summary":"GET /api/v1/app/companies/{company}/engine/nav","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/dashboard":{"get":{"tags":["engine"],"operationId":"app_engine_dashboard","summary":"The dashboard in the app (docs/mobile-dashboards.md)","description":"The dashboard in the app (docs/mobile-dashboards.md): the widgets open to the person here, as blocks.\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/dashboard/layout":{"put":{"tags":["engine"],"operationId":"app_engine_dashboard_layout","summary":"PUT dashboard/layout","description":"PUT dashboard/layout: order [keys], show [keys], or reset; on the phone only.\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/links":{"get":{"tags":["engine"],"operationId":"app_engine_links","summary":"GET links?url=","description":"GET links?url=: what a notice's or a result's link opens for this person, or why it can't.\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"url","in":"query","required":false,"schema":{"type":"string","nullable":true},"description":"nullable|string|max:500"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/sections/{section}":{"get":{"tags":["engine"],"operationId":"app_engine_describe","summary":"GET /api/v1/app/companies/{company}/engine/sections/{section}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/sections/{section}/records":{"get":{"tags":["engine"],"operationId":"app_engine_records_index","summary":"GET /api/v1/app/companies/{company}/engine/sections/{section}/records","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["engine"],"operationId":"app_engine_records_store","summary":"POST /api/v1/app/companies/{company}/engine/sections/{section}/records","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/sections/{section}/records/{record}":{"get":{"tags":["engine"],"operationId":"app_engine_records_show","summary":"GET /api/v1/app/companies/{company}/engine/sections/{section}/records/{record}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}},{"name":"record","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["engine"],"operationId":"app_engine_records_update_patch","summary":"PATCH /api/v1/app/companies/{company}/engine/sections/{section}/records/{record}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}},{"name":"record","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["engine"],"operationId":"app_engine_records_update_post","summary":"POST /api/v1/app/companies/{company}/engine/sections/{section}/records/{record}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}},{"name":"record","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/sections/{section}/records/{record}/actions/{action}":{"post":{"tags":["engine"],"operationId":"app_engine_records_action","summary":"POST /api/v1/app/companies/{company}/engine/sections/{section}/records/{record}/actions/{action}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}},{"name":"record","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/sections/{section}/records/{record}/files/{field}":{"get":{"tags":["engine"],"operationId":"app_engine_records_file","summary":"GET /api/v1/app/companies/{company}/engine/sections/{section}/records/{record}/files/{field}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}},{"name":"record","in":"path","required":true,"schema":{"type":"integer"}},{"name":"field","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/sections/{section}/bulk/{action}":{"post":{"tags":["engine"],"operationId":"app_engine_bulk","summary":"POST /api/v1/app/companies/{company}/engine/sections/{section}/bulk/{action}","description":"20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/sections/{section}/form":{"get":{"tags":["engine"],"operationId":"app_engine_form","summary":"GET /api/v1/app/companies/{company}/engine/sections/{section}/form","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/sections/{section}/options/{field}":{"get":{"tags":["engine"],"operationId":"app_engine_options","summary":"GET /api/v1/app/companies/{company}/engine/sections/{section}/options/{field}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}},{"name":"field","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/sections/{section}/blocks":{"get":{"tags":["engine"],"operationId":"app_engine_blocks","summary":"GET /api/v1/app/companies/{company}/engine/sections/{section}/blocks","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/engine/sections/{section}/export":{"get":{"tags":["engine"],"operationId":"app_engine_export","summary":"GET /api/v1/app/companies/{company}/engine/sections/{section}/export","description":"10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/enrollment-rules/{rule}":{"delete":{"tags":["enrollment-rules"],"operationId":"app_devices_rules_destroy","summary":"DELETE /api/v1/app/companies/{company}/enrollment-rules/{rule}","description":"Permission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"rule","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/eos-policies":{"get":{"tags":["eos-policies"],"operationId":"app_eos_policies_index","summary":"Filters","description":"Filters: name, category, contract_type (limited | unlimited), defaults_only.\n\nPermission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["eos-policies"],"operationId":"app_eos_policies_store","summary":"POST /api/v1/app/companies/{company}/eos-policies","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(120)"},"name_ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(120)"},"termination_category":{"type":"string","enum":["any","resignation","termination","end_of_contract","retirement","transfer","other"],"description":"required|in:any,resignation,termination,end_of_contract,retirement,transfer,other"},"min_years":{"type":"integer","description":"required|integer|min:0|max:50"},"tiers":{"type":"string","description":"required|string|max:1000"},"worth_tiers":{"type":"string","nullable":true,"description":"nullable|string|max:1000"},"contract_type":{"type":"string","enum":["both","limited","unlimited"],"nullable":true,"description":"nullable|in:both,limited,unlimited"},"exclude_unpaid":{"type":"array","items":{"type":"string"},"nullable":true,"description":"nullable|array"},"nationalities":{"type":"array","items":{"type":"string"},"nullable":true,"description":"nullable|array"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"allowance_type_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"calc_base":{"type":"string","enum":["calendar","365","360"],"nullable":true,"description":"nullable|in:calendar,365,360"},"year_definition":{"type":"string","enum":["calendar","fixed"],"nullable":true,"description":"nullable|in:calendar,fixed"},"fixed_year_days":{"type":"integer","nullable":true,"description":"nullable|required_if:year_definition,fixed|integer|between:300,400"},"calc_type":{"type":"string","enum":["service","remaining","both"],"nullable":true,"description":"nullable|in:service,remaining,both"},"remaining_direction":{"type":"string","enum":["add","deduct"],"nullable":true,"description":"nullable|in:add,deduct"},"service_min_salaries":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"service_max_salaries":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"remaining_min_salaries":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"remaining_max_salaries":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"}},"required":["name_en","name_ar","termination_category","min_years","tiers"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/eos-policies/{policy}":{"get":{"tags":["eos-policies"],"operationId":"app_eos_policies_show","summary":"GET /api/v1/app/companies/{company}/eos-policies/{policy}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["eos-policies"],"operationId":"app_eos_policies_update","summary":"PUT /api/v1/app/companies/{company}/eos-policies/{policy}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(120)"},"name_ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(120)"},"termination_category":{"type":"string","enum":["any","resignation","termination","end_of_contract","retirement","transfer","other"],"description":"required|in:any,resignation,termination,end_of_contract,retirement,transfer,other"},"min_years":{"type":"integer","description":"required|integer|min:0|max:50"},"tiers":{"type":"string","description":"required|string|max:1000"},"worth_tiers":{"type":"string","nullable":true,"description":"nullable|string|max:1000"},"contract_type":{"type":"string","enum":["both","limited","unlimited"],"nullable":true,"description":"nullable|in:both,limited,unlimited"},"exclude_unpaid":{"type":"array","items":{"type":"string"},"nullable":true,"description":"nullable|array"},"nationalities":{"type":"array","items":{"type":"string"},"nullable":true,"description":"nullable|array"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"allowance_type_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"calc_base":{"type":"string","enum":["calendar","365","360"],"nullable":true,"description":"nullable|in:calendar,365,360"},"year_definition":{"type":"string","enum":["calendar","fixed"],"nullable":true,"description":"nullable|in:calendar,fixed"},"fixed_year_days":{"type":"integer","nullable":true,"description":"nullable|required_if:year_definition,fixed|integer|between:300,400"},"calc_type":{"type":"string","enum":["service","remaining","both"],"nullable":true,"description":"nullable|in:service,remaining,both"},"remaining_direction":{"type":"string","enum":["add","deduct"],"nullable":true,"description":"nullable|in:add,deduct"},"service_min_salaries":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"service_max_salaries":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"remaining_min_salaries":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"remaining_max_salaries":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"}},"required":["name_en","name_ar","termination_category","min_years","tiers"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["eos-policies"],"operationId":"app_eos_policies_destroy","summary":"DELETE /api/v1/app/companies/{company}/eos-policies/{policy}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluation-criteria/{criterion}":{"delete":{"tags":["evaluation-criteria"],"operationId":"app_performance_criteria_destroy","summary":"DELETE /api/v1/app/companies/{company}/evaluation-criteria/{criterion}","description":"Permission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"criterion","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluation-cycles":{"get":{"tags":["evaluation-cycles"],"operationId":"app_performance_cycles_index","summary":"The cycles, with the list's filters","description":"The cycles, with the list's filters: q (name), status (draft, open, closed) and stage (current stage).\n\nPermission: performance.view or performance.manage.* or performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.view","performance.manage.*","performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["evaluation-cycles"],"operationId":"app_performance_cycles_store","summary":"evaluation_template_id, name, branch_ids, year, evaluation_part, stages {stage","description":"evaluation_template_id, name, branch_ids, year, evaluation_part, stages {stage: {start, end}}.\n\nPermission: performance.manage.* or performance.cycles.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.cycles.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"branch_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"year":{"type":"integer","description":"required|integer|between:2000,2100"},"evaluation_part":{"type":"string","description":"required|Rule::in(array_keys(\\App\\Models\\EvaluationCycle::parts($template->period)))"},"stages":{"type":"array","items":{"type":"object","properties":{"start":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"end":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"on_start_end":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"before_end":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"on_submit":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"before_end_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:60"},"notify_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"}}},"description":"required|array"},"send_before_start":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"send_before_start_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:60"}},"required":["year","evaluation_part","stages"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluation-cycles/{cycle}":{"get":{"tags":["evaluation-cycles"],"operationId":"app_performance_cycles_show","summary":"The cycle and its evaluations in scope, with the cycle page's filters (q, branch, position, work_location, department\u2026","description":"The cycle and its evaluations in scope, with the cycle page's filters (q, branch, position, work_location, department, section, project, hierarchy_group, stage, status, action, okrs, missing, employee_status).\n\nPermission: performance.view or performance.manage.* or performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cycle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.view","performance.manage.*","performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["evaluation-cycles"],"operationId":"app_performance_cycles_destroy","summary":"DELETE /api/v1/app/companies/{company}/evaluation-cycles/{cycle}","description":"Permission: performance.manage.* or performance.cycles.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cycle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.cycles.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluation-cycles/{cycle}/calibration":{"get":{"tags":["evaluation-cycles"],"operationId":"app_performance_calibration_show","summary":"Who sits in which result band of a cycle, in what the person reaches, and whose result they may move.","description":"Who sits in which result band of a cycle, in what the person reaches, and whose result they may move.\n\nPermission: performance.calibrate. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cycle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.calibrate"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluation-cycles/{cycle}/launch":{"post":{"tags":["evaluation-cycles"],"operationId":"app_performance_cycles_launch","summary":"POST /api/v1/app/companies/{company}/evaluation-cycles/{cycle}/launch","description":"Permission: performance.manage.* or performance.cycles.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cycle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.cycles.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluation-cycles/{cycle}/close":{"post":{"tags":["evaluation-cycles"],"operationId":"app_performance_cycles_close","summary":"POST /api/v1/app/companies/{company}/evaluation-cycles/{cycle}/close","description":"Permission: performance.manage.* or performance.cycles.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cycle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.cycles.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluation-cycles/{cycle}/dates":{"put":{"tags":["evaluation-cycles"],"operationId":"app_performance_cycles_dates","summary":"PUT /api/v1/app/companies/{company}/evaluation-cycles/{cycle}/dates","description":"Permission: performance.manage.* or performance.cycles.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cycle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.cycles.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluation-cycles/{cycle}/employees":{"post":{"tags":["evaluation-cycles"],"operationId":"app_performance_cycles_employees","summary":"employees (ids).","description":"employees (ids).\n\nPermission: performance.manage.* or performance.cycles.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cycle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.cycles.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluation-templates":{"post":{"tags":["evaluation-templates"],"operationId":"app_performance_templates_store","summary":"POST /api/v1/app/companies/{company}/evaluation-templates","description":"Permission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluation-templates/{template}":{"patch":{"tags":["evaluation-templates"],"operationId":"app_performance_templates_update_patch","summary":"PATCH /api/v1/app/companies/{company}/evaluation-templates/{template}","description":"Permission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["evaluation-templates"],"operationId":"app_performance_templates_update_put","summary":"PUT /api/v1/app/companies/{company}/evaluation-templates/{template}","description":"Permission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["evaluation-templates"],"operationId":"app_performance_templates_destroy","summary":"DELETE /api/v1/app/companies/{company}/evaluation-templates/{template}","description":"Permission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluation-templates/{template}/criteria":{"post":{"tags":["evaluation-templates"],"operationId":"app_performance_criteria_store","summary":"title {en, ar}, weight, kind factor|okr, target, measurement_unit_id.","description":"title {en, ar}, weight, kind factor|okr, target, measurement_unit_id.\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(200)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(200)"}}},"weight":{"type":"number","description":"required|numeric|min:0.01|max:100"},"kind":{"type":"string","enum":["factor","okr"],"nullable":true,"description":"nullable|in:factor,okr"},"target":{"type":"number","nullable":true,"description":"nullable|required_if:kind,okr|numeric|gt:0"},"measurement_unit_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:measurement_units,id"}},"required":["title","weight"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluations/{evaluation}":{"get":{"tags":["evaluations"],"operationId":"app_performance_evaluations_show","summary":"GET /api/v1/app/companies/{company}/evaluations/{evaluation}","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evaluation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["evaluations"],"operationId":"app_performance_evaluations_destroy","summary":"DELETE /api/v1/app/companies/{company}/evaluations/{evaluation}","description":"Permission: performance.manage.* or performance.evaluations.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evaluation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.evaluations.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluations/{evaluation}/self":{"post":{"tags":["evaluations"],"operationId":"app_performance_evaluations_self","summary":"POST /api/v1/app/companies/{company}/evaluations/{evaluation}/self","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evaluation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"attachments":{"type":"array","items":{"type":"string","format":"binary"},"nullable":true,"description":"nullable|array|max:10"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluations/{evaluation}/review":{"post":{"tags":["evaluations"],"operationId":"app_performance_evaluations_review","summary":"POST /api/v1/app/companies/{company}/evaluations/{evaluation}/review","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evaluation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluations/{evaluation}/objectives":{"post":{"tags":["evaluations"],"operationId":"app_performance_objectives_store","summary":"objective","description":"objective: name {en, ar}, description {en, ar}, weight, key_results [{name {en, ar}, weight, measurement_unit_id, target}].\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evaluation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluations/{evaluation}/okrs/publish":{"post":{"tags":["evaluations"],"operationId":"app_performance_okrs_publish","summary":"POST /api/v1/app/companies/{company}/evaluations/{evaluation}/okrs/publish","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evaluation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluations/{evaluation}/notes":{"post":{"tags":["evaluations"],"operationId":"app_performance_evaluations_notes","summary":"performance_summary, key_strengths, weaknesses, recommendations, attachments[].","description":"performance_summary, key_strengths, weaknesses, recommendations, attachments[].\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evaluation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluations/{evaluation}/final":{"post":{"tags":["evaluations"],"operationId":"app_performance_evaluations_final","summary":"final_rate_override (0\u2013100), final_notes, notify_people.","description":"final_rate_override (0\u2013100), final_notes, notify_people.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evaluation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"final_rate_override":{"type":"number","description":"required|numeric|min:0|max:100"},"final_notes":{"type":"string","nullable":true,"description":"nullable|string|max:3000"}},"required":["final_rate_override"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluations/{evaluation}/calibrate":{"post":{"tags":["evaluations"],"operationId":"app_performance_calibration_move","summary":"score (0\u2013100), reason.","description":"score (0\u2013100), reason.\n\nPermission: performance.calibrate. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evaluation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.calibrate"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"score":{"type":"number","description":"required|numeric|min:0|max:100"},"reason":{"type":"string","description":"required|string|min:3|'max:' . \\App\\Support\\Limits::chars(1000)"}},"required":["score","reason"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluations/{evaluation}/task-holders":{"put":{"tags":["evaluations"],"operationId":"app_performance_evaluations_task_holders","summary":"okr_writer_id, okr_auditor_ids, result_writer_id, result_auditor_ids (employee ids).","description":"okr_writer_id, okr_auditor_ids, result_writer_id, result_auditor_ids (employee ids).\n\nPermission: performance.manage.* or performance.evaluations.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evaluation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.evaluations.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"okr_writer_id":{"type":"integer","nullable":true,"description":"nullable|integer|$person"},"okr_auditor_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"result_writer_id":{"type":"integer","nullable":true,"description":"nullable|integer|$person"},"result_auditor_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/evaluations/{evaluation}/dates":{"put":{"tags":["evaluations"],"operationId":"app_performance_evaluations_dates","summary":"stages {stage","description":"stages {stage: {start, end}}.\n\nPermission: performance.manage.* or performance.evaluations.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evaluation","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.evaluations.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/events":{"get":{"tags":["events"],"operationId":"app_events_index","summary":"month (YYYY-MM)","description":"month (YYYY-MM): coming up, past, the month's events by day and its holidays.\n\nPermission: self.events or events.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.events","events.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["events"],"operationId":"app_events_store","summary":"title {en, ar}, date, start_time (HH:MM), location, description.","description":"title {en, ar}, date, start_time (HH:MM), location, description.\n\nPermission: events.create. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["events.create"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"date":{"type":"string","format":"date","description":"required|date"},"start_time":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"location":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"}},"required":["title","date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/events/{event}":{"patch":{"tags":["events"],"operationId":"app_events_update_patch","summary":"PATCH /api/v1/app/companies/{company}/events/{event}","description":"Permission: events.edit. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"event","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["events.edit"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"date":{"type":"string","format":"date","description":"required|date"},"start_time":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"location":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"}},"required":["title","date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["events"],"operationId":"app_events_update_put","summary":"PUT /api/v1/app/companies/{company}/events/{event}","description":"Permission: events.edit. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"event","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["events.edit"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"date":{"type":"string","format":"date","description":"required|date"},"start_time":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"location":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"}},"required":["title","date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["events"],"operationId":"app_events_destroy","summary":"DELETE /api/v1/app/companies/{company}/events/{event}","description":"Permission: events.delete. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"event","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["events.delete"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/exchange-rates":{"get":{"tags":["exchange-rates"],"operationId":"app_exchange_rates_index","summary":"Rates, by pair and newest date first","description":"Rates, by pair and newest date first: currency (either side), branch (an id, or \"company\" for company-wide).\n\nPermission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["exchange-rates"],"operationId":"app_exchange_rates_store","summary":"POST /api/v1/app/companies/{company}/exchange-rates","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"from_currency":{"type":"string","description":"$currency"},"to_currency":{"type":"string","description":"$currency|different:from_currency"},"rate":{"type":"number","description":"required|numeric|gt:0"},"effective_date":{"type":"string","format":"date","description":"required|date"},"reverse_rate":{"type":"number","nullable":true,"description":"nullable|numeric|gt:0"},"branch_id":{"type":"string","nullable":true,"description":"nullable|exists:branches,id"}},"required":["rate","effective_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/exchange-rates/multi-currency":{"put":{"tags":["exchange-rates"],"operationId":"app_exchange_rates_toggle","summary":"PUT /api/v1/app/companies/{company}/exchange-rates/multi-currency","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"multi_currency":{"type":"boolean","description":"required|boolean"}},"required":["multi_currency"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/exchange-rates/copy":{"post":{"tags":["exchange-rates"],"operationId":"app_exchange_rates_copy","summary":"POST /api/v1/app/companies/{company}/exchange-rates/copy","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"branch_ids":{"type":"array","items":{"type":"string"},"description":"required|array"},"effective_date":{"type":"string","format":"date","description":"required|date"}},"required":["branch_ids","effective_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/exchange-rates/{rate}":{"delete":{"tags":["exchange-rates"],"operationId":"app_exchange_rates_destroy","summary":"DELETE /api/v1/app/companies/{company}/exchange-rates/{rate}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"rate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/feedback-cycles/{cycle}/results/{employee}":{"get":{"tags":["feedback-cycles"],"operationId":"app_performance_feedback_results","summary":"One employee's summary per reviewer group (HR any time, the employee once the cycle is closed).","description":"One employee's summary per reviewer group (HR any time, the employee once the cycle is closed).\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cycle","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/feedback-cycles":{"get":{"tags":["feedback-cycles"],"operationId":"app_performance_feedback_cycles_index","summary":"GET /api/v1/app/companies/{company}/feedback-cycles","description":"Permission: performance.manage.* or performance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["feedback-cycles"],"operationId":"app_performance_feedback_cycles_store","summary":"name, evaluation_template_id, due_date, peers_per_employee; or a survey cycle (Feedback::createSurveyCycle).","description":"name, evaluation_template_id, due_date, peers_per_employee; or a survey cycle (Feedback::createSurveyCycle).\n\nPermission: performance.manage.* or performance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"required|string|max:150"},"evaluation_template_id":{"type":"integer","description":"required|integer|exists:evaluation_templates,id"},"due_date":{"type":"string","format":"date","description":"required|date|after_or_equal:today"},"peers_per_employee":{"type":"integer","description":"required|integer|between:0,10"},"description":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"start_date":{"type":"string","format":"date","description":"required|date"},"groups":{"type":"array","items":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"properties":{"weight":{"type":"number","nullable":true,"description":"nullable|numeric|between:0,100"}}},"description":"required|array"},"assign_to":{"type":"string","enum":["individual","group"],"description":"required|in:individual,group"},"employees":{"type":"array","items":{"type":"integer"},"description":"exclude_unless:assign_to,individual|required|array|min:1"},"group":{"type":"array","items":{"type":"string","nullable":true},"nullable":true,"description":"nullable|array"},"questions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["rating","open"],"description":"required|in:rating,open"},"text":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(300)"},"helper":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"max":{"type":"integer","nullable":true,"description":"nullable|integer|between:2,10"},"low":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(40)"},"high":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(40)"}}},"description":"required|array|min:1|max:60"}},"required":["name","evaluation_template_id","due_date","peers_per_employee","description","start_date","groups","assign_to","employees","questions"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/feedback-cycles/{cycle}":{"get":{"tags":["feedback-cycles"],"operationId":"app_performance_feedback_cycles_show","summary":"The cycle and, per employee in scope, how many were asked and answered.","description":"The cycle and, per employee in scope, how many were asked and answered.\n\nPermission: performance.manage.* or performance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cycle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["feedback-cycles"],"operationId":"app_performance_feedback_cycles_destroy","summary":"DELETE /api/v1/app/companies/{company}/feedback-cycles/{cycle}","description":"Permission: performance.manage.* or performance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cycle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/feedback-cycles/{cycle}/launch":{"post":{"tags":["feedback-cycles"],"operationId":"app_performance_feedback_cycles_launch","summary":"POST /api/v1/app/companies/{company}/feedback-cycles/{cycle}/launch","description":"Permission: performance.manage.* or performance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cycle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/feedback-cycles/{cycle}/close":{"post":{"tags":["feedback-cycles"],"operationId":"app_performance_feedback_cycles_close","summary":"POST /api/v1/app/companies/{company}/feedback-cycles/{cycle}/close","description":"Permission: performance.manage.* or performance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"cycle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.manage.*","performance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/feedback-form-assignments/{assignment}":{"get":{"tags":["feedback-form-assignments"],"operationId":"app_performance_forms_assignment","summary":"A feedback form assigned to me","description":"A feedback form assigned to me: its questions and my answers (403 for anyone else).\n\nPermission: self.performance.forms. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"assignment","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.performance.forms"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["feedback-form-assignments"],"operationId":"app_performance_forms_answer","summary":"POST /api/v1/app/companies/{company}/feedback-form-assignments/{assignment}","description":"Permission: self.performance.forms. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"assignment","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.performance.forms"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/feedback-forms":{"get":{"tags":["feedback-forms"],"operationId":"app_performance_forms_index","summary":"GET /api/v1/app/companies/{company}/feedback-forms","description":"Permission: performance.feedback_forms.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.feedback_forms.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["feedback-forms"],"operationId":"app_performance_forms_store","summary":"title, description, start_date, end_date, anonymous, questions [...], assign_to individual (employees) | group (group).","description":"title, description, start_date, end_date, anonymous, questions [...], assign_to individual (employees) | group (group).\n\nPermission: performance.feedback_forms.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.feedback_forms.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"required|string|max:200"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"start_date":{"type":"string","format":"date","description":"required|date"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:start_date"},"questions":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["text","textarea","checkbox","radio","rating","yes_no"],"description":"required|in:text,textarea,checkbox,radio,rating,yes_no"},"label":{"type":"string","description":"required|string|max:300"},"helper":{"type":"string","nullable":true,"description":"nullable|string|max:300"},"weight":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:1000"},"options":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string","description":"required|string|max:150"},"value":{"type":"string","description":"required|string|max:150"}}},"nullable":true,"description":"nullable|array|max:50"},"min_rating":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,100"},"max_rating":{"type":"integer","nullable":true,"description":"nullable|integer|between:1,100"}}},"description":"required|array|min:1|max:100"},"assign_to":{"type":"string","enum":["individual","group"],"description":"required|in:individual,group"},"employees":{"type":"array","items":{"type":"integer"},"description":"exclude_unless:assign_to,individual|required|array|min:1"},"group":{"type":"array","items":{"type":"string","nullable":true},"nullable":true,"description":"nullable|array"}},"required":["title","start_date","questions","assign_to","employees"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/feedback-forms/{form}":{"get":{"tags":["feedback-forms"],"operationId":"app_performance_forms_show","summary":"The form, its questions and each question's answers (names hidden when anonymous).","description":"The form, its questions and each question's answers (names hidden when anonymous).\n\nPermission: performance.feedback_forms.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"form","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.feedback_forms.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["feedback-forms"],"operationId":"app_performance_forms_destroy","summary":"DELETE /api/v1/app/companies/{company}/feedback-forms/{form}","description":"Permission: performance.feedback_forms.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"form","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.feedback_forms.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/feedback-requests/{feedbackRequest}":{"post":{"tags":["feedback-requests"],"operationId":"app_performance_feedback_submit","summary":"scores {criterion id","description":"scores {criterion id: 1\u20135}, comment.\n\nPermission: self.performance.feedback. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"feedbackRequest","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.performance.feedback"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"scores":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array"},"comment":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"}},"required":["scores"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/my-jobs":{"get":{"tags":["field"],"operationId":"app_field_my_jobs","summary":"The signed-in employee's jobs","description":"The signed-in employee's jobs: open first, then the last 30 days.\n\nPermission: self.field_jobs or field.jobs.view or field.jobs.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.field_jobs","field.jobs.view","field.jobs.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/my-jobs/{job}":{"get":{"tags":["field"],"operationId":"app_field_my_jobs_show","summary":"One of the employee's jobs with its photos.","description":"One of the employee's jobs with its photos.\n\nPermission: self.field_jobs or field.jobs.view or field.jobs.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.field_jobs","field.jobs.view","field.jobs.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/time-anchor":{"post":{"tags":["field"],"operationId":"app_field_time_anchor","summary":"body","description":"body: device_id, boot_id, elapsed_ms (the phone's since-boot clock as it asks).\n\nPermission: self.field_jobs. Module: fsm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.field_jobs"],"x-modules":["fsm"],"x-rate-limit-per-minute":30,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"device_id":{"type":"string","description":"required|string|max:100"},"boot_id":{"type":"string","nullable":true,"description":"nullable|string|max:100"},"elapsed_ms":{"type":"integer","nullable":true,"description":"nullable|integer|min:0"}},"required":["device_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/device-keys/challenge":{"post":{"tags":["field"],"operationId":"app_field_device_keys_challenge","summary":"POST /api/v1/app/companies/{company}/field/device-keys/challenge","description":"Permission: self.field_jobs. Module: fsm. 10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.field_jobs"],"x-modules":["fsm"],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/device-keys":{"post":{"tags":["field"],"operationId":"app_field_device_keys_store","summary":"device_id, public_key (base64 SPKI P-256), platform, challenge, attestation {android_key_chain | ios_app_attest {key_\u2026","description":"device_id, public_key (base64 SPKI P-256), platform, challenge, attestation {android_key_chain | ios_app_attest {key_id, attestation_object}}.\n\nPermission: self.field_jobs. Module: fsm. 10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.field_jobs"],"x-modules":["fsm"],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"get":{"tags":["field"],"operationId":"app_field_device_keys_index","summary":"The signed-in person's keys in this company.","description":"The signed-in person's keys in this company.\n\nPermission: self.field_jobs. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.field_jobs"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/jobs/{job}/evidence":{"post":{"tags":["field"],"operationId":"app_field_evidence_store","summary":"multipart","description":"multipart: photo (JPEG, as signed), meta (canonical JSON), signature (base64 ECDSA P-256 over meta).\n\nPermission: self.field_jobs. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.field_jobs"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"photo":{"type":"string","format":"binary","description":"required|file|mimetypes:image/jpeg|max:15360"},"meta":{"type":"string","description":"required|string|max:20000"},"signature":{"type":"string","description":"required|string|max:500"}},"required":["photo","meta","signature"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/evidence/{evidence}/photo":{"get":{"tags":["field"],"operationId":"app_field_evidence_photo","summary":"The original JPEG (?size=thumb for the thumbnail)","description":"The original JPEG (?size=thumb for the thumbnail): reviewers, and the employee who took it.\n\nModule: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evidence","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/my-overtime":{"get":{"tags":["field"],"operationId":"app_field_overtime_mine","summary":"GET /api/v1/app/companies/{company}/field/my-overtime","description":"Permission: self.field_overtime. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.field_overtime"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/overtime/{employeeRequest}/submit":{"post":{"tags":["field"],"operationId":"app_field_overtime_submit","summary":"body","description":"body: reason (required), overtime_type_id (optional, a requestable type).\n\nPermission: self.field_overtime. Module: fsm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employeeRequest","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.field_overtime"],"x-modules":["fsm"],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(500)"},"overtime_type_id":{"type":"integer","nullable":true,"description":"nullable|integer"}},"required":["reason"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/overtime/{employeeRequest}/discard":{"post":{"tags":["field"],"operationId":"app_field_overtime_discard","summary":"POST /api/v1/app/companies/{company}/field/overtime/{employeeRequest}/discard","description":"Permission: self.field_overtime. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employeeRequest","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.field_overtime"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/flags":{"get":{"tags":["field"],"operationId":"app_field_flags","summary":"Every flag and reason code with its plain-language label and explanation in English and Arabic.","description":"Every flag and reason code with its plain-language label and explanation in English and Arabic.\n\nPermission: self.field_jobs or field.evidence.review. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.field_jobs","field.evidence.review"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/geocode/search":{"get":{"tags":["field"],"operationId":"app_field_geocode_search","summary":"q (2\u2013200 characters), lang (en|ar, default the UI language), lat and lng (optional, to prefer results near them), lim\u2026","description":"q (2\u2013200 characters), lang (en|ar, default the UI language), lat and lng (optional, to prefer results near them), limit (1\u201310).\n\nPermission: self.field_jobs or field.jobs.view or field.jobs.manage or field_setup.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"required|string|min:2|'max:' . \\App\\Support\\Limits::chars(200)"},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","ar"],"nullable":true},"description":"nullable|in:en,ar"},{"name":"lat","in":"query","required":false,"schema":{"type":"number","nullable":true},"description":"nullable|numeric|between:-90,90|required_with:lng"},{"name":"lng","in":"query","required":false,"schema":{"type":"number","nullable":true},"description":"nullable|numeric|between:-180,180|required_with:lat"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer|between:1,10"}],"x-permissions":["self.field_jobs","field.jobs.view","field.jobs.manage","field_setup.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/geocode/reverse":{"get":{"tags":["field"],"operationId":"app_field_geocode_reverse","summary":"lat, lng, lang (en|ar, default the UI language).","description":"lat, lng, lang (en|ar, default the UI language).\n\nPermission: self.field_jobs or field.jobs.view or field.jobs.manage or field_setup.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"lat","in":"query","required":true,"schema":{"type":"number"},"description":"required|numeric|between:-90,90"},{"name":"lng","in":"query","required":true,"schema":{"type":"number"},"description":"required|numeric|between:-180,180"},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["en","ar"],"nullable":true},"description":"nullable|in:en,ar"}],"x-permissions":["self.field_jobs","field.jobs.view","field.jobs.manage","field_setup.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/jobs":{"get":{"tags":["field"],"operationId":"app_field_jobs_index","summary":"status (one or a list), branch_id, site_id, employee_id, q, date, from, to, flagged, flag, per_page; each job has fla\u2026","description":"status (one or a list), branch_id, site_id, employee_id, q, date, from, to, flagged, flag, per_page; each job has flagged_count.\n\nPermission: field.jobs.view or field.jobs.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.jobs.view","field.jobs.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["field"],"operationId":"app_field_jobs_store","summary":"title, description, branch_id, field_site_id, priority, planned_start_at, planned_end_at, estimated_minutes, assignee\u2026","description":"title, description, branch_id, field_site_id, priority, planned_start_at, planned_end_at, estimated_minutes, assignee_ids.\n\nPermission: field.jobs.create. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.jobs.create"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/jobs/summary":{"get":{"tags":["field"],"operationId":"app_field_jobs_summary","summary":"The board's counts (per status, today, in progress, awaiting review, flagged) under the same filters as jobs.","description":"The board's counts (per status, today, in progress, awaiting review, flagged) under the same filters as jobs.\n\nPermission: field.jobs.view or field.jobs.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.jobs.view","field.jobs.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/jobs/{job}":{"get":{"tags":["field"],"operationId":"app_field_jobs_show","summary":"GET /api/v1/app/companies/{company}/field/jobs/{job}","description":"Permission: field.jobs.view or field.jobs.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.jobs.view","field.jobs.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["field"],"operationId":"app_field_jobs_update","summary":"PATCH /api/v1/app/companies/{company}/field/jobs/{job}","description":"Permission: field.jobs.edit or field.dispatch.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.jobs.edit","field.dispatch.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["field"],"operationId":"app_field_jobs_destroy","summary":"DELETE /api/v1/app/companies/{company}/field/jobs/{job}","description":"Permission: field.jobs.delete. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.jobs.delete"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/jobs/{job}/events":{"get":{"tags":["field"],"operationId":"app_field_jobs_events","summary":"GET /api/v1/app/companies/{company}/field/jobs/{job}/events","description":"Permission: field.jobs.view or field.jobs.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.jobs.view","field.jobs.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/jobs/{job}/overtime":{"get":{"tags":["field"],"operationId":"app_field_jobs_overtime","summary":"GET /api/v1/app/companies/{company}/field/jobs/{job}/overtime","description":"Permission: field.overtime.view. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.overtime.view"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["field"],"operationId":"app_field_jobs_overtime_store","summary":"Draft the job's overtime now (e.g.","description":"Draft the job's overtime now (e.g. switched on after the job was submitted). 422 when the job doesn't qualify.\n\nPermission: field.jobs.overtime. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.jobs.overtime"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/overtime":{"get":{"tags":["field"],"operationId":"app_field_overtime_queue","summary":"Overtime from field jobs in the person's branches.","description":"Overtime from field jobs in the person's branches. status (pending by default, or all), waiting_on_me, q, per_page.\n\nPermission: field.overtime.view. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.overtime.view"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/overtime/{employeeRequest}/decide":{"post":{"tags":["field"],"operationId":"app_field_overtime_decide","summary":"decision approved or rejected, note (required to reject).","description":"decision approved or rejected, note (required to reject).\n\nPermission: field.overtime.approve. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employeeRequest","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.overtime.approve"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"decision":{"type":"string","enum":["approved","rejected"],"description":"required|in:approved,rejected"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"}},"required":["decision"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/sites":{"get":{"tags":["field"],"operationId":"app_field_sites_index","summary":"GET /api/v1/app/companies/{company}/field/sites","description":"Permission: field.sites.view. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.sites.view"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["field"],"operationId":"app_field_sites_store","summary":"name, address, latitude, longitude, radius_m (empty = the company default), active, branch_id (new only).","description":"name, address, latitude, longitude, radius_m (empty = the company default), active, branch_id (new only).\n\nPermission: field.sites.create. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.sites.create"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/dispatch":{"get":{"tags":["field"],"operationId":"app_field_dispatch","summary":"date (Y-m-d, default today), branch_id, status, q.","description":"date (Y-m-d, default today), branch_id, status, q.\n\nPermission: field.dispatch.view. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.dispatch.view"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/jobs/{job}/candidates":{"get":{"tags":["field"],"operationId":"app_field_jobs_candidates","summary":"Who could take the job, best first.","description":"Who could take the job, best first. q: find someone else of the branch by name or number.\n\nPermission: field.dispatch.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.dispatch.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/map-tiles":{"get":{"tags":["field"],"operationId":"app_field_map_tiles","summary":"Where the app's maps take their pictures from (config/mihnaro.php).","description":"Where the app's maps take their pictures from (config/mihnaro.php).\n\nPermission: field.dispatch.view or field.evidence.review. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.dispatch.view","field.evidence.review"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/jobs/{job}/decide":{"post":{"tags":["field"],"operationId":"app_field_jobs_decide","summary":"action approve | reject | cancel, note (required to reject or cancel).","description":"action approve | reject | cancel, note (required to reject or cancel).\n\nPermission: field.jobs.review or field.jobs.cancel. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.jobs.review","field.jobs.cancel"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["approve","reject","cancel"],"description":"required|in:approve,reject,cancel"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"}},"required":["action"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/jobs/{job}/submit-without-departure":{"post":{"tags":["field"],"operationId":"app_field_jobs_submit_without_departure","summary":"reason (required)","description":"reason (required): a job waiting for its departure photo goes to review without it.\n\nPermission: field.jobs.review. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.jobs.review"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","description":"required|string|min:3|'max:' . \\App\\Support\\Limits::chars(1000)"}},"required":["reason"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/jobs/{job}/request-upload":{"post":{"tags":["field"],"operationId":"app_field_jobs_request_upload","summary":"note (optional)","description":"note (optional): tells the job's employees to upload what is still on their phones.\n\nPermission: field.jobs.request_upload. Module: fsm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.jobs.request_upload"],"x-modules":["fsm"],"x-rate-limit-per-minute":30,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/jobs/{job}/reassign":{"post":{"tags":["field"],"operationId":"app_field_jobs_reassign","summary":"employee_id, note (optional).","description":"employee_id, note (optional).\n\nPermission: field.dispatch.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.dispatch.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"}},"required":["employee_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/jobs/bulk-cancel":{"post":{"tags":["field"],"operationId":"app_field_jobs_bulk_cancel","summary":"job_ids[], reason \u2192 {cancelled","description":"job_ids[], reason \u2192 {cancelled: [ids], skipped: [{id, reason: not_found|not_open}]}.\n\nPermission: field.jobs.cancel. Module: fsm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.jobs.cancel"],"x-modules":["fsm"],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/sites/{site}":{"patch":{"tags":["field"],"operationId":"app_field_sites_update","summary":"PATCH /api/v1/app/companies/{company}/field/sites/{site}","description":"Permission: field.sites.edit. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"site","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.sites.edit"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["field"],"operationId":"app_field_sites_destroy","summary":"DELETE /api/v1/app/companies/{company}/field/sites/{site}","description":"Permission: field.sites.delete. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"site","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.sites.delete"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/customers":{"get":{"tags":["field"],"operationId":"app_field_customers_index","summary":"q, branch_id, active, per_page.","description":"q, branch_id, active, per_page.\n\nPermission: field.customers.view. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.customers.view"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["field"],"operationId":"app_field_customers_store","summary":"POST /api/v1/app/companies/{company}/field/customers","description":"Permission: field.customers.create. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.customers.create"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/customers/{customer}":{"get":{"tags":["field"],"operationId":"app_field_customers_show","summary":"GET /api/v1/app/companies/{company}/field/customers/{customer}","description":"Permission: field.customers.view. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"customer","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.customers.view"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["field"],"operationId":"app_field_customers_update","summary":"PATCH /api/v1/app/companies/{company}/field/customers/{customer}","description":"Permission: field.customers.edit. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"customer","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.customers.edit"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["field"],"operationId":"app_field_customers_destroy","summary":"DELETE /api/v1/app/companies/{company}/field/customers/{customer}","description":"Permission: field.customers.delete. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"customer","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.customers.delete"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/evidence/{evidence}/void":{"post":{"tags":["field"],"operationId":"app_field_evidence_void","summary":"reason (required).","description":"reason (required).\n\nPermission: field.evidence.void. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evidence","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.evidence.void"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","description":"required|string|min:3|'max:' . \\App\\Support\\Limits::chars(1000)"}},"required":["reason"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/devices":{"get":{"tags":["field"],"operationId":"app_field_devices_index","summary":"Every phone key in the reviewer's branches.","description":"Every phone key in the reviewer's branches.\n\nPermission: field.evidence.devices. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.evidence.devices"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/devices/{key}/revoke":{"post":{"tags":["field"],"operationId":"app_field_devices_revoke","summary":"POST /api/v1/app/companies/{company}/field/devices/{key}/revoke","description":"Permission: field.evidence.devices. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"key","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":["field.evidence.devices"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/evidence":{"get":{"tags":["field"],"operationId":"app_field_evidence_index","summary":"job_id, stage, employee_id, accepted, flag, voided, per_page.","description":"job_id, stage, employee_id, accepted, flag, voided, per_page.\n\nPermission: field.evidence.review. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.evidence.review"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/evidence/{evidence}":{"get":{"tags":["field"],"operationId":"app_field_evidence_show","summary":"GET /api/v1/app/companies/{company}/field/evidence/{evidence}","description":"Permission: field.evidence.review. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evidence","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.evidence.review"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/evidence/{evidence}/c2pa":{"get":{"tags":["field"],"operationId":"app_field_evidence_c2pa","summary":"The photo's C2PA (Content Credentials) copy","description":"The photo's C2PA (Content Credentials) copy: its status, validation, trust and assertions (docs/field-proof.md \u00a722).\n\nPermission: field.evidence.review. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evidence","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.evidence.review"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/evidence/{evidence}/c2pa/download":{"get":{"tags":["field"],"operationId":"app_field_evidence_c2pa_download","summary":"The C2PA copy itself (JPEG with the embedded, server-signed manifest), when signed, valid and the photo not voided.","description":"The C2PA copy itself (JPEG with the embedded, server-signed manifest), when signed, valid and the photo not voided.\n\nPermission: field.evidence.review. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evidence","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.evidence.review"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/technicians":{"get":{"tags":["field"],"operationId":"app_field_technicians_index","summary":"q, availability, skill, zone, branch_id, per_page.","description":"q, availability, skill, zone, branch_id, per_page. meta.options has the skills and zones in use.\n\nPermission: field.technicians.view or field.technicians.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.technicians.view","field.technicians.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["field"],"operationId":"app_field_technicians_store","summary":"employee_id, skills, zones, availability, available_until, work_days (0 = Sunday), day_start, day_end, max_daily_jobs\u2026","description":"employee_id, skills, zones, availability, available_until, work_days (0 = Sunday), day_start, day_end, max_daily_jobs, notes.\n\nPermission: field.technicians.create. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.technicians.create"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/technicians/export":{"get":{"tags":["field"],"operationId":"app_field_technicians_export","summary":"GET /api/v1/app/companies/{company}/field/technicians/export","description":"Permission: field.technicians.export. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.technicians.export"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/technicians/{technician}":{"get":{"tags":["field"],"operationId":"app_field_technicians_show","summary":"GET /api/v1/app/companies/{company}/field/technicians/{technician}","description":"Permission: field.technicians.view or field.technicians.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"technician","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.technicians.view","field.technicians.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["field"],"operationId":"app_field_technicians_update","summary":"PATCH /api/v1/app/companies/{company}/field/technicians/{technician}","description":"Permission: field.technicians.edit. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"technician","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.technicians.edit"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["field"],"operationId":"app_field_technicians_destroy","summary":"DELETE /api/v1/app/companies/{company}/field/technicians/{technician}","description":"Permission: field.technicians.delete. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"technician","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.technicians.delete"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/parts":{"get":{"tags":["field"],"operationId":"app_field_inventory_parts_index","summary":"q, category, branch_id, low (1 = at or under the minimum), active, per_page.","description":"q, category, branch_id, low (1 = at or under the minimum), active, per_page.\n\nPermission: field.inventory.view or field.inventory.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.view","field.inventory.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["field"],"operationId":"app_field_inventory_parts_store","summary":"sku, name, category, unit, unit_cost, supplier, min_stock, notes, active, branch_id.","description":"sku, name, category, unit, unit_cost, supplier, min_stock, notes, active, branch_id.\n\nPermission: field.inventory.create. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.create"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/parts/export":{"get":{"tags":["field"],"operationId":"app_field_inventory_parts_export","summary":"GET /api/v1/app/companies/{company}/field/inventory/parts/export","description":"Permission: field.inventory.export. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.export"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/parts/{part}":{"get":{"tags":["field"],"operationId":"app_field_inventory_parts_show","summary":"GET /api/v1/app/companies/{company}/field/inventory/parts/{part}","description":"Permission: field.inventory.view or field.inventory.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"part","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.view","field.inventory.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["field"],"operationId":"app_field_inventory_parts_update","summary":"PATCH /api/v1/app/companies/{company}/field/inventory/parts/{part}","description":"Permission: field.inventory.edit. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"part","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.edit"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["field"],"operationId":"app_field_inventory_parts_destroy","summary":"DELETE /api/v1/app/companies/{company}/field/inventory/parts/{part}","description":"Permission: field.inventory.delete. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"part","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.delete"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/parts/{part}/receive":{"post":{"tags":["field"],"operationId":"app_field_inventory_parts_receive","summary":"location_id, quantity, reference, note.","description":"location_id, quantity, reference, note.\n\nPermission: field.inventory.receive. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"part","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.receive"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/parts/{part}/adjust":{"post":{"tags":["field"],"operationId":"app_field_inventory_parts_adjust","summary":"location_id, counted, note (required).","description":"location_id, counted, note (required).\n\nPermission: field.inventory.adjust. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"part","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.adjust"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/parts/{part}/transfer":{"post":{"tags":["field"],"operationId":"app_field_inventory_parts_transfer","summary":"from_location_id, to_location_id, quantity, note.","description":"from_location_id, to_location_id, quantity, note.\n\nPermission: field.inventory.transfer. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"part","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.transfer"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/parts/{part}/issue":{"post":{"tags":["field"],"operationId":"app_field_inventory_parts_issue","summary":"location_id, job_id, quantity, employee_id, note.","description":"location_id, job_id, quantity, employee_id, note.\n\nPermission: field.inventory.issue. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"part","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.issue"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/parts/{part}/return":{"post":{"tags":["field"],"operationId":"app_field_inventory_parts_return","summary":"location_id, job_id, quantity, note.","description":"location_id, job_id, quantity, note.\n\nPermission: field.inventory.issue. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"part","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.issue"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/locations":{"get":{"tags":["field"],"operationId":"app_field_inventory_locations_index","summary":"q, active, branch_id.","description":"q, active, branch_id.\n\nPermission: field.inventory.view or field.inventory.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.view","field.inventory.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["field"],"operationId":"app_field_inventory_locations_store","summary":"name, kind (warehouse, van, site), address, active, branch_id.","description":"name, kind (warehouse, van, site), address, active, branch_id.\n\nPermission: field.inventory.locations. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.locations"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/locations/{location}":{"get":{"tags":["field"],"operationId":"app_field_inventory_locations_show","summary":"The location and what it holds.","description":"The location and what it holds.\n\nPermission: field.inventory.view or field.inventory.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"location","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.view","field.inventory.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["field"],"operationId":"app_field_inventory_locations_update","summary":"PATCH /api/v1/app/companies/{company}/field/inventory/locations/{location}","description":"Permission: field.inventory.locations. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"location","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.locations"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["field"],"operationId":"app_field_inventory_locations_destroy","summary":"DELETE /api/v1/app/companies/{company}/field/inventory/locations/{location}","description":"Permission: field.inventory.locations. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"location","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.locations"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/movements":{"get":{"tags":["field"],"operationId":"app_field_inventory_movements_index","summary":"part_id, location_id, job_id, type, from, to, branch_id, q, per_page.","description":"part_id, location_id, job_id, type, from, to, branch_id, q, per_page.\n\nPermission: field.inventory.view or field.inventory.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.view","field.inventory.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/movements/export":{"get":{"tags":["field"],"operationId":"app_field_inventory_movements_export","summary":"GET /api/v1/app/companies/{company}/field/inventory/movements/export","description":"Permission: field.inventory.export. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.export"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/inventory/jobs/{job}/parts":{"get":{"tags":["field"],"operationId":"app_field_inventory_jobs_parts","summary":"The parts on a work order, net of what came back.","description":"The parts on a work order, net of what came back.\n\nPermission: field.inventory.view or field.inventory.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.inventory.view","field.inventory.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/vehicles":{"get":{"tags":["field"],"operationId":"app_field_vehicles_index","summary":"q, status, driver_id, branch_id, per_page.","description":"q, status, driver_id, branch_id, per_page.\n\nPermission: field.vehicles.view or field.vehicles.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.view","field.vehicles.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["field"],"operationId":"app_field_vehicles_store","summary":"plate_number, make, model, year, vin, status, driver_employee_id, odometer_km, notes, branch_id.","description":"plate_number, make, model, year, vin, status, driver_employee_id, odometer_km, notes, branch_id.\n\nPermission: field.vehicles.create. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.create"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/vehicles/alerts":{"get":{"tags":["field"],"operationId":"app_field_vehicles_alerts","summary":"GET /api/v1/app/companies/{company}/field/vehicles/alerts","description":"Permission: field.vehicles.view or field.vehicles.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.view","field.vehicles.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/vehicles/export":{"get":{"tags":["field"],"operationId":"app_field_vehicles_export","summary":"GET /api/v1/app/companies/{company}/field/vehicles/export","description":"Permission: field.vehicles.export. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.export"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/vehicles/{vehicle}":{"get":{"tags":["field"],"operationId":"app_field_vehicles_show","summary":"GET /api/v1/app/companies/{company}/field/vehicles/{vehicle}","description":"Permission: field.vehicles.view or field.vehicles.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.view","field.vehicles.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["field"],"operationId":"app_field_vehicles_update","summary":"PATCH /api/v1/app/companies/{company}/field/vehicles/{vehicle}","description":"Permission: field.vehicles.edit or field.vehicles.driver. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.edit","field.vehicles.driver"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["field"],"operationId":"app_field_vehicles_destroy","summary":"DELETE /api/v1/app/companies/{company}/field/vehicles/{vehicle}","description":"Permission: field.vehicles.delete. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.delete"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/vehicles/{vehicle}/documents":{"get":{"tags":["field"],"operationId":"app_field_vehicles_documents_index","summary":"GET /api/v1/app/companies/{company}/field/vehicles/{vehicle}/documents","description":"Permission: field.vehicles.view or field.vehicles.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.view","field.vehicles.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["field"],"operationId":"app_field_vehicles_documents_store","summary":"documents","description":"documents: type, number, expires_on, note. maintenance: done_on, kind, description, vendor, cost, odometer_km, next_due_on. fuel: filled_on, liters, cost, odometer_km, station, employee_id.\n\nPermission: field.vehicles.documents. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.documents"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/vehicles/{vehicle}/documents/{row}":{"patch":{"tags":["field"],"operationId":"app_field_vehicles_documents_update","summary":"PATCH /api/v1/app/companies/{company}/field/vehicles/{vehicle}/documents/{row}","description":"Permission: field.vehicles.documents. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}},{"name":"row","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.documents"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["field"],"operationId":"app_field_vehicles_documents_destroy","summary":"DELETE /api/v1/app/companies/{company}/field/vehicles/{vehicle}/documents/{row}","description":"Permission: field.vehicles.documents. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}},{"name":"row","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.documents"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/vehicles/{vehicle}/maintenance":{"get":{"tags":["field"],"operationId":"app_field_vehicles_maintenance_index","summary":"GET /api/v1/app/companies/{company}/field/vehicles/{vehicle}/maintenance","description":"Permission: field.vehicles.view or field.vehicles.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.view","field.vehicles.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["field"],"operationId":"app_field_vehicles_maintenance_store","summary":"documents","description":"documents: type, number, expires_on, note. maintenance: done_on, kind, description, vendor, cost, odometer_km, next_due_on. fuel: filled_on, liters, cost, odometer_km, station, employee_id.\n\nPermission: field.vehicles.maintenance. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.maintenance"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/vehicles/{vehicle}/maintenance/{row}":{"patch":{"tags":["field"],"operationId":"app_field_vehicles_maintenance_update","summary":"PATCH /api/v1/app/companies/{company}/field/vehicles/{vehicle}/maintenance/{row}","description":"Permission: field.vehicles.maintenance. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}},{"name":"row","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.maintenance"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["field"],"operationId":"app_field_vehicles_maintenance_destroy","summary":"DELETE /api/v1/app/companies/{company}/field/vehicles/{vehicle}/maintenance/{row}","description":"Permission: field.vehicles.maintenance. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}},{"name":"row","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.maintenance"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/vehicles/{vehicle}/fuel":{"get":{"tags":["field"],"operationId":"app_field_vehicles_fuel_index","summary":"GET /api/v1/app/companies/{company}/field/vehicles/{vehicle}/fuel","description":"Permission: field.vehicles.view or field.vehicles.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.view","field.vehicles.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["field"],"operationId":"app_field_vehicles_fuel_store","summary":"documents","description":"documents: type, number, expires_on, note. maintenance: done_on, kind, description, vendor, cost, odometer_km, next_due_on. fuel: filled_on, liters, cost, odometer_km, station, employee_id.\n\nPermission: field.vehicles.fuel. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.fuel"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/vehicles/{vehicle}/fuel/{row}":{"patch":{"tags":["field"],"operationId":"app_field_vehicles_fuel_update","summary":"PATCH /api/v1/app/companies/{company}/field/vehicles/{vehicle}/fuel/{row}","description":"Permission: field.vehicles.fuel. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}},{"name":"row","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.fuel"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["field"],"operationId":"app_field_vehicles_fuel_destroy","summary":"DELETE /api/v1/app/companies/{company}/field/vehicles/{vehicle}/fuel/{row}","description":"Permission: field.vehicles.fuel. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"vehicle","in":"path","required":true,"schema":{"type":"integer"}},{"name":"row","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field.vehicles.fuel"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/settings":{"get":{"tags":["field"],"operationId":"app_field_settings","summary":"GET /api/v1/app/companies/{company}/field/settings","description":"Permission: field_setup.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field_setup.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["field"],"operationId":"app_field_settings_update","summary":"Any field_* setting (docs/field-proof.md); the others keep their value.","description":"Any field_* setting (docs/field-proof.md); the others keep their value.\n\nPermission: field_setup.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field_setup.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/field/settings/branches/{branch}":{"get":{"tags":["field"],"operationId":"app_field_settings_branch","summary":"Every key","description":"Every key: {company, branch (null = inherited), effective, source}.\n\nPermission: field_setup.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field_setup.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["field"],"operationId":"app_field_settings_branch_update","summary":"Any field_* key; null or \"inherit\" takes it back to the company's value.","description":"Any field_* key; null or \"inherit\" takes it back to the company's value.\n\nPermission: field_setup.manage. Module: fsm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["field_setup.manage"],"x-modules":["fsm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/financial-transactions":{"get":{"tags":["financial-transactions"],"operationId":"app_payroll_transactions","summary":"Financial transactions in my scope","description":"Financial transactions in my scope: month, employee_id, type (earning | deduction), off_cycle.\n\nPermission: payroll.transactions.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.transactions.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["financial-transactions"],"operationId":"app_payroll_transactions_store","summary":"As the Add new financial transaction page","description":"As the Add new financial transaction page: effective_date (or month), off_cycle (with paid_cash, deduct_tax, amount_type total|net, mark_paid), and attachment or attachments[] files.\n\nPermission: payroll.transactions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.transactions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"transaction_type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:transaction_types,id"},"type":{"type":"string","enum":["earning","deduction"],"nullable":true,"description":"required_without:transaction_type_id|nullable|in:earning,deduction"},"category":{"type":"string","enum":["bonus","commission","overtime","expense","per_diem","air_ticket","penalty","other"],"nullable":true,"description":"required_without:transaction_type_id|nullable|in:bonus,commission,overtime,expense,per_diem,air_ticket,penalty,other"},"amount":{"type":"number","description":"required|numeric|min:0.01"},"month":{"type":"string","format":"date","nullable":true,"description":"required_without:effective_date|nullable|date_format:Y-m"},"effective_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:Y-m-d"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(255)"},"amount_type":{"type":"string","enum":["total","net"],"nullable":true,"description":"nullable|in:total,net"}},"required":["employee_id","amount"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/financial-transactions/{transaction}":{"get":{"tags":["financial-transactions"],"operationId":"app_payroll_transactions_show","summary":"One transaction in my scope, with the employee and its attachments' names.","description":"One transaction in my scope, with the employee and its attachments' names.\n\nPermission: payroll.transactions.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"transaction","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.transactions.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["financial-transactions"],"operationId":"app_payroll_transactions_update","summary":"Edit an unpaid transaction added by HR","description":"Edit an unpaid transaction added by HR: the fields of storeTransaction; new files join its attachments.\n\nPermission: payroll.transactions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"transaction","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.transactions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"transaction_type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:transaction_types,id"},"type":{"type":"string","enum":["earning","deduction"],"nullable":true,"description":"required_without:transaction_type_id|nullable|in:earning,deduction"},"category":{"type":"string","enum":["bonus","commission","overtime","expense","per_diem","air_ticket","penalty","other"],"nullable":true,"description":"required_without:transaction_type_id|nullable|in:bonus,commission,overtime,expense,per_diem,air_ticket,penalty,other"},"amount":{"type":"number","description":"required|numeric|min:0.01"},"month":{"type":"string","format":"date","nullable":true,"description":"required_without:effective_date|nullable|date_format:Y-m"},"effective_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:Y-m-d"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(255)"},"amount_type":{"type":"string","enum":["total","net"],"nullable":true,"description":"nullable|in:total,net"}},"required":["employee_id","amount"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["financial-transactions"],"operationId":"app_payroll_transactions_destroy","summary":"DELETE /api/v1/app/companies/{company}/financial-transactions/{transaction}","description":"Permission: payroll.transactions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"transaction","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.transactions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/financial-transactions/bulk-delete":{"post":{"tags":["financial-transactions"],"operationId":"app_payroll_transactions_bulk_destroy","summary":"ids","description":"ids: unpaid, regular-payroll transactions of employees in payroll.manage scope; returns how many were deleted.\n\nPermission: payroll.transactions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.transactions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1"}},"required":["ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/financial-transactions/{transaction}/next-month":{"post":{"tags":["financial-transactions"],"operationId":"app_payroll_transactions_next_month","summary":"POST /api/v1/app/companies/{company}/financial-transactions/{transaction}/next-month","description":"Permission: payroll.transactions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"transaction","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.transactions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/financial-transactions/amortized":{"post":{"tags":["financial-transactions"],"operationId":"app_payroll_transactions_amortized","summary":"employee_id, type earning|deduction, amount, months (2-60), start_month (Y-m), description.","description":"employee_id, type earning|deduction, amount, months (2-60), start_month (Y-m), description.\n\nPermission: payroll.expenses.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.expenses.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"type":{"type":"string","enum":["earning","deduction"],"description":"required|in:earning,deduction"},"amount":{"type":"number","description":"required|numeric|gt:0"},"months":{"type":"integer","description":"required|integer|min:2|max:60"},"start_month":{"type":"string","format":"date","description":"required|date_format:Y-m"},"description":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(190)"}},"required":["employee_id","type","amount","months","start_month","description"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/{kind}/{id}/comments":{"get":{"tags":["general"],"operationId":"app_requests_comments","summary":"GET /api/v1/app/companies/{company}/{kind}/{id}/comments","description":"Permission: self.requests.view or self.approvals.decide or requests.view or requests.manage or self.leaves.view or leaves.view or leaves.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^requests|leaves$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.requests.view","self.approvals.decide","requests.view","requests.manage","self.leaves.view","leaves.view","leaves.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["general"],"operationId":"app_requests_comments_store","summary":"POST /api/v1/app/companies/{company}/{kind}/{id}/comments","description":"Permission: self.requests.view or self.approvals.decide or requests.view or requests.manage or self.leaves.view or leaves.view or leaves.manage. Module: hrm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^requests|leaves$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.requests.view","self.approvals.decide","requests.view","requests.manage","self.leaves.view","leaves.view","leaves.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":30,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/general-factor-templates":{"post":{"tags":["general-factor-templates"],"operationId":"app_performance_factor_templates_store","summary":"name {en, ar}, branch_ids, factors [{name {en, ar}, weight}].","description":"name {en, ar}, branch_ids, factors [{name {en, ar}, weight}].\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/general-factor-templates/{template}":{"patch":{"tags":["general-factor-templates"],"operationId":"app_performance_factor_templates_update_patch","summary":"name {en, ar}, branch_ids, factors [{name {en, ar}, weight}].","description":"name {en, ar}, branch_ids, factors [{name {en, ar}, weight}].\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["general-factor-templates"],"operationId":"app_performance_factor_templates_update_put","summary":"name {en, ar}, branch_ids, factors [{name {en, ar}, weight}].","description":"name {en, ar}, branch_ids, factors [{name {en, ar}, weight}].\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["general-factor-templates"],"operationId":"app_performance_factor_templates_destroy","summary":"DELETE /api/v1/app/companies/{company}/general-factor-templates/{template}","description":"Permission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/geolocations":{"get":{"tags":["geolocations"],"operationId":"app_geolocations_index","summary":"GET /api/v1/app/companies/{company}/geolocations","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["geolocations"],"operationId":"app_geolocations_store","summary":"POST /api/v1/app/companies/{company}/geolocations","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/geolocations/{location}":{"patch":{"tags":["geolocations"],"operationId":"app_geolocations_update","summary":"Send only what changes.","description":"Send only what changes.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"location","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["geolocations"],"operationId":"app_geolocations_destroy","summary":"DELETE /api/v1/app/companies/{company}/geolocations/{location}","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"location","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/geolocations/{location}/bulk":{"post":{"tags":["geolocations"],"operationId":"app_geolocations_bulk","summary":"action assign|unassign|replace","description":"action assign|unassign|replace: this location for every active employee in reach (attendance.manage).\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"location","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["assign","unassign","replace"],"description":"required|in:assign,unassign,replace"}},"required":["action"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/goals":{"post":{"tags":["goals"],"operationId":"app_performance_goals_store","summary":"employee_id or employee_ids (default","description":"employee_id or employee_ids (default: me), title, description, due_date.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"employee_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"title":{"type":"string","description":"required|string|max:200"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"due_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"}},"required":["title"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/goals/{goal}":{"patch":{"tags":["goals"],"operationId":"app_performance_goals_update","summary":"progress, status.","description":"progress, status.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"goal","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["goals"],"operationId":"app_performance_goals_destroy","summary":"DELETE /api/v1/app/companies/{company}/goals/{goal}","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"goal","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/help":{"get":{"tags":["help"],"operationId":"app_help_index","summary":"The help center","description":"The help center: the topics the person may use, in their language (docs/help.md).\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/holiday-calendar":{"get":{"tags":["holiday-calendar"],"operationId":"app_holidays_calendar","summary":"GET holiday-calendar?month=YYYY-MM","description":"GET holiday-calendar?month=YYYY-MM\n\nPermission: self.holiday_calendar or leaves.view or employees.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.holiday_calendar","leaves.view","employees.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/holidays":{"get":{"tags":["holidays"],"operationId":"app_holidays_index","summary":"The year's holidays (?year, this year by default).","description":"The year's holidays (?year, this year by default).\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["holidays"],"operationId":"app_holidays_store","summary":"POST /api/v1/app/companies/{company}/holidays","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"date":{"type":"string","format":"date","description":"required|date|unique:holidays,date"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:date"},"religions":{"type":"array","items":{"type":"string","enum":["muslim","christian","hindu","buddhist","sikh","other"]},"nullable":true,"description":"nullable|array"}},"required":["name","date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/holidays/{holiday}":{"patch":{"tags":["holidays"],"operationId":"app_holidays_update","summary":"Send only what changes.","description":"Send only what changes.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"holiday","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["holidays"],"operationId":"app_holidays_destroy","summary":"DELETE /api/v1/app/companies/{company}/holidays/{holiday}","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"holiday","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/import":{"get":{"tags":["import"],"operationId":"app_import_index","summary":"GET /api/v1/app/companies/{company}/import","description":"Permission: employees.import. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.import"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/import/{type}/template":{"get":{"tags":["import"],"operationId":"app_import_template","summary":"The CSV template (language en|ar); existing=1 fills it with the current data.","description":"The CSV template (language en|ar); existing=1 fills it with the current data. Preview is upload without commit.\n\nPermission: employees.import. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":["employees.import"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/import/{type}":{"post":{"tags":["import"],"operationId":"app_import_upload","summary":"POST /api/v1/app/companies/{company}/import/{type}","description":"Permission: employees.import. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":["employees.import"],"x-modules":[],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"required|file|max:10240|extensions:csv,xlsx"},"mode":{"type":"string","enum":["create","update"],"nullable":true,"description":"nullable|in:create,update"},"language":{"type":"string","enum":["en","ar"],"nullable":true,"description":"nullable|in:en,ar"},"map":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"},"commit":{"type":"boolean","description":"sometimes|boolean"},"options":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"}},"required":["file"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/imported-sheets":{"get":{"tags":["imported-sheets"],"operationId":"app_import_logs","summary":"GET /api/v1/app/companies/{company}/imported-sheets","description":"Permission: employees.import. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.import"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/insurance-members/{member}":{"delete":{"tags":["insurance-members"],"operationId":"app_insurance_members_destroy","summary":"DELETE /api/v1/app/companies/{company}/insurance-members/{member}","description":"Permission: payroll.insurance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"member","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.insurance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/insurance-policies":{"get":{"tags":["insurance-policies"],"operationId":"app_insurance_index","summary":"Policies, latest expiry first, each with its members in my scope; active=1 keeps the policies in force today.","description":"Policies, latest expiry first, each with its members in my scope; active=1 keeps the policies in force today.\n\nPermission: payroll.insurance.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.insurance.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["insurance-policies"],"operationId":"app_insurance_store","summary":"POST /api/v1/app/companies/{company}/insurance-policies","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"insurer":{"type":"string","description":"required|string|max:120"},"policy_number":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"start_date":{"type":"string","format":"date","description":"required|date"},"expiry_date":{"type":"string","format":"date","description":"required|date|after:start_date"},"cost_adult":{"type":"number","description":"required|numeric|min:0"},"cost_minor":{"type":"number","description":"required|numeric|min:0"},"currency_adult":{"type":"string","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLP","CNY","COP","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VES","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWL"],"nullable":true,"description":"nullable|in:AED,AFN,ALL,AMD,ANG,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BTN,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ERN,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HTG,HUF,IDR,ILS,INR,IQD,IRR,ISK,JMD,JOD,JPY,KES,KGS,KHR,KMF,KPW,KRW,KWD,KYD,KZT,LAK,LBP,LKR,LRD,LSL,LYD,MAD,MDL,MGA,MKD,MMK,MNT,MOP,MRU,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SDG,SEK,SGD,SHP,SLE,SOS,SRD,SSP,STN,SVC,SYP,SZL,THB,TJS,TMT,TND,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW,ZWL"},"currency_minor":{"type":"string","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLP","CNY","COP","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VES","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWL"],"nullable":true,"description":"nullable|in:AED,AFN,ALL,AMD,ANG,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BTN,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ERN,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HTG,HUF,IDR,ILS,INR,IQD,IRR,ISK,JMD,JOD,JPY,KES,KGS,KHR,KMF,KPW,KRW,KWD,KYD,KZT,LAK,LBP,LKR,LRD,LSL,LYD,MAD,MDL,MGA,MKD,MMK,MNT,MOP,MRU,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SDG,SEK,SGD,SHP,SLE,SOS,SRD,SSP,STN,SVC,SYP,SZL,THB,TJS,TMT,TND,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW,ZWL"},"branch_id":{"type":"string","nullable":true,"description":"nullable|exists:branches,id"}},"required":["insurer","start_date","expiry_date","cost_adult","cost_minor"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/insurance-policies/{policy}":{"get":{"tags":["insurance-policies"],"operationId":"app_insurance_show","summary":"GET /api/v1/app/companies/{company}/insurance-policies/{policy}","description":"Permission: payroll.insurance.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.insurance.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["insurance-policies"],"operationId":"app_insurance_update","summary":"PUT /api/v1/app/companies/{company}/insurance-policies/{policy}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"insurer":{"type":"string","description":"required|string|max:120"},"policy_number":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"start_date":{"type":"string","format":"date","description":"required|date"},"expiry_date":{"type":"string","format":"date","description":"required|date|after:start_date"},"cost_adult":{"type":"number","description":"required|numeric|min:0"},"cost_minor":{"type":"number","description":"required|numeric|min:0"},"currency_adult":{"type":"string","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLP","CNY","COP","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VES","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWL"],"nullable":true,"description":"nullable|in:AED,AFN,ALL,AMD,ANG,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BTN,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ERN,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HTG,HUF,IDR,ILS,INR,IQD,IRR,ISK,JMD,JOD,JPY,KES,KGS,KHR,KMF,KPW,KRW,KWD,KYD,KZT,LAK,LBP,LKR,LRD,LSL,LYD,MAD,MDL,MGA,MKD,MMK,MNT,MOP,MRU,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SDG,SEK,SGD,SHP,SLE,SOS,SRD,SSP,STN,SVC,SYP,SZL,THB,TJS,TMT,TND,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW,ZWL"},"currency_minor":{"type":"string","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLP","CNY","COP","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VES","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWL"],"nullable":true,"description":"nullable|in:AED,AFN,ALL,AMD,ANG,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BTN,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ERN,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HTG,HUF,IDR,ILS,INR,IQD,IRR,ISK,JMD,JOD,JPY,KES,KGS,KHR,KMF,KPW,KRW,KWD,KYD,KZT,LAK,LBP,LKR,LRD,LSL,LYD,MAD,MDL,MGA,MKD,MMK,MNT,MOP,MRU,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SDG,SEK,SGD,SHP,SLE,SOS,SRD,SSP,STN,SVC,SYP,SZL,THB,TJS,TMT,TND,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW,ZWL"},"branch_id":{"type":"string","nullable":true,"description":"nullable|exists:branches,id"}},"required":["insurer","start_date","expiry_date","cost_adult","cost_minor"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["insurance-policies"],"operationId":"app_insurance_destroy","summary":"DELETE /api/v1/app/companies/{company}/insurance-policies/{policy}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/insurance-policies/{policy}/members":{"post":{"tags":["insurance-policies"],"operationId":"app_insurance_members_store","summary":"POST /api/v1/app/companies/{company}/insurance-policies/{policy}/members","description":"Permission: payroll.insurance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.insurance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"family_member_id":{"type":"string","nullable":true,"description":"nullable|exists:family_members,id"},"offline_insurance_id":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"start_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:start_date"},"adult_dependents":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:20"},"minor_dependents":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:20"},"custom_cost":{"type":"number","nullable":true,"description":"nullable|required_if:custom_setup,1|numeric|min:0"},"monthly_deduction":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"}},"required":["employee_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/integrations/marketplace":{"get":{"tags":["integrations"],"operationId":"app_integrations_marketplace","summary":"GET integrations/marketplace?category=&active=active|inactive&q=","description":"GET integrations/marketplace?category=&active=active|inactive&q=: the connector catalogue and each one's state.\n\nPermission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/integrations/connections":{"get":{"tags":["integrations"],"operationId":"app_integrations_connections_index","summary":"GET /api/v1/app/companies/{company}/integrations/connections","description":"Permission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/integrations/connections/{provider}/mode":{"put":{"tags":["integrations"],"operationId":"app_integrations_connections_mode","summary":"PUT /api/v1/app/companies/{company}/integrations/connections/{provider}/mode","description":"Permission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^zoom|google|microsoft|linkedin|odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/integrations/connections/{provider}":{"put":{"tags":["integrations"],"operationId":"app_integrations_connections_save","summary":"PUT /api/v1/app/companies/{company}/integrations/connections/{provider}","description":"Permission: integrations.manage.*. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^zoom|google|microsoft|linkedin|odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":20,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"app":{"type":"string","enum":["own","platform"],"description":"sometimes|in:own,platform"},"client_id":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"client_secret":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:500"},"tenant":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:64|regex:/^[A-Za-z0-9.-]+$/"},"organization":{"type":"string","nullable":true,"description":"sometimes|nullable|digits_between:3,20"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["integrations"],"operationId":"app_integrations_connections_disconnect","summary":"DELETE /api/v1/app/companies/{company}/integrations/connections/{provider}","description":"Permission: integrations.manage.*. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^zoom|google|microsoft|linkedin|odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/integrations/connections/{provider}/authorize-url":{"post":{"tags":["integrations"],"operationId":"app_integrations_connections_authorize","summary":"The consent page to open in a browser where the same person is signed in to Mihnaro.","description":"The consent page to open in a browser where the same person is signed in to Mihnaro.\n\nPermission: integrations.manage.*. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^zoom|google|microsoft|linkedin|odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/integrations/connections/{provider}/test":{"post":{"tags":["integrations"],"operationId":"app_integrations_connections_test","summary":"POST /api/v1/app/companies/{company}/integrations/connections/{provider}/test","description":"Permission: integrations.manage.*. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"provider","in":"path","required":true,"schema":{"type":"string","pattern":"^zoom|google|microsoft|linkedin|odoo|quickbooks|xero|netsuite|business_central|sap_b1|sap_s4hana|dynamics_fo$"}}],"x-permissions":["integrations.manage.*"],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/job-grade-levels/{level}":{"delete":{"tags":["job-grade-levels"],"operationId":"app_job_grades_levels_destroy","summary":"DELETE /api/v1/app/companies/{company}/job-grade-levels/{level}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"level","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/job-grades":{"get":{"tags":["job-grades"],"operationId":"app_job_grades_index","summary":"The job grades with their ranges, levels, leave days, headcount, average, compa-ratio and who is outside the range.","description":"The job grades with their ranges, levels, leave days, headcount, average, compa-ratio and who is outside the range.\n\nPermission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/job-grades/{grade}":{"put":{"tags":["job-grades"],"operationId":"app_job_grades_update","summary":"PUT /api/v1/app/companies/{company}/job-grades/{grade}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"grade","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ideal_compa_ratio":{"type":"number","description":"required|numeric|between:0.5,1.5"},"benefits":{"type":"string","nullable":true,"description":"nullable|string|max:2000"},"leave":{"type":"array","items":{"type":"number","nullable":true},"description":"array"}},"required":["ideal_compa_ratio"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/job-grades/{grade}/levels":{"post":{"tags":["job-grades"],"operationId":"app_job_grades_levels_store","summary":"POST /api/v1/app/companies/{company}/job-grades/{grade}/levels","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"grade","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"rank":{"type":"integer","description":"required|integer|min:1|max:100"},"salary":{"type":"number","description":"required|numeric|min:0"}},"required":["name_ar","name_en","rank","salary"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/key-positions":{"get":{"tags":["key-positions"],"operationId":"app_succession_index","summary":"GET /api/v1/app/companies/{company}/key-positions","description":"Permission: succession.manage.* or succession.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["key-positions"],"operationId":"app_succession_store","summary":"title {en, ar}, position_id, department_id, holder_id, risk_of_loss, impact, notes.","description":"title {en, ar}, position_id, department_id, holder_id, risk_of_loss, impact, notes.\n\nPermission: succession.manage.* or succession.positions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.positions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/key-positions/{position}":{"patch":{"tags":["key-positions"],"operationId":"app_succession_update_patch","summary":"title {en, ar}, position_id, department_id, holder_id, risk_of_loss, impact, notes.","description":"title {en, ar}, position_id, department_id, holder_id, risk_of_loss, impact, notes.\n\nPermission: succession.manage.* or succession.positions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"position","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.positions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["key-positions"],"operationId":"app_succession_update_put","summary":"title {en, ar}, position_id, department_id, holder_id, risk_of_loss, impact, notes.","description":"title {en, ar}, position_id, department_id, holder_id, risk_of_loss, impact, notes.\n\nPermission: succession.manage.* or succession.positions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"position","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.positions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["key-positions"],"operationId":"app_succession_destroy","summary":"DELETE /api/v1/app/companies/{company}/key-positions/{position}","description":"Permission: succession.manage.* or succession.positions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"position","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.positions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/key-positions/{position}/successors":{"post":{"tags":["key-positions"],"operationId":"app_succession_successors_store","summary":"employee_id, readiness, development_plan.","description":"employee_id, readiness, development_plan.\n\nPermission: succession.manage.* or succession.successors.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"position","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.successors.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer|exists:employees,id|Rule::notIn(array_filter([$position->holder_id]))"},"readiness":{"type":"string","enum":["ready_now","one_two_years","three_plus_years"],"description":"required|in:ready_now,one_two_years,three_plus_years"},"development_plan":{"type":"string","nullable":true,"description":"nullable|string|max:255"}},"required":["employee_id","readiness"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/key-positions/{position}/suggestions":{"get":{"tags":["key-positions"],"operationId":"app_succession_suggestions","summary":"limit (1\u201350, default 10).","description":"limit (1\u201350, default 10).\n\nPermission: succession.manage.* or succession.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"position","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/key-positions/{position}/suggestions/{employee}/explain":{"post":{"tags":["key-positions"],"operationId":"app_succession_explain","summary":"POST /api/v1/app/companies/{company}/key-positions/{position}/suggestions/{employee}/explain","description":"Permission: succession.manage.* or succession.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"position","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leave-adjustments":{"get":{"tags":["leave-adjustments"],"operationId":"app_leaves_adjustments","summary":"ZenHR Manage adjustments / Manage moved balances (kind=moved)","description":"ZenHR Manage adjustments / Manage moved balances (kind=moved): type, year, employee; 50 a page.\n\nPermission: leaves.adjustments.view or leaves.moved_balances.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["adjustments","moved"],"nullable":true},"description":"nullable|in:adjustments,moved"},{"name":"type","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"year","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"employee","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"}],"x-permissions":["leaves.adjustments.view","leaves.moved_balances.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["leave-adjustments"],"operationId":"app_leaves_adjust","summary":"POST /api/v1/app/companies/{company}/leave-adjustments","description":"Permission: leaves.adjustments.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leaves.adjustments.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"leave_type_id":{"type":"string","description":"required|exists:leave_types,id"},"year":{"type":"integer","description":"required|integer|between:2000,2100"},"days":{"type":"number","description":"required|numeric|not_in:0|between:-365,365"},"reason":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(255)"}},"required":["employee_id","leave_type_id","year","days","reason"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leave-adjustments/{adjustment}":{"delete":{"tags":["leave-adjustments"],"operationId":"app_leaves_adjust_destroy","summary":"DELETE /api/v1/app/companies/{company}/leave-adjustments/{adjustment}","description":"Permission: leaves.adjustments.manage or leaves.moved_balances.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"adjustment","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leaves.adjustments.manage","leaves.moved_balances.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leave-balance-history":{"get":{"tags":["leave-balance-history"],"operationId":"app_leaves_balance_history","summary":"ZenHR history (docs/zenhr-import.md)","description":"ZenHR history (docs/zenhr-import.md): kind days (day analysis) or punches (punch details) for attendance.view, balances (vacation balances by year) for leaves.manage. Filters: employee, from, to, status (days), type, year (balances).\n\nPermission: leaves.balance_corrections.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date_format:Y-m-d"},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["present","absent","partial"],"nullable":true},"description":"nullable|in:present,absent,partial"},{"name":"type","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"year","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"}],"x-permissions":["leaves.balance_corrections.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leave-balances/move":{"post":{"tags":["leave-balances"],"operationId":"app_leaves_move","summary":"Moves unused days of a type into next year","description":"Moves unused days of a type into next year: leave_type_id, year, max_days (leaves.moved_balances.manage over the company).\n\nPermission: leaves.moved_balances.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leaves.moved_balances.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"leave_type_id":{"type":"integer","description":"required|integer"},"year":{"type":"integer","description":"required|integer|between:2000,2100"},"max_days":{"type":"number","description":"required|numeric|min:0|max:365"}},"required":["leave_type_id","year","max_days"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leave-encashments":{"get":{"tags":["leave-encashments"],"operationId":"app_leaves_encashments","summary":"GET /api/v1/app/companies/{company}/leave-encashments","description":"Permission: leaves.encashments.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leaves.encashments.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["leave-encashments"],"operationId":"app_leaves_encash","summary":"POST /api/v1/app/companies/{company}/leave-encashments","description":"Permission: leaves.encashments.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leaves.encashments.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"attachment":{"type":"string","format":"binary","nullable":true,"description":"nullable|file|max:10240|mimes:pdf,jpg,jpeg,png"},"leave_type_id":{"type":"integer","description":"required|integer|exists:leave_types,id"},"days":{"type":"number","description":"required|numeric|min:0.5|max:365"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}},"required":["employee_id","leave_type_id","days"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leave-encashments/{encashment}":{"delete":{"tags":["leave-encashments"],"operationId":"app_leaves_encash_destroy","summary":"DELETE /api/v1/app/companies/{company}/leave-encashments/{encashment}","description":"Permission: leaves.encashments.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"encashment","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leaves.encashments.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leave-types/{type}/discipline":{"put":{"tags":["leave-types"],"operationId":"app_discipline_time_off_update_put","summary":"PUT /api/v1/app/companies/{company}/leave-types/{type}/discipline","description":"Permission: discipline_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["leave-types"],"operationId":"app_discipline_time_off_update_patch","summary":"PATCH /api/v1/app/companies/{company}/leave-types/{type}/discipline","description":"Permission: discipline_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["discipline_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leave-types/{leaveType}/apply":{"post":{"tags":["leave-types"],"operationId":"app_leaves_apply","summary":"Gives a leave type to employees","description":"Gives a leave type to employees: scope all|selected, employee_ids, entitlement_days, open_balance, balance_year.\n\nPermission: leaves.balance_corrections.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"leaveType","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leaves.balance_corrections.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"scope":{"type":"string","enum":["all","selected"],"description":"required|in:all,selected"},"employee_ids":{"type":"array","items":{"type":"integer"},"description":"required_if:scope,selected|array"},"entitlement_days":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"},"open_balance":{"type":"number","nullable":true,"description":"nullable|numeric|min:-365|max:365"},"balance_year":{"type":"integer","nullable":true,"description":"nullable|integer|min:2000|max:2100"}},"required":["scope"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leave-types":{"get":{"tags":["leave-types"],"operationId":"app_leave_types_index","summary":"Leave types, of one ?category, with how many employees have each.","description":"Leave types, of one ?category, with how many employees have each.\n\nPermission: leave_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leave_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["leave-types"],"operationId":"app_leave_types_store","summary":"A new type","description":"A new type: category and the whole form, as on the screen.\n\nPermission: leave_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leave_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"code":{"type":"string","nullable":true,"description":"nullable|alpha_dash|max:30|unique:leave_types"},"color":{"type":"string","nullable":true,"description":"nullable|regex:/^#[0-9a-fA-F]{6}$/"},"icon":{"type":"string","enum":["\u23f3","\u2708\ufe0f","\u2744\ufe0f","\ud83c\udf34","\ud83c\udfd6\ufe0f","\ud83c\udfe0","\ud83d\udc4b","\ud83d\udcc5","\ud83d\udcda","\ud83d\udd57","\ud83e\udd12","\ud83e\udd13","\ud83e\udd30","\ud83d\ude98"],"nullable":true,"description":"nullable|in:\u23f3,\u2708\ufe0f,\u2744\ufe0f,\ud83c\udf34,\ud83c\udfd6\ufe0f,\ud83c\udfe0,\ud83d\udc4b,\ud83d\udcc5,\ud83d\udcda,\ud83d\udd57,\ud83e\udd12,\ud83e\udd13,\ud83e\udd30,\ud83d\ude98"},"gl_identifier":{"type":"string","nullable":true,"description":"nullable|string|max:50"},"balance_type":{"type":"string","enum":["contractual","normal","first_request"],"nullable":true,"description":"nullable|in:contractual,normal,first_request"},"entitlement_days":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"},"entitlement_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:200"},"allowed_after_value":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:3650"},"allowed_after_unit":{"type":"string","enum":["day","month","year"],"nullable":true,"description":"nullable|in:day,month,year"},"max_consecutive_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:365"},"min_consecutive_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:365"},"max_consecutive_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0.25|max:24"},"min_consecutive_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0.25|max:24"},"min_notice_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"},"notice_slices":{"type":"array","items":{"type":"object","properties":{"from":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"to":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"notice":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"}}},"nullable":true,"description":"nullable|array"},"max_weekend_exclude":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"},"exceed_by":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"},"accrual_rate":{"type":"string","enum":["daily","monthly"],"nullable":true,"description":"nullable|in:daily,monthly"},"balance_cap":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:999"},"compensation_percent":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100"},"compensation_allowance_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"balance_setups":{"type":"array","items":{"type":"object","properties":{"from":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:60"},"to":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:60"},"open":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"},"carry":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"}}},"nullable":true,"description":"nullable|array"},"encash_payroll":{"type":"string","enum":["in_payroll","off_cycle"],"nullable":true,"description":"nullable|in:in_payroll,off_cycle"},"attachment_after":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:999"},"deduction_percent":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|$hourly && ($input['deduction_type'] ?? null) === 'fixed' ? 'max:100000000' : 'm..."},"deduction_type":{"type":"string","enum":["fixed","pro_rata"],"nullable":true,"description":"nullable|in:fixed,pro_rata"},"grace_amount":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:10000"},"grace_interval":{"type":"string","enum":["day","week","month"],"nullable":true,"description":"nullable|in:day,week,month"},"disciplinary_type_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"request_limit":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:100"},"request_limit_type":{"type":"string","enum":["service","per_year","none"],"nullable":true,"description":"nullable|in:service,per_year,none"},"rules":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["gender","religion","nationality","department","section","work_location","work_type","job_role","hierarchy_group","business_unit","division","segment","main_project"],"nullable":true,"description":"nullable|in:gender,religion,nationality,department,section,work_location,work_type,job_role,hierarchy_group,business_unit,division,segment,main_project"},"values":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"}}},"nullable":true,"description":"nullable|array"},"minutes_allowed":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:100000"},"minutes_allowed_per":{"type":"string","enum":["day","week","month"],"nullable":true,"description":"nullable|in:day,week,month"},"transactions_allowed":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:1000"},"transactions_allowed_per":{"type":"string","enum":["day","week","month"],"nullable":true,"description":"nullable|in:day,week,month"},"hourly_deductions":{"type":"array","items":{"type":"object","properties":{"leave_type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:leave_types,id"},"percent":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100"}}},"nullable":true,"description":"nullable|array"},"repeat_every":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:120"},"repeat_unit":{"type":"string","enum":["month","year","once"],"nullable":true,"description":"nullable|in:month,year,once"},"sick_slices":{"type":"array","items":{"type":"object","properties":{"from":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:366"},"to":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:366"},"deduction":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100"}}},"nullable":true,"description":"nullable|array"},"applies_to":{"type":"string","enum":["all","assigned"],"nullable":true,"description":"nullable|in:all,assigned"},"effective_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"balance_update_type":{"type":"string","enum":["current","new"],"nullable":true,"description":"nullable|in:current,new"}},"required":["name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leave-types/{leaveType}":{"put":{"tags":["leave-types"],"operationId":"app_leave_types_update","summary":"A type's whole form, as on the screen (balance_update_type and effective_date for a new balance from a date).","description":"A type's whole form, as on the screen (balance_update_type and effective_date for a new balance from a date).\n\nPermission: leave_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"leaveType","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leave_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"code":{"type":"string","nullable":true,"description":"nullable|alpha_dash|max:30|unique:leave_types"},"color":{"type":"string","nullable":true,"description":"nullable|regex:/^#[0-9a-fA-F]{6}$/"},"icon":{"type":"string","enum":["\u23f3","\u2708\ufe0f","\u2744\ufe0f","\ud83c\udf34","\ud83c\udfd6\ufe0f","\ud83c\udfe0","\ud83d\udc4b","\ud83d\udcc5","\ud83d\udcda","\ud83d\udd57","\ud83e\udd12","\ud83e\udd13","\ud83e\udd30","\ud83d\ude98"],"nullable":true,"description":"nullable|in:\u23f3,\u2708\ufe0f,\u2744\ufe0f,\ud83c\udf34,\ud83c\udfd6\ufe0f,\ud83c\udfe0,\ud83d\udc4b,\ud83d\udcc5,\ud83d\udcda,\ud83d\udd57,\ud83e\udd12,\ud83e\udd13,\ud83e\udd30,\ud83d\ude98"},"gl_identifier":{"type":"string","nullable":true,"description":"nullable|string|max:50"},"balance_type":{"type":"string","enum":["contractual","normal","first_request"],"nullable":true,"description":"nullable|in:contractual,normal,first_request"},"entitlement_days":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"},"entitlement_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:200"},"allowed_after_value":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:3650"},"allowed_after_unit":{"type":"string","enum":["day","month","year"],"nullable":true,"description":"nullable|in:day,month,year"},"max_consecutive_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:365"},"min_consecutive_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:365"},"max_consecutive_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0.25|max:24"},"min_consecutive_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0.25|max:24"},"min_notice_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"},"notice_slices":{"type":"array","items":{"type":"object","properties":{"from":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"to":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"notice":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"}}},"nullable":true,"description":"nullable|array"},"max_weekend_exclude":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"},"exceed_by":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"},"accrual_rate":{"type":"string","enum":["daily","monthly"],"nullable":true,"description":"nullable|in:daily,monthly"},"balance_cap":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:999"},"compensation_percent":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100"},"compensation_allowance_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"balance_setups":{"type":"array","items":{"type":"object","properties":{"from":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:60"},"to":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:60"},"open":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"},"carry":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:365"}}},"nullable":true,"description":"nullable|array"},"encash_payroll":{"type":"string","enum":["in_payroll","off_cycle"],"nullable":true,"description":"nullable|in:in_payroll,off_cycle"},"attachment_after":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:999"},"deduction_percent":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|$hourly && ($input['deduction_type'] ?? null) === 'fixed' ? 'max:100000000' : 'm..."},"deduction_type":{"type":"string","enum":["fixed","pro_rata"],"nullable":true,"description":"nullable|in:fixed,pro_rata"},"grace_amount":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:10000"},"grace_interval":{"type":"string","enum":["day","week","month"],"nullable":true,"description":"nullable|in:day,week,month"},"disciplinary_type_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"request_limit":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:100"},"request_limit_type":{"type":"string","enum":["service","per_year","none"],"nullable":true,"description":"nullable|in:service,per_year,none"},"rules":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["gender","religion","nationality","department","section","work_location","work_type","job_role","hierarchy_group","business_unit","division","segment","main_project"],"nullable":true,"description":"nullable|in:gender,religion,nationality,department,section,work_location,work_type,job_role,hierarchy_group,business_unit,division,segment,main_project"},"values":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"}}},"nullable":true,"description":"nullable|array"},"minutes_allowed":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:100000"},"minutes_allowed_per":{"type":"string","enum":["day","week","month"],"nullable":true,"description":"nullable|in:day,week,month"},"transactions_allowed":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:1000"},"transactions_allowed_per":{"type":"string","enum":["day","week","month"],"nullable":true,"description":"nullable|in:day,week,month"},"hourly_deductions":{"type":"array","items":{"type":"object","properties":{"leave_type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:leave_types,id"},"percent":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100"}}},"nullable":true,"description":"nullable|array"},"repeat_every":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:120"},"repeat_unit":{"type":"string","enum":["month","year","once"],"nullable":true,"description":"nullable|in:month,year,once"},"sick_slices":{"type":"array","items":{"type":"object","properties":{"from":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:366"},"to":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:366"},"deduction":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100"}}},"nullable":true,"description":"nullable|array"},"applies_to":{"type":"string","enum":["all","assigned"],"nullable":true,"description":"nullable|in:all,assigned"},"effective_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"balance_update_type":{"type":"string","enum":["current","new"],"nullable":true,"description":"nullable|in:current,new"}},"required":["name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["leave-types"],"operationId":"app_leave_types_destroy","summary":"DELETE /api/v1/app/companies/{company}/leave-types/{leaveType}","description":"Permission: leave_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"leaveType","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leave_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leaves":{"post":{"tags":["leaves"],"operationId":"app_leaves_store","summary":"Ask for time off (multipart with an attachment when the type needs one).","description":"Ask for time off (multipart with an attachment when the type needs one).\n\nPermission: self.leaves.request. Module: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.leaves.request"],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"attachment":{"type":"string","format":"binary","nullable":true,"description":"nullable|file|max:10240|mimes:pdf,jpg,jpeg,png"},"half_day":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"advance_requested":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"start_time":{"type":"string","description":"required"},"end_time":{"type":"string","description":"required"},"end_date":{"type":"string","description":"required"},"leave_type_id":{"type":"string","description":"required|exists:leave_types,id"},"start_date":{"type":"string","format":"date","description":"required|date"},"reason":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"}},"required":["start_time","end_time","end_date","leave_type_id","start_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leaves/{leave}":{"get":{"tags":["leaves"],"operationId":"app_leaves_show","summary":"GET /api/v1/app/companies/{company}/leaves/{leave}","description":"Permission: self.leaves.view or self.approvals.decide or leaves.view or leaves.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"leave","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.leaves.view","self.approvals.decide","leaves.view","leaves.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leaves/{leave}/attachment":{"get":{"tags":["leaves"],"operationId":"app_leaves_attachment","summary":"GET leaves/{id}/attachment","description":"GET leaves/{id}/attachment: the file, for the employee or whoever sees their leaves.\n\nPermission: self.leaves.view or self.approvals.decide or leaves.view or leaves.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"leave","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.leaves.view","self.approvals.decide","leaves.view","leaves.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leaves/{leave}/approval-cycle":{"get":{"tags":["leaves"],"operationId":"app_leaves_cycle","summary":"GET leaves/{id}/approval-cycle","description":"GET leaves/{id}/approval-cycle: ZenHR's \"Approval Cycle\" of a time off (ApprovalCycle), for the employee, whoever sees their leaves, or an approver.\n\nPermission: self.leaves.view or self.approvals.decide or leaves.view or leaves.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"leave","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.leaves.view","self.approvals.decide","leaves.view","leaves.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leaves/{leave}/withdraw":{"post":{"tags":["leaves"],"operationId":"app_leaves_withdraw","summary":"POST /api/v1/app/companies/{company}/leaves/{leave}/withdraw","description":"Permission: self.leaves.cancel or leaves.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"leave","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.leaves.cancel","leaves.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/leaves/{leave}/decide":{"post":{"tags":["leaves"],"operationId":"app_leaves_decide","summary":"Decide the step it waits on","description":"Decide the step it waits on: decision approved|rejected, decision_note, non_deduct (leaves.manage).\n\nPermission: self.approvals.decide or requests.manage or leaves.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"leave","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.approvals.decide","requests.manage","leaves.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/legal-rules":{"get":{"tags":["legal-rules"],"operationId":"app_legal_rules_index","summary":"GET /api/v1/app/companies/{company}/legal-rules","description":"Permission: payroll_setup.manage or legal_rules.validate. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage","legal_rules.validate"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/legal-rules/{rule}":{"post":{"tags":["legal-rules"],"operationId":"app_legal_rules_record","summary":"POST /api/v1/app/companies/{company}/legal-rules/{rule}","description":"Permission: payroll_setup.manage or legal_rules.validate. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"rule","in":"path","required":true,"schema":{"type":"string","pattern":"^overtime_to_leave|rest_day_overtime|holiday_overtime|loan_settlement_deduction|eos_formula|tax_scale|day_divisor$"}}],"x-permissions":["payroll_setup.manage","legal_rules.validate"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"validated_by":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"reference":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(255)"}},"required":["validated_by","reference"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["legal-rules"],"operationId":"app_legal_rules_withdraw","summary":"DELETE /api/v1/app/companies/{company}/legal-rules/{rule}","description":"Permission: payroll_setup.manage or legal_rules.validate. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"rule","in":"path","required":true,"schema":{"type":"string","pattern":"^overtime_to_leave|rest_day_overtime|holiday_overtime|loan_settlement_deduction|eos_formula|tax_scale|day_divisor$"}}],"x-permissions":["payroll_setup.manage","legal_rules.validate"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letter-templates":{"get":{"tags":["letter-templates"],"operationId":"app_letters_templates","summary":"Letter templates","description":"Letter templates: all for letters.manage, else the self-service ones I can generate.\n\nPermission: self.letters.request or letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.letters.request","letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["letter-templates"],"operationId":"app_letters_templates_store","summary":"POST /api/v1/app/companies/{company}/letter-templates","description":"Permission: letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"description":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"}}},"language":{"type":"string","enum":["ar","en"],"description":"required|in:ar,en"},"letter_category_id":{"type":"string","nullable":true,"description":"nullable|exists:letter_categories,id"},"body":{"type":"string","description":"required|string|max:200000"},"direct_access":{"type":"string","enum":["no","yes","notify","approval"],"nullable":true,"description":"nullable|in:no,yes,notify,approval"},"confirmation_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:365"},"branch_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"notify_employee_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"financial":{"type":"boolean","description":"sometimes|boolean"}},"required":["name","language","body"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letter-templates/{template}":{"get":{"tags":["letter-templates"],"operationId":"app_letters_templates_show","summary":"One template with its body (letters.manage).","description":"One template with its body (letters.manage).\n\nPermission: letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["letter-templates"],"operationId":"app_letters_templates_update_patch","summary":"PATCH /api/v1/app/companies/{company}/letter-templates/{template}","description":"Permission: letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["letter-templates"],"operationId":"app_letters_templates_update_put","summary":"PUT /api/v1/app/companies/{company}/letter-templates/{template}","description":"Permission: letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letter-templates/placeholders":{"get":{"tags":["letter-templates"],"operationId":"app_letters_templates_placeholders","summary":"What the editor can insert","description":"What the editor can insert: the {placeholders} with their names, and the active e-signatures as {signature:ID}.\n\nPermission: letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letter-templates/images":{"post":{"tags":["letter-templates"],"operationId":"app_letters_templates_images","summary":"A picture for a template, uploaded into Mihnaro (file, or data as a data","description":"A picture for a template, uploaded into Mihnaro (file, or data as a data: URL or base64 with name); put its url in the body as <img src>.\n\nPermission: letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letter-templates/preview":{"post":{"tags":["letter-templates"],"operationId":"app_letters_templates_preview","summary":"A body as its letter prints, before saving","description":"A body as its letter prints, before saving: body, language, employee_id (none: placeholders shown by name); format=pdf for the PDF.\n\nPermission: letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"body":{"type":"string","nullable":true,"description":"nullable|string|max:200000"},"language":{"type":"string","enum":["ar","en"],"nullable":true,"description":"nullable|in:ar,en"},"employee_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"addressed_to":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"},"effective_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letter-templates/{template}/duplicate":{"post":{"tags":["letter-templates"],"operationId":"app_letters_templates_duplicate","summary":"POST /api/v1/app/companies/{company}/letter-templates/{template}/duplicate","description":"Permission: letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letter-templates/{template}/favorite":{"post":{"tags":["letter-templates"],"operationId":"app_letters_templates_favorite","summary":"POST /api/v1/app/companies/{company}/letter-templates/{template}/favorite","description":"Permission: letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letters":{"get":{"tags":["letters"],"operationId":"app_letters_index","summary":"Letters I may see (mine once released, and those in my letters scope)","description":"Letters I may see (mine once released, and those in my letters scope): status, employee_id.\n\nPermission: self.letters.view or letters.view or letters.manage or letters.issue or letters.decide. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.letters.view","letters.view","letters.manage","letters.issue","letters.decide"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["letters"],"operationId":"app_letters_issue","summary":"Issue a letter from a template to an employee in scope (letters.manage).","description":"Issue a letter from a template to an employee in scope (letters.manage).\n\nPermission: letters.issue. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["letters.issue"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"letter_template_id":{"type":"integer","description":"required|integer"},"addressed_to":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"effective_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"}},"required":["employee_id","letter_template_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letters/{letter}":{"get":{"tags":["letters"],"operationId":"app_letters_show","summary":"A letter with its text; opening my own marks it seen.","description":"A letter with its text; opening my own marks it seen.\n\nPermission: self.letters.view or letters.view or letters.manage or letters.issue or letters.decide. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"letter","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.letters.view","letters.view","letters.manage","letters.issue","letters.decide"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letters/{letter}/pdf":{"get":{"tags":["letters"],"operationId":"app_letters_pdf","summary":"The letter as a PDF file (application/pdf), in the letter's language.","description":"The letter as a PDF file (application/pdf), in the letter's language.\n\nPermission: self.letters.download or letters.view or letters.manage. Module: hrm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"letter","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.letters.download","letters.view","letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":30,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letters/generate":{"post":{"tags":["letters"],"operationId":"app_letters_generate","summary":"Generate a self-service letter for myself.","description":"Generate a self-service letter for myself.\n\nPermission: self.letters.request or letters.manage. Module: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.letters.request","letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"letter_template_id":{"type":"integer","description":"required|integer"},"addressed_to":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"effective_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"}},"required":["letter_template_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letters/{letter}/confirm":{"post":{"tags":["letters"],"operationId":"app_letters_confirm","summary":"POST /api/v1/app/companies/{company}/letters/{letter}/confirm","description":"Permission: self.letters.request or letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"letter","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.letters.request","letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/letters/{letter}/decide":{"post":{"tags":["letters"],"operationId":"app_letters_decide","summary":"Approve or reject a letter waiting for approval","description":"Approve or reject a letter waiting for approval: decision approved|rejected (letters.manage, not one you issued).\n\nPermission: letters.decide. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"letter","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["letters.decide"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/line-manager-access":{"get":{"tags":["line-manager-access"],"operationId":"app_line_manager_access_show","summary":"What direct managers may do for their reports (LineManagerAccess).","description":"What direct managers may do for their reports (LineManagerAccess).\n\nPermission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["line-manager-access"],"operationId":"app_line_manager_access_update","summary":"Turns direct-manager items on or off; keys left out keep their value.","description":"Turns direct-manager items on or off; keys left out keep their value.\n\nPermission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/live-location":{"get":{"tags":["live-location"],"operationId":"app_live_location_index","summary":"Latest positions","description":"Latest positions: branch, department, group, status (online|lost|offline|none), q.\n\nPermission: live_location.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["live_location.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/live-location/employees/{employee}/trail":{"get":{"tags":["live-location"],"operationId":"app_live_location_trail","summary":"One employee's trail on a day (date, default today).","description":"One employee's trail on a day (date, default today).\n\nPermission: live_location.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}},{"name":"date","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"}],"x-permissions":["live_location.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/live-location/export":{"get":{"tags":["live-location"],"operationId":"app_live_location_export","summary":"CSV","description":"CSV: the positions by branch, department, group, status, q; or one employee's trail on date. Logged as an api export.\n\nPermission: live_location.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"date","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"}],"x-permissions":["live_location.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/live-location/views":{"get":{"tags":["live-location"],"operationId":"app_live_location_views","summary":"Who looked at whose location (newest first).","description":"Who looked at whose location (newest first).\n\nPermission: live_location.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["live_location.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/loans":{"get":{"tags":["loans"],"operationId":"app_payroll_loans","summary":"Loans in my scope","description":"Loans in my scope: employee_id, status (active | settled).\n\nPermission: payroll.loans.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.loans.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["loans"],"operationId":"app_payroll_loans_store","summary":"POST /api/v1/app/companies/{company}/loans","description":"Permission: payroll.loans.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.loans.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"loan_type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:loan_types,id"},"amount":{"type":"number","description":"required|numeric|min:1"},"installments":{"type":"integer","nullable":true,"description":"required_without:installment_amount|nullable|integer|min:1|max:120"},"installment_amount":{"type":"number","nullable":true,"description":"nullable|numeric|gt:0|lte:amount"},"effective_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"first_installment_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|'after_or_equal:' . \\App\\Support\\PayrollMonth::open() . '-01'"},"start_month":{"type":"string","format":"date","nullable":true,"description":"required_without:first_installment_date|nullable|date_format:Y-m|'after_or_equal:' . \\App\\Support\\PayrollMonth::open()"},"reason":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(255)"},"payout":{"type":"string","enum":["off_cycle","payroll"],"nullable":true,"description":"nullable|in:off_cycle,payroll"},"currency":{"type":"string","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BRL","BSD","BTN","BWP","BYN","BZD","CAD","CDF","CHF","CLP","CNY","COP","CRC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRU","MUR","MVR","MWK","MXN","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLE","SOS","SRD","SSP","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","UYU","UZS","VES","VND","VUV","WST","XAF","XCD","XOF","XPF","YER","ZAR","ZMW","ZWL"],"nullable":true,"description":"nullable|in:AED,AFN,ALL,AMD,ANG,AOA,ARS,AUD,AWG,AZN,BAM,BBD,BDT,BGN,BHD,BIF,BMD,BND,BOB,BRL,BSD,BTN,BWP,BYN,BZD,CAD,CDF,CHF,CLP,CNY,COP,CRC,CUP,CVE,CZK,DJF,DKK,DOP,DZD,EGP,ERN,ETB,EUR,FJD,FKP,GBP,GEL,GHS,GIP,GMD,GNF,GTQ,GYD,HKD,HNL,HTG,HUF,IDR,ILS,INR,IQD,IRR,ISK,JMD,JOD,JPY,KES,KGS,KHR,KMF,KPW,KRW,KWD,KYD,KZT,LAK,LBP,LKR,LRD,LSL,LYD,MAD,MDL,MGA,MKD,MMK,MNT,MOP,MRU,MUR,MVR,MWK,MXN,MYR,MZN,NAD,NGN,NIO,NOK,NPR,NZD,OMR,PAB,PEN,PGK,PHP,PKR,PLN,PYG,QAR,RON,RSD,RUB,RWF,SAR,SBD,SCR,SDG,SEK,SGD,SHP,SLE,SOS,SRD,SSP,STN,SVC,SYP,SZL,THB,TJS,TMT,TND,TOP,TRY,TTD,TWD,TZS,UAH,UGX,USD,UYU,UZS,VES,VND,VUV,WST,XAF,XCD,XOF,XPF,YER,ZAR,ZMW,ZWL"},"attachments":{"type":"array","items":{"type":"string","format":"binary"},"description":"array|max:10"}},"required":["employee_id","amount"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/loans/{loan}":{"get":{"tags":["loans"],"operationId":"app_payroll_loans_show","summary":"One loan with its installment schedule (made on first read for a loan from before schedules were kept).","description":"One loan with its installment schedule (made on first read for a loan from before schedules were kept).\n\nPermission: payroll.loans.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"loan","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.loans.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["loans"],"operationId":"app_payroll_loans_destroy","summary":"DELETE /api/v1/app/companies/{company}/loans/{loan}","description":"Permission: payroll.loans.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"loan","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.loans.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/loans/{loan}/reschedule":{"post":{"tags":["loans"],"operationId":"app_payroll_loans_reschedule","summary":"Reschedule","description":"Reschedule: installment_amount or number_of_payments for what is still owed.\n\nPermission: payroll.loans.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"loan","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.loans.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"installment_amount":{"type":"number","nullable":true,"description":"required_without:number_of_payments|nullable|numeric|gt:0"},"number_of_payments":{"type":"integer","nullable":true,"description":"required_without:installment_amount|nullable|integer|min:1|max:120"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/loans/{loan}/installments/{installment}/{action}":{"post":{"tags":["loans"],"operationId":"app_payroll_loans_installment","summary":"Skip an unpaid installment (it moves to the end) or record it as paid in cash.","description":"Skip an unpaid installment (it moves to the end) or record it as paid in cash.\n\nPermission: payroll.loans.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"loan","in":"path","required":true,"schema":{"type":"integer"}},{"name":"installment","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","pattern":"^skip|pay-cash$"}}],"x-permissions":["payroll.loans.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/location/policy":{"get":{"tags":["location"],"operationId":"app_location_policy","summary":"The signed-in employee's policy","description":"The signed-in employee's policy: required, mode, interval_seconds, distance_meters, max_silence_minutes, reason_en, reason_ar, last_ping.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/location/pings":{"post":{"tags":["location"],"operationId":"app_location_pings","summary":"A batch of pings","description":"A batch of pings: device {id, platform, app_version}, points [{lat, lng, accuracy, speed, heading, altitude, recorded_at, mocked, battery, elapsed_ms}].\n\nPermission: self.live_location. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.live_location"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"device":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"id":{"type":"string","description":"required|string|max:100"},"platform":{"type":"string","nullable":true,"description":"nullable|string|max:20"},"app_version":{"type":"string","nullable":true,"description":"nullable|string|max:40"}}},"points":{"type":"array","items":{"type":"object","properties":{"lat":{"type":"number","description":"required|numeric|between:-90,90"},"lng":{"type":"number","description":"required|numeric|between:-180,180"},"accuracy":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100000"},"speed":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:1000"},"heading":{"type":"number","nullable":true,"description":"nullable|numeric|between:0,360"},"altitude":{"type":"number","nullable":true,"description":"nullable|numeric|between:-1000,20000"},"recorded_at":{"type":"string","format":"date","description":"required|date"},"mocked":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"battery":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,100"},"elapsed_ms":{"type":"integer","nullable":true,"description":"nullable|integer|min:0"}}},"description":"required|array|min:1|max:500"}},"required":["device","points"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/map-tiles":{"get":{"tags":["map-tiles"],"operationId":"app_map_tiles","summary":"GET /api/v1/app/map-tiles (signed in)","description":"GET /api/v1/app/map-tiles (signed in): where the app's in-app maps take their pictures from (config/mihnaro.php map_tiles), for anyone signed in: the clock-in location map and a field job's site, not only field managers.\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/mass-actions":{"get":{"tags":["mass-actions"],"operationId":"app_mass_actions_index","summary":"GET mass-actions","description":"GET mass-actions: the history.\n\nPermission: employees.edit or payroll.salary_packages.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.edit","payroll.salary_packages.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/mass-actions/{tab}":{"post":{"tags":["mass-actions"],"operationId":"app_mass_actions_apply","summary":"POST mass-actions/{tab}","description":"POST mass-actions/{tab}: the tab's fields and employee_ids; dry_run=1 only previews.\n\nModule: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"tab","in":"path","required":true,"schema":{"type":"string","pattern":"^personal|professional|financial$"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1|max:1000"}},"required":["employee_ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/two-factor":{"get":{"tags":["me"],"operationId":"app_me_two_factor","summary":"My two-step verification","description":"My two-step verification: on or off, required or not, recovery codes left.\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["me"],"operationId":"app_me_two_factor_start","summary":"Starts setting it up","description":"Starts setting it up: the key and the otpauth:// link for the authenticator app (only to the user themself).\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["me"],"operationId":"app_me_two_factor_disable","summary":"DELETE /api/v1/app/me/two-factor","description":"10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"password","in":"query","required":true,"schema":{"type":"string"},"description":"required|string"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/two-factor/confirm":{"post":{"tags":["me"],"operationId":"app_me_two_factor_confirm","summary":"Confirms with a code from the app; the recovery codes are returned this once.","description":"Confirms with a code from the app; the recovery codes are returned this once.\n\n10 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"required|string|max:20"}},"required":["code"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/two-factor/recovery-codes":{"post":{"tags":["me"],"operationId":"app_me_two_factor_recovery_codes","summary":"POST /api/v1/app/me/two-factor/recovery-codes","description":"10 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"required|string"}},"required":["password"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me":{"get":{"tags":["me"],"operationId":"app_me","summary":"GET /api/v1/app/me","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/password":{"put":{"tags":["me"],"operationId":"app_me_password","summary":"PUT /api/v1/app/me/password","description":"10 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/preferences":{"patch":{"tags":["me"],"operationId":"app_me_preferences","summary":"PATCH /api/v1/app/me/preferences","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/list-columns":{"get":{"tags":["me"],"operationId":"app_me_list_columns","summary":"Show / hide columns","description":"Show / hide columns: every list with the columns I hid (list= one list).\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/list-columns/{list}":{"put":{"tags":["me"],"operationId":"app_me_list_columns_update","summary":"Saves the columns I hide in a list","description":"Saves the columns I hide in a list: hidden[] (empty shows them all).\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"list","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_.]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"hidden":{"type":"array","items":{"type":"string"},"description":"present|array"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/deletion-request":{"get":{"tags":["me"],"operationId":"app_me_deletion_request","summary":"This person's account-deletion requests, newest first (docs/account-deletion.md).","description":"This person's account-deletion requests, newest first (docs/account-deletion.md).\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["me"],"operationId":"app_me_deletion_request_store","summary":"Asks for the account and its data to be deleted","description":"Asks for the account and its data to be deleted: reason (optional). HR of each company and the Mihnaro team are told.\n\n10 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/devices":{"get":{"tags":["me"],"operationId":"app_me_devices","summary":"GET me/devices","description":"GET me/devices: the person's own phones, their IPs and sign-in activity (docs/platform-control.md, \"Phone activity\").\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/connected-apps":{"get":{"tags":["me"],"operationId":"app_me_connected_apps","summary":"GET /api/v1/app/me/connected-apps","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/connected-apps/{grant}":{"delete":{"tags":["me"],"operationId":"app_me_connected_apps_destroy","summary":"DELETE /api/v1/app/me/connected-apps/{grant}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"grant","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/connected-apps/tokens":{"post":{"tags":["me"],"operationId":"app_me_connected_apps_tokens_store","summary":"A token by hand, for a client without OAuth.","description":"A token by hand, for a client without OAuth. Its value is in this answer only.\n\n10 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"company_id":{"type":"integer","description":"required|integer"},"name":{"type":"string","description":"required|string|max:80"}},"required":["company_id","name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/connected-apps/tokens/{token}":{"delete":{"tags":["me"],"operationId":"app_me_connected_apps_tokens_destroy","summary":"DELETE /api/v1/app/me/connected-apps/tokens/{token}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/push-tokens":{"get":{"tags":["me"],"operationId":"app_me_push_tokens","summary":"The phones this person gets push notices on (docs/mobile-app.md).","description":"The phones this person gets push notices on (docs/mobile-app.md).\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["me"],"operationId":"app_me_push_tokens_store","summary":"POST /api/v1/app/me/push-tokens","description":"20 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"platform":{"type":"string","enum":["ios","android"],"description":"required|in:ios,android"},"provider":{"type":"string","enum":["fcm","apns"],"description":"required|in:fcm,apns"},"token":{"type":"string","description":"required|string|max:512|$input['provider'] === 'apns' ? 'regex:/^[0-9a-f]{64,200}$/' : 'regex:/^[A-Za-z0..."},"device_name":{"type":"string","nullable":true,"description":"nullable|string|max:80"},"apns_environment":{"type":"string","enum":["production","sandbox"],"nullable":true,"description":"nullable|in:production,sandbox"}},"required":["platform","provider","token"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["me"],"operationId":"app_me_push_tokens_destroy","summary":"DELETE /api/v1/app/me/push-tokens","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string"},"description":"required|string|max:512"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/debug":{"get":{"tags":["me"],"operationId":"app_me_debug","summary":"GET me/debug","description":"GET me/debug: {on, until, send_requested}. Asked at the 15th tap and at each open; never cached.\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/debug/reports":{"post":{"tags":["me"],"operationId":"app_me_debug_reports","summary":"POST me/debug/reports","description":"POST me/debug/reports: the phone's state and recent log, redacted. 403 while debug mode is off for this account.\n\n6 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":6,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/device-context":{"post":{"tags":["me"],"operationId":"app_me_device_context","summary":"POST /api/v1/app/me/device-context","description":"30 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":30,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"snapshots":{"type":"array","items":{"type":"object","properties":{"trigger":{"type":"string","enum":["open","resume","sign_in","punch"],"description":"required|in:open,resume,sign_in,punch"},"open_id":{"type":"string","nullable":true,"description":"nullable|string|max:64|regex:/^[A-Za-z0-9._:\\-]+$/"},"company_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"location":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"},"context":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"}}},"description":"required|array|min:1|max:20"}},"required":["snapshots"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/me/appearance":{"get":{"tags":["me"],"operationId":"app_me_appearance","summary":"GET /api/v1/app/me/appearance","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["me"],"operationId":"app_me_appearance_update","summary":"PATCH /api/v1/app/me/appearance","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["me"],"operationId":"app_me_appearance_reset","summary":"DELETE /api/v1/app/me/appearance","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/permissions":{"get":{"tags":["me"],"operationId":"app_me_permissions","summary":"What the token's user may do here, and where.","description":"What the token's user may do here, and where.\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/access":{"get":{"tags":["me"],"operationId":"app_me_access","summary":"What the mobile app shows","description":"What the mobile app shows: modules, permissions with their scope, and the features they open (MyAccess).\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/locale":{"get":{"tags":["me"],"operationId":"app_me_locale","summary":"GET /api/v1/app/companies/{company}/me/locale","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/profile":{"get":{"tags":["me"],"operationId":"app_me_profile","summary":"My profile in this company (Mawarid's profile page).","description":"My profile in this company (Mawarid's profile page).\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/boardings":{"get":{"tags":["me"],"operationId":"app_boardings_mine","summary":"GET /api/v1/app/companies/{company}/me/boardings","description":"Permission: self.workflows. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.workflows"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/dashboard-sections":{"get":{"tags":["me"],"operationId":"app_dashboard_sections_get","summary":"GET / PUT me/dashboard-sections","description":"GET / PUT me/dashboard-sections: the HR dashboard sections this person shows ({key: bool}); PUT with show [keys].\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["me"],"operationId":"app_dashboard_sections_put","summary":"GET / PUT me/dashboard-sections","description":"GET / PUT me/dashboard-sections: the HR dashboard sections this person shows ({key: bool}); PUT with show [keys].\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/home-widgets":{"get":{"tags":["me"],"operationId":"app_home_widgets_get","summary":"GET / PUT me/home-widgets","description":"GET / PUT me/home-widgets: the Home Page widgets the person may see (the widget registry), in their order, with width, shown and the permission each needs; PUT with order [keys], show [keys] and widths {key: 1\u20134}.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["me"],"operationId":"app_home_widgets_put","summary":"GET / PUT me/home-widgets","description":"GET / PUT me/home-widgets: the Home Page widgets the person may see (the widget registry), in their order, with width, shown and the permission each needs; PUT with order [keys], show [keys] and widths {key: 1\u20134}.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/report-files":{"get":{"tags":["me"],"operationId":"app_report_files_index","summary":"GET me/report-files","description":"GET me/report-files: the person's own background files.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/report-files/{file}":{"get":{"tags":["me"],"operationId":"app_report_files_show","summary":"GET /api/v1/app/companies/{company}/me/report-files/{file}","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"file","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/report-files/{file}/download":{"get":{"tags":["me"],"operationId":"app_report_files_download","summary":"GET /api/v1/app/companies/{company}/me/report-files/{file}/download","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"file","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/attendance":{"get":{"tags":["me"],"operationId":"app_attendance_me","summary":"My attendance","description":"My attendance: a month of days and today's records.\n\nPermission: self.attendance.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.attendance.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/clock":{"get":{"tags":["me"],"operationId":"app_attendance_clock","summary":"The dashboard's clock card","description":"The dashboard's clock card: today's shift, in or out, and what clocking needs here.\n\nPermission: self.clock. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.clock"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/face":{"get":{"tags":["me"],"operationId":"app_me_face","summary":"What the consent screen shows","description":"What the consent screen shows: the text, the answer so far, and whether a template exists.\n\nPermission: self.face. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.face"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/face/consent":{"post":{"tags":["me"],"operationId":"app_me_face_consent","summary":"POST /api/v1/app/companies/{company}/me/face/consent","description":"Permission: self.face. Module: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.face"],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"decision":{"type":"string","enum":["granted","refused","withdrawn"],"description":"required|in:granted,refused,withdrawn"}},"required":["decision"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/face/enrol":{"post":{"tags":["me"],"operationId":"app_me_face_enrol","summary":"The biometric photo, before any punch (\u00a720).","description":"The biometric photo, before any punch (\u00a720). Multipart: face_token, face_frames[] (3 JPEGs), face_mirrored.\n\nPermission: self.face. Module: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.face"],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/face/challenge":{"get":{"tags":["me"],"operationId":"app_me_face_challenge","summary":"GET /api/v1/app/companies/{company}/me/face/challenge","description":"Permission: self.clock or self.presence. Module: hrm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.clock","self.presence"],"x-modules":["hrm"],"x-rate-limit-per-minute":30,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/device-key":{"post":{"tags":["me"],"operationId":"app_me_device_key","summary":"The phone's new key","description":"The phone's new key: public_key (base64 of SubjectPublicKeyInfo or the X9.63 point), device_id, platform.\n\nPermission: self.clock. Module: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.clock"],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"public_key":{"type":"string","description":"required|string|max:1000"},"device_id":{"type":"string","description":"required|string|max:100"},"platform":{"type":"string","enum":["ios","android"],"nullable":true,"description":"nullable|in:ios,android"}},"required":["public_key","device_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/presence-check":{"get":{"tags":["me"],"operationId":"app_me_presence","summary":"GET /api/v1/app/companies/{company}/me/presence-check","description":"Permission: self.presence. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.presence"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/presence-check/{check}":{"post":{"tags":["me"],"operationId":"app_me_presence_respond","summary":"Multipart","description":"Multipart: face_token, face_frames[] (3 JPEGs), face_mirrored. Without consent, an empty body counts as unverified.\n\nPermission: self.presence. Module: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"check","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.presence"],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/schedule":{"get":{"tags":["me"],"operationId":"app_attendance_schedule","summary":"GET me/schedule?from=&to= (YYYY-MM-DD, up to 62 days; this week by default)","description":"GET me/schedule?from=&to= (YYYY-MM-DD, up to 62 days; this week by default): each day's shift, day off, holiday and leave.\n\nPermission: self.schedule. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.schedule"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/team-calendar":{"get":{"tags":["me"],"operationId":"app_team_calendar","summary":"GET me/team-calendar?month=YYYY-MM","description":"GET me/team-calendar?month=YYYY-MM: who is off or remote, holidays and events (MyCalendar).\n\nPermission: self.team_calendar. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.team_calendar"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/requests":{"get":{"tags":["me"],"operationId":"app_requests_mine","summary":"My requests","description":"My requests: status (all by default).\n\nPermission: self.requests.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.requests.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/performance":{"get":{"tags":["me"],"operationId":"app_performance_mine","summary":"My evaluations, the reviews waiting for me, my goals, my feedback requests and feedback forms.","description":"My evaluations, the reviews waiting for me, my goals, my feedback requests and feedback forms.\n\nPermission: self.performance.view or self.performance.review or self.performance.goals. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.performance.view","self.performance.review","self.performance.goals"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/assessments":{"get":{"tags":["me"],"operationId":"app_assessments_mine","summary":"The signed-in employee's own tests, with the page to take each.","description":"The signed-in employee's own tests, with the page to take each.\n\nPermission: self.assessments. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.assessments"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/payslips":{"get":{"tags":["me"],"operationId":"app_payroll_mine","summary":"My payslips","description":"My payslips: the approved runs only.\n\nPermission: self.payslips.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.payslips.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/earned-wage":{"get":{"tags":["me"],"operationId":"app_earned_wage_me","summary":"GET /api/v1/app/companies/{company}/me/earned-wage","description":"Permission: self.earned_wage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.earned_wage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/leaves":{"get":{"tags":["me"],"operationId":"app_leaves_mine","summary":"My balances this year (or ?year) and my requests.","description":"My balances this year (or ?year) and my requests.\n\nPermission: self.leaves.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.leaves.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/notifications":{"get":{"tags":["me"],"operationId":"app_notifications_index","summary":"GET me/notifications?unread=1&category=&page=","description":"GET me/notifications?unread=1&category=&page=\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/notifications/read-all":{"post":{"tags":["me"],"operationId":"app_notifications_read_all","summary":"POST /api/v1/app/companies/{company}/me/notifications/read-all","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/notifications/{notice}/read":{"post":{"tags":["me"],"operationId":"app_notifications_read","summary":"POST me/notifications/{notice}/read (unread=1 to mark it unread again)","description":"POST me/notifications/{notice}/read (unread=1 to mark it unread again)\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"notice","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/notification-preferences":{"get":{"tags":["me"],"operationId":"app_notifications_preferences","summary":"GET /api/v1/app/companies/{company}/me/notification-preferences","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["me"],"operationId":"app_notifications_preferences_update","summary":"PUT me/notification-preferences {categories","description":"PUT me/notification-preferences {categories: {requests: {in_app, email, whatsapp}, ...}}\n\n60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/dashboards":{"get":{"tags":["me"],"operationId":"app_my_dashboards_index","summary":"GET /api/v1/app/companies/{company}/me/dashboards","description":"Permission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["me"],"operationId":"app_my_dashboards_store","summary":"POST /api/v1/app/companies/{company}/me/dashboards","description":"Permission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(60)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(60)"}}}},"required":["name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/dashboards/{dashboard}":{"get":{"tags":["me"],"operationId":"app_my_dashboards_show","summary":"GET me/dashboards/{dashboard}","description":"GET me/dashboards/{dashboard}: with every widget's figure.\n\nPermission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"dashboard","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["me"],"operationId":"app_my_dashboards_update_patch","summary":"PATCH /api/v1/app/companies/{company}/me/dashboards/{dashboard}","description":"Permission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"dashboard","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(60)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(60)"}}}},"required":["name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["me"],"operationId":"app_my_dashboards_update_put","summary":"PUT /api/v1/app/companies/{company}/me/dashboards/{dashboard}","description":"Permission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"dashboard","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(60)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(60)"}}}},"required":["name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["me"],"operationId":"app_my_dashboards_destroy","summary":"DELETE /api/v1/app/companies/{company}/me/dashboards/{dashboard}","description":"Permission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"dashboard","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/dashboards/{dashboard}/order":{"put":{"tags":["me"],"operationId":"app_my_dashboards_order","summary":"PUT me/dashboards/{dashboard}/order {ids","description":"PUT me/dashboards/{dashboard}/order {ids: [...]}\n\nPermission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"dashboard","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/dashboards/{dashboard}/interval":{"put":{"tags":["me"],"operationId":"app_my_dashboards_interval","summary":"PUT /api/v1/app/companies/{company}/me/dashboards/{dashboard}/interval","description":"Permission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"dashboard","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/dashboards-order":{"put":{"tags":["me"],"operationId":"app_my_dashboards_reorder","summary":"PUT /api/v1/app/companies/{company}/me/dashboards-order","description":"Permission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/dashboards/{dashboard}/widgets":{"post":{"tags":["me"],"operationId":"app_my_dashboards_widgets_store","summary":"POST /api/v1/app/companies/{company}/me/dashboards/{dashboard}/widgets","description":"Permission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"dashboard","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"metric":{"type":"string","description":"$widget ? 'sometimes' : 'required'|Rule::in(array_keys(self::METRICS))"},"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"sometimes|nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(60)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(60)"}}},"chart":{"type":"string","nullable":true,"description":"sometimes|nullable|Rule::in($metric === 'report' ? array_keys(\\App\\Support\\CommandCenter::CHARTS) :..."},"width":{"type":"integer","enum":[1,2,3,4],"description":"sometimes|integer|in:1,2,3,4"},"report_type":{"type":"string","enum":["approved_leaves","approved_vacations","contract_expiry","document_expiry","termination_reasons","end_of_probation","headcount","joiners_leavers","overtime_hours","pending_tasks","retention_rate","turnover","loans","net_salaries","overtime_pay"],"description":"required|in:approved_leaves,approved_vacations,contract_expiry,document_expiry,termination_reasons,end_of_probation,headcount,joiners_leavers,overtime_hours,pending_tasks,retention_rate,turnover,loans,net_salaries,overtime_pay"},"breakdown":{"type":"string","enum":["none","age_group","gender","nationality","service_period","work_type"],"nullable":true,"description":"nullable|in:none,age_group,gender,nationality,service_period,work_type"},"level":{"type":"string","enum":["company","branch","work_location","department","section","group","project","job_role"],"description":"required|in:company,branch,work_location,department,section,group,project,job_role"},"unit_ids":{"type":"array","items":{"type":"integer"},"description":"$hasUnits ? 'required' : 'nullable'|array"},"interval":{"type":"string","description":"$intervals ? ['required', 'integer', Rule::in($intervals)] : ['nullable']"},"upcoming":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"options":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"}},"required":["report_type","level"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/me/dashboard-widgets/{widget}":{"patch":{"tags":["me"],"operationId":"app_my_dashboards_widgets_update_patch","summary":"PATCH /api/v1/app/companies/{company}/me/dashboard-widgets/{widget}","description":"Permission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"widget","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"metric":{"type":"string","description":"$widget ? 'sometimes' : 'required'|Rule::in(array_keys(self::METRICS))"},"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"sometimes|nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(60)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(60)"}}},"chart":{"type":"string","nullable":true,"description":"sometimes|nullable|Rule::in($metric === 'report' ? array_keys(\\App\\Support\\CommandCenter::CHARTS) :..."},"width":{"type":"integer","enum":[1,2,3,4],"description":"sometimes|integer|in:1,2,3,4"},"report_type":{"type":"string","enum":["approved_leaves","approved_vacations","contract_expiry","document_expiry","termination_reasons","end_of_probation","headcount","joiners_leavers","overtime_hours","pending_tasks","retention_rate","turnover","loans","net_salaries","overtime_pay"],"description":"required|in:approved_leaves,approved_vacations,contract_expiry,document_expiry,termination_reasons,end_of_probation,headcount,joiners_leavers,overtime_hours,pending_tasks,retention_rate,turnover,loans,net_salaries,overtime_pay"},"breakdown":{"type":"string","enum":["none","age_group","gender","nationality","service_period","work_type"],"nullable":true,"description":"nullable|in:none,age_group,gender,nationality,service_period,work_type"},"level":{"type":"string","enum":["company","branch","work_location","department","section","group","project","job_role"],"description":"required|in:company,branch,work_location,department,section,group,project,job_role"},"unit_ids":{"type":"array","items":{"type":"integer"},"description":"$hasUnits ? 'required' : 'nullable'|array"},"interval":{"type":"string","description":"$intervals ? ['required', 'integer', Rule::in($intervals)] : ['nullable']"},"upcoming":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"options":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"}},"required":["report_type","level"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["me"],"operationId":"app_my_dashboards_widgets_update_put","summary":"PUT /api/v1/app/companies/{company}/me/dashboard-widgets/{widget}","description":"Permission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"widget","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"metric":{"type":"string","description":"$widget ? 'sometimes' : 'required'|Rule::in(array_keys(self::METRICS))"},"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"sometimes|nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(60)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(60)"}}},"chart":{"type":"string","nullable":true,"description":"sometimes|nullable|Rule::in($metric === 'report' ? array_keys(\\App\\Support\\CommandCenter::CHARTS) :..."},"width":{"type":"integer","enum":[1,2,3,4],"description":"sometimes|integer|in:1,2,3,4"},"report_type":{"type":"string","enum":["approved_leaves","approved_vacations","contract_expiry","document_expiry","termination_reasons","end_of_probation","headcount","joiners_leavers","overtime_hours","pending_tasks","retention_rate","turnover","loans","net_salaries","overtime_pay"],"description":"required|in:approved_leaves,approved_vacations,contract_expiry,document_expiry,termination_reasons,end_of_probation,headcount,joiners_leavers,overtime_hours,pending_tasks,retention_rate,turnover,loans,net_salaries,overtime_pay"},"breakdown":{"type":"string","enum":["none","age_group","gender","nationality","service_period","work_type"],"nullable":true,"description":"nullable|in:none,age_group,gender,nationality,service_period,work_type"},"level":{"type":"string","enum":["company","branch","work_location","department","section","group","project","job_role"],"description":"required|in:company,branch,work_location,department,section,group,project,job_role"},"unit_ids":{"type":"array","items":{"type":"integer"},"description":"$hasUnits ? 'required' : 'nullable'|array"},"interval":{"type":"string","description":"$intervals ? ['required', 'integer', Rule::in($intervals)] : ['nullable']"},"upcoming":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"options":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"}},"required":["report_type","level"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["me"],"operationId":"app_my_dashboards_widgets_destroy","summary":"DELETE /api/v1/app/companies/{company}/me/dashboard-widgets/{widget}","description":"Permission: self.dashboard. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"widget","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.dashboard"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/miscellaneous-requests":{"get":{"tags":["miscellaneous-requests"],"operationId":"app_misc_requests_index","summary":"GET /api/v1/app/companies/{company}/miscellaneous-requests","description":"Permission: requests.miscellaneous.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["requests.miscellaneous.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/miscellaneous-requests/{employeeRequest}":{"patch":{"tags":["miscellaneous-requests"],"operationId":"app_misc_requests_update","summary":"PATCH /api/v1/app/companies/{company}/miscellaneous-requests/{employeeRequest}","description":"Permission: requests.miscellaneous.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employeeRequest","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["requests.miscellaneous.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["miscellaneous-requests"],"operationId":"app_misc_requests_destroy","summary":"DELETE /api/v1/app/companies/{company}/miscellaneous-requests/{employeeRequest}","description":"Permission: requests.miscellaneous.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employeeRequest","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["requests.miscellaneous.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/nine-box/employees/{employee}":{"get":{"tags":["nine-box"],"operationId":"app_nine_box_employee","summary":"GET /api/v1/app/companies/{company}/nine-box/employees/{employee}","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/nine-box":{"get":{"tags":["nine-box"],"operationId":"app_nine_box_index","summary":"cycle_id, branch_id, department_id, position_id; box narrows to one box.","description":"cycle_id, branch_id, department_id, position_id; box narrows to one box. format=csv downloads it.\n\nPermission: performance.view or performance.manage or performance.nine_box.view or performance.nine_box.assess. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.view","performance.manage","performance.nine_box.view","performance.nine_box.assess"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/notification-events":{"get":{"tags":["notification-events"],"operationId":"app_notifications_events","summary":"GET notification-events?kind=&category=&q= \u2014 which events notify whom (notifications.manage).","description":"GET notification-events?kind=&category=&q= \u2014 which events notify whom (notifications.manage).\n\nPermission: notifications.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["notifications.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/notification-log":{"get":{"tags":["notification-log"],"operationId":"app_notifications_log","summary":"GET notification-log?from=&to=&category=&channel=&status=&person=&branch=&kind=&actor=&q=&per_page=&summary=1","description":"GET notification-log?from=&to=&category=&channel=&status=&person=&branch=&kind=&actor=&q=&per_page=&summary=1\n\nPermission: notifications.log.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["notifications.log.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/notification-log/export":{"get":{"tags":["notification-log"],"operationId":"app_notifications_log_export","summary":"GET notification-log/export?format=csv|xlsx&\u2026filters, or with send= one send's recipients.","description":"GET notification-log/export?format=csv|xlsx&\u2026filters, or with send= one send's recipients.\n\nPermission: notifications.log.view. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["csv","xlsx"],"nullable":true},"description":"nullable|in:csv,xlsx"},{"name":"send","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"}],"x-permissions":["notifications.log.view"],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/notification-log/{send}":{"get":{"tags":["notification-log"],"operationId":"app_notifications_log_show","summary":"GET notification-log/{send}","description":"GET notification-log/{send}: the send with every person in scope and what each channel answered.\n\nPermission: notifications.log.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"send","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["notifications.log.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/notification-setup":{"get":{"tags":["notification-setup"],"operationId":"app_notifications_setup","summary":"GET /api/v1/app/companies/{company}/notification-setup","description":"Permission: notifications.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["notifications.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["notification-setup"],"operationId":"app_notifications_setup_update","summary":"PUT notification-setup {categories_off, receiver_emails, email_everyone, reminders}","description":"PUT notification-setup {categories_off, receiver_emails, email_everyone, reminders}\n\nPermission: notifications.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["notifications.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/objectives/{objective}":{"patch":{"tags":["objectives"],"operationId":"app_performance_objectives_update_patch","summary":"PATCH /api/v1/app/companies/{company}/objectives/{objective}","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"objective","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["objectives"],"operationId":"app_performance_objectives_update_put","summary":"PUT /api/v1/app/companies/{company}/objectives/{objective}","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"objective","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["objectives"],"operationId":"app_performance_objectives_destroy","summary":"DELETE /api/v1/app/companies/{company}/objectives/{objective}","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"objective","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/off-cycle-settlements":{"post":{"tags":["off-cycle-settlements"],"operationId":"app_payroll_off_cycle_settle","summary":"ids","description":"ids: unpaid off-cycle transactions marked paid.\n\nPermission: payroll.transactions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.transactions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1"}},"required":["ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/okr-templates":{"post":{"tags":["okr-templates"],"operationId":"app_performance_okr_templates_store","summary":"name {en, ar}; objectives are added one by one.","description":"name {en, ar}; objectives are added one by one.\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/okr-templates/{template}":{"patch":{"tags":["okr-templates"],"operationId":"app_performance_okr_templates_update_patch","summary":"name {en, ar}; objectives are added one by one.","description":"name {en, ar}; objectives are added one by one.\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["okr-templates"],"operationId":"app_performance_okr_templates_update_put","summary":"name {en, ar}; objectives are added one by one.","description":"name {en, ar}; objectives are added one by one.\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["okr-templates"],"operationId":"app_performance_okr_templates_destroy","summary":"DELETE /api/v1/app/companies/{company}/okr-templates/{template}","description":"Permission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/okr-templates/{template}/objectives":{"post":{"tags":["okr-templates"],"operationId":"app_performance_okr_templates_objectives_store","summary":"An objective (as for an employee's OKRs) added, or replaced at index.","description":"An objective (as for an employee's OKRs) added, or replaced at index.\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/okr-templates/{template}/objectives/{index}":{"put":{"tags":["okr-templates"],"operationId":"app_performance_okr_templates_objectives_update","summary":"An objective (as for an employee's OKRs) added, or replaced at index.","description":"An objective (as for an employee's OKRs) added, or replaced at index.\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}},{"name":"index","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["okr-templates"],"operationId":"app_performance_okr_templates_objectives_destroy","summary":"DELETE /api/v1/app/companies/{company}/okr-templates/{template}/objectives/{index}","description":"Permission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}},{"name":"index","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/okrs/mass-assign":{"post":{"tags":["okrs"],"operationId":"app_performance_okrs_mass_assign","summary":"template_id, evaluations (ids).","description":"template_id, evaluations (ids).\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/org-chart":{"get":{"tags":["org-chart"],"operationId":"app_directory_chart","summary":"GET /api/v1/app/companies/{company}/org-chart","description":"Permission: self.org_chart or employees.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.org_chart","employees.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/org-units":{"get":{"tags":["org-units"],"operationId":"app_org_units_index","summary":"GET /api/v1/app/companies/{company}/org-units","description":"Permission: structure.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["structure.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["org-units"],"operationId":"app_org_units_store","summary":"POST /api/v1/app/companies/{company}/org-units","description":"Permission: structure.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["structure.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["work_location","department","section","project","hierarchy_group","business_unit","division","segment"],"description":"$unit ? 'sometimes' : 'required'|in:work_location,department,section,project,hierarchy_group,business_unit,division,segment"},"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"$unit ? 'sometimes' : 'required'|array","properties":{"en":{"type":"string","description":"$unit ? 'required_with:name' : 'required'|string|'max:' . \\App\\Support\\Limits::chars(120)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(120)"}}},"code":{"type":"string","nullable":true,"description":"nullable|alpha_dash|max:30"},"establishment_number":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"subsidiary_id":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"external_ref":{"type":"string","nullable":true,"description":"nullable|string|max:64"},"logo":{"type":"string","format":"binary","nullable":true,"description":"nullable|image|mimes:png,jpg,jpeg,webp,svg|max:10240"},"remove_logo":{"type":"boolean","description":"sometimes|boolean"},"establishment_name":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"governance_location":{"type":"string","nullable":true,"description":"nullable|string|max:100"},"ss_number":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"tax_number":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"address":{"type":"string","nullable":true,"description":"nullable|string|max:255"},"po_box":{"type":"string","nullable":true,"description":"nullable|string|max:30"},"branch_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:branches,id"},"parent_id":{"type":"integer","description":"$type === 'section' && !$unit?->parent_id ? 'required' : 'nullable'|integer|exists:org_units,id"},"is_active":{"type":"boolean","description":"sometimes|boolean"},"sort_order":{"type":"integer","description":"sometimes|integer|min:0"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/org-units/inline":{"post":{"tags":["org-units"],"operationId":"app_org_units_inline","summary":"Adds a missing level for an employee's job details, where the branch allows it (AddOrgLevel).","description":"Adds a missing level for an employee's job details, where the branch allows it (AddOrgLevel).\n\nPermission: structure.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["structure.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["work_location","department","section","project","hierarchy_group","business_unit","division","segment"],"description":"required|in:work_location,department,section,project,hierarchy_group,business_unit,division,segment"},"employee_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:employees,id"}},"required":["type"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/org-units/{unit}":{"patch":{"tags":["org-units"],"operationId":"app_org_units_update","summary":"PATCH /api/v1/app/companies/{company}/org-units/{unit}","description":"Permission: structure.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"unit","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["structure.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["work_location","department","section","project","hierarchy_group","business_unit","division","segment"],"description":"$unit ? 'sometimes' : 'required'|in:work_location,department,section,project,hierarchy_group,business_unit,division,segment"},"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"$unit ? 'sometimes' : 'required'|array","properties":{"en":{"type":"string","description":"$unit ? 'required_with:name' : 'required'|string|'max:' . \\App\\Support\\Limits::chars(120)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(120)"}}},"code":{"type":"string","nullable":true,"description":"nullable|alpha_dash|max:30"},"establishment_number":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"subsidiary_id":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"external_ref":{"type":"string","nullable":true,"description":"nullable|string|max:64"},"logo":{"type":"string","format":"binary","nullable":true,"description":"nullable|image|mimes:png,jpg,jpeg,webp,svg|max:10240"},"remove_logo":{"type":"boolean","description":"sometimes|boolean"},"establishment_name":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"governance_location":{"type":"string","nullable":true,"description":"nullable|string|max:100"},"ss_number":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"tax_number":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"address":{"type":"string","nullable":true,"description":"nullable|string|max:255"},"po_box":{"type":"string","nullable":true,"description":"nullable|string|max:30"},"branch_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:branches,id"},"parent_id":{"type":"integer","description":"$type === 'section' && !$unit?->parent_id ? 'required' : 'nullable'|integer|exists:org_units,id"},"is_active":{"type":"boolean","description":"sometimes|boolean"},"sort_order":{"type":"integer","description":"sometimes|integer|min:0"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["org-units"],"operationId":"app_org_units_destroy","summary":"DELETE /api/v1/app/companies/{company}/org-units/{unit}","description":"Permission: structure.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"unit","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["structure.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/overtime-types":{"get":{"tags":["overtime-types"],"operationId":"app_overtime_types_index","summary":"GET /api/v1/app/companies/{company}/overtime-types","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["overtime-types"],"operationId":"app_overtime_types_store","summary":"POST /api/v1/app/companies/{company}/overtime-types","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"applies_on":{"type":"string","enum":["any","workday","weekend","holiday"],"description":"required|in:any,workday,weekend,holiday"},"rate":{"type":"number","description":"required|numeric|min:0|max:20"},"allowance_method":{"type":"string","enum":["hourly","daily"],"description":"required|in:hourly,daily"},"allowances_rate":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:20"},"allowance_type_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"transaction_type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:transaction_types,id"},"limit_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:744"},"limit_period":{"type":"string","enum":["day","week","month"],"nullable":true,"description":"nullable|in:day,week,month"},"exceptions":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["0","1","2","3","4","5","6","off"],"nullable":true,"description":"nullable|in:0,1,2,3,4,5,6,off"},"from":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"to":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"basic_rate":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:20"},"allowances_rate":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:20"},"method":{"type":"string","enum":["hourly","daily"],"nullable":true,"description":"nullable|in:hourly,daily"}}},"nullable":true,"description":"nullable|array"}},"required":["name","applies_on","rate","allowance_method"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/overtime-types/{type}":{"put":{"tags":["overtime-types"],"operationId":"app_overtime_types_update","summary":"PUT /api/v1/app/companies/{company}/overtime-types/{type}","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"applies_on":{"type":"string","enum":["any","workday","weekend","holiday"],"description":"required|in:any,workday,weekend,holiday"},"rate":{"type":"number","description":"required|numeric|min:0|max:20"},"allowance_method":{"type":"string","enum":["hourly","daily"],"description":"required|in:hourly,daily"},"allowances_rate":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:20"},"allowance_type_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"transaction_type_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:transaction_types,id"},"limit_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:744"},"limit_period":{"type":"string","enum":["day","week","month"],"nullable":true,"description":"nullable|in:day,week,month"},"exceptions":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["0","1","2","3","4","5","6","off"],"nullable":true,"description":"nullable|in:0,1,2,3,4,5,6,off"},"from":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"to":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"basic_rate":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:20"},"allowances_rate":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:20"},"method":{"type":"string","enum":["hourly","daily"],"nullable":true,"description":"nullable|in:hourly,daily"}}},"nullable":true,"description":"nullable|array"}},"required":["name","applies_on","rate","allowance_method"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["overtime-types"],"operationId":"app_overtime_types_destroy","summary":"DELETE /api/v1/app/companies/{company}/overtime-types/{type}","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/overtimes":{"get":{"tags":["overtimes"],"operationId":"app_overtimes_index","summary":"Overtimes in scope, newest first","description":"Overtimes in scope, newest first: employee_id, status, overtime_type, from / to (the overtime date).\n\nPermission: payroll.overtime.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.overtime.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["overtimes"],"operationId":"app_overtimes_store","summary":"POST /api/v1/app/companies/{company}/overtimes","description":"Permission: payroll.overtime.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.overtime.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"effective_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"out_of_payroll":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"attachment":{"type":"string","format":"binary","nullable":true,"description":"nullable|file|max:10240|mimes:mp4,pdf,doc,docx,xls,xlsx,ppt,pptx,txt,csv,jpeg,png,gif,jpg,zip"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/overtimes/{overtime}":{"put":{"tags":["overtimes"],"operationId":"app_overtimes_update","summary":"PUT /api/v1/app/companies/{company}/overtimes/{overtime}","description":"Permission: payroll.overtime.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"overtime","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.overtime.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"effective_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"out_of_payroll":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"attachment":{"type":"string","format":"binary","nullable":true,"description":"nullable|file|max:10240|mimes:mp4,pdf,doc,docx,xls,xlsx,ppt,pptx,txt,csv,jpeg,png,gif,jpg,zip"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/overtimes/convert":{"post":{"tags":["overtimes"],"operationId":"app_overtimes_convert","summary":"Overtime \u2192 time off","description":"Overtime \u2192 time off: from, to, leave_type_id, rate (%), effective_date, minimum_hours, combined, notes, department, work_location, section, main_project.\n\nPermission: payroll.overtime.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.overtime.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"string","format":"date","description":"required|date"},"to":{"type":"string","format":"date","description":"required|date|after_or_equal:from"},"leave_type_id":{"type":"integer","description":"required|integer"},"rate":{"type":"number","description":"required|numeric|min:0.01|max:1000"},"effective_date":{"type":"string","format":"date","description":"required|date"},"minimum_hours":{"type":"number","description":"required|numeric|min:0"},"combined":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"department":{"type":"integer","nullable":true,"description":"nullable|integer"},"work_location":{"type":"integer","nullable":true,"description":"nullable|integer"},"section":{"type":"integer","nullable":true,"description":"nullable|integer"},"main_project":{"type":"integer","nullable":true,"description":"nullable|integer"}},"required":["from","to","leave_type_id","rate","effective_date","minimum_hours"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/overtimes/batch-as-income":{"post":{"tags":["overtimes"],"operationId":"app_overtimes_batch_as_income","summary":"An overtime batch as income","description":"An overtime batch as income: employee_id, transaction_type_id (an earning), overtime_type_id, hours, date, description.\n\nPermission: payroll.overtime.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.overtime.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"transaction_type_id":{"type":"string","description":"required|exists:transaction_types,id"},"overtime_type_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"hours":{"type":"number","description":"required|numeric|gt:0|max:744"},"date":{"type":"string","format":"date","description":"required|date"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(190)"}},"required":["employee_id","transaction_type_id","hours","date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/part-time-assignments":{"get":{"tags":["part-time-assignments"],"operationId":"app_part_time_index","summary":"Assignments in scope, newest first","description":"Assignments in scope, newest first: employee_id, type (transaction type id), effective (a date), from / to, and the org filters.\n\nPermission: payroll.part_time.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.part_time.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["part-time-assignments"],"operationId":"app_part_time_store","summary":"POST /api/v1/app/companies/{company}/part-time-assignments","description":"Permission: payroll.part_time.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.part_time.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"transaction_type_id":{"type":"string","description":"required|exists:transaction_types,id"},"amount":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"recurring_value":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"net":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"effective_date":{"type":"string","format":"date","description":"required|date"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:effective_date"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(255)"},"attachment":{"type":"string","format":"binary","nullable":true,"description":"nullable|file|max:10240|mimes:pdf,doc,docx,xls,xlsx,ppt,pptx,txt,csv,jpeg,png,gif,jpg,zip"}},"required":["transaction_type_id","effective_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/part-time-assignments/{assignment}":{"delete":{"tags":["part-time-assignments"],"operationId":"app_part_time_destroy","summary":"DELETE /api/v1/app/companies/{company}/part-time-assignments/{assignment}","description":"Permission: payroll.part_time.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"assignment","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.part_time.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["part-time-assignments"],"operationId":"app_part_time_update","summary":"PUT /api/v1/app/companies/{company}/part-time-assignments/{assignment}","description":"Permission: payroll.part_time.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"assignment","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.part_time.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"transaction_type_id":{"type":"string","description":"required|exists:transaction_types,id"},"amount":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"recurring_value":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"net":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"effective_date":{"type":"string","format":"date","description":"required|date"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:effective_date"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(255)"},"attachment":{"type":"string","format":"binary","nullable":true,"description":"nullable|file|max:10240|mimes:pdf,doc,docx,xls,xlsx,ppt,pptx,txt,csv,jpeg,png,gif,jpg,zip"}},"required":["transaction_type_id","effective_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll/{month}":{"get":{"tags":["payroll"],"operationId":"app_payroll_month","summary":"Mawarid's GET payroll/{YYYY-MM}","description":"Mawarid's GET payroll/{YYYY-MM}: the month's approved regular run with its payslips (404 until approved).\n\nPermission: payroll.runs.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"month","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}$"}}],"x-permissions":["payroll.runs.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-lists/{list}":{"get":{"tags":["payroll-lists"],"operationId":"app_payroll_lists","summary":"air-tickets, business-trips, expenses or missing-punches","description":"air-tickets, business-trips, expenses or missing-punches: status, from, to, travel_policy, travel_from, travel_to, expense_name; paged.\n\nPermission: payroll.view or payroll.manage or payroll.business_trips.view or payroll.expenses.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"list","in":"path","required":true,"schema":{"type":"string","pattern":"^air-tickets|business-trips|expenses|missing-punches$"}}],"x-permissions":["payroll.view","payroll.manage","payroll.business_trips.view","payroll.expenses.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-rules/{section}":{"get":{"tags":["payroll-rules"],"operationId":"app_payroll_rules_index","summary":"A rules list; bank-accounts can be filtered by branch_id.","description":"A rules list; bank-accounts can be filtered by branch_id.\n\nPermission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^social-security|tax|extra-salaries|bank-accounts|bank-templates|slip-templates$"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["payroll-rules"],"operationId":"app_payroll_rules_store","summary":"POST /api/v1/app/companies/{company}/payroll-rules/{section}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^social-security|tax|extra-salaries|bank-accounts|bank-templates|slip-templates$"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"employee_percent":{"type":"number","description":"required|numeric|min:0|max:100"},"employer_percent":{"type":"number","description":"required|numeric|min:0|max:100"},"salary_from":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"salary_to":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|gte:salary_from"},"ceiling":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"floor":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"base":{"type":"string","enum":["basic","gross"],"description":"required|in:basic,gross"},"external_ref":{"type":"string","nullable":true,"description":"nullable|string|max:64"},"min_work_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:31"},"effective_from":{"type":"string","format":"date","description":"required|date"},"effective_to":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:effective_from"},"percent":{"type":"number","description":"required|numeric|min:0|max:1000"},"distribution":{"type":"string","enum":["once","monthly"],"description":"required|in:once,monthly"},"pay_month":{"type":"integer","description":"required|integer|between:1,12"},"country":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"bank_name":{"type":"string","description":"required|string|max:150"},"bank_branch":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"account_name":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"account_number":{"type":"string","description":"required|string|max:60"},"iban":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"exchange_account":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"establishment_number":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"currency":{"type":"string","nullable":true,"description":"nullable|alpha|size:3"},"branch_id":{"type":"string","nullable":true,"description":"nullable|exists:branches,id"},"bank_export_template_id":{"type":"string","nullable":true,"description":"nullable|exists:bank_export_templates,id"},"brackets":{"type":"string","description":"$rows ? 'nullable' : 'required'|string|max:2000|regex:/^(\\s*\\d+(\\.\\d+)?\\s*:\\s*\\d+(\\.\\d+)?\\s*(\\r?\\n|$))+$/"},"bracket_period":{"type":"string","enum":["monthly","annual"],"nullable":true,"description":"nullable|in:monthly,annual"},"bracket_rows":{"type":"array","items":{"type":"object","properties":{"min":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"max":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"rate":{"type":"number","description":"required|numeric|min:0|max:100"},"extra_exemption":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100"}}},"description":"array|max:30"},"personal_exemption":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"family_exemption":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"other_exemption":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(255)"},"kind":{"type":"string","enum":["bank","wps"],"description":"required|in:bank,wps"},"bank":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"extension":{"type":"string","enum":["csv","txt","sif","xlsx"],"description":"required|in:csv,txt,sif,xlsx"},"delimiter":{"type":"string","enum":["","",";",""],"description":"required|in:,,;,|,tab"},"header_lines":{"type":"string","nullable":true,"description":"nullable|string|max:2000"},"footer_lines":{"type":"string","nullable":true,"description":"nullable|string|max:2000"},"columns_text":{"type":"string","description":"required|string|max:4000"},"date_format":{"type":"string","description":"required|string|max:20"},"amount_decimals":{"type":"integer","description":"required|integer|between:0,4"},"slip_type":{"type":"string","enum":["salary","settlement"],"description":"required|in:salary,settlement"},"language":{"type":"string","enum":["en","ar"],"description":"required|in:en,ar|unique:salary_slip_templates"},"header":{"type":"string","nullable":true,"description":"nullable|string|max:5000"},"footer":{"type":"string","nullable":true,"description":"nullable|string|max:5000"}},"required":["name_ar","name_en","employee_percent","employer_percent","base","effective_from","percent","distribution","pay_month","bank_name","account_number","kind","extension","delimiter","columns_text","date_format","amount_decimals","slip_type","language"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-rules/{section}/{id}":{"put":{"tags":["payroll-rules"],"operationId":"app_payroll_rules_update","summary":"The whole record is sent, as on the screen (a switch left out is off).","description":"The whole record is sent, as on the screen (a switch left out is off).\n\nPermission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^social-security|tax|extra-salaries|bank-accounts|bank-templates|slip-templates$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"employee_percent":{"type":"number","description":"required|numeric|min:0|max:100"},"employer_percent":{"type":"number","description":"required|numeric|min:0|max:100"},"salary_from":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"salary_to":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|gte:salary_from"},"ceiling":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"floor":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"base":{"type":"string","enum":["basic","gross"],"description":"required|in:basic,gross"},"external_ref":{"type":"string","nullable":true,"description":"nullable|string|max:64"},"min_work_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:31"},"effective_from":{"type":"string","format":"date","description":"required|date"},"effective_to":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:effective_from"},"percent":{"type":"number","description":"required|numeric|min:0|max:1000"},"distribution":{"type":"string","enum":["once","monthly"],"description":"required|in:once,monthly"},"pay_month":{"type":"integer","description":"required|integer|between:1,12"},"country":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"bank_name":{"type":"string","description":"required|string|max:150"},"bank_branch":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"account_name":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"account_number":{"type":"string","description":"required|string|max:60"},"iban":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"exchange_account":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"establishment_number":{"type":"string","nullable":true,"description":"nullable|string|max:60"},"currency":{"type":"string","nullable":true,"description":"nullable|alpha|size:3"},"branch_id":{"type":"string","nullable":true,"description":"nullable|exists:branches,id"},"bank_export_template_id":{"type":"string","nullable":true,"description":"nullable|exists:bank_export_templates,id"},"brackets":{"type":"string","description":"$rows ? 'nullable' : 'required'|string|max:2000|regex:/^(\\s*\\d+(\\.\\d+)?\\s*:\\s*\\d+(\\.\\d+)?\\s*(\\r?\\n|$))+$/"},"bracket_period":{"type":"string","enum":["monthly","annual"],"nullable":true,"description":"nullable|in:monthly,annual"},"bracket_rows":{"type":"array","items":{"type":"object","properties":{"min":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"max":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"rate":{"type":"number","description":"required|numeric|min:0|max:100"},"extra_exemption":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100"}}},"description":"array|max:30"},"personal_exemption":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"family_exemption":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"other_exemption":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(255)"},"kind":{"type":"string","enum":["bank","wps"],"description":"required|in:bank,wps"},"bank":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"extension":{"type":"string","enum":["csv","txt","sif","xlsx"],"description":"required|in:csv,txt,sif,xlsx"},"delimiter":{"type":"string","enum":["","",";",""],"description":"required|in:,,;,|,tab"},"header_lines":{"type":"string","nullable":true,"description":"nullable|string|max:2000"},"footer_lines":{"type":"string","nullable":true,"description":"nullable|string|max:2000"},"columns_text":{"type":"string","description":"required|string|max:4000"},"date_format":{"type":"string","description":"required|string|max:20"},"amount_decimals":{"type":"integer","description":"required|integer|between:0,4"},"slip_type":{"type":"string","enum":["salary","settlement"],"description":"required|in:salary,settlement"},"language":{"type":"string","enum":["en","ar"],"description":"required|in:en,ar|unique:salary_slip_templates"},"header":{"type":"string","nullable":true,"description":"nullable|string|max:5000"},"footer":{"type":"string","nullable":true,"description":"nullable|string|max:5000"}},"required":["name_ar","name_en","employee_percent","employer_percent","base","effective_from","percent","distribution","pay_month","bank_name","account_number","kind","extension","delimiter","columns_text","date_format","amount_decimals","slip_type","language"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["payroll-rules"],"operationId":"app_payroll_rules_destroy","summary":"DELETE /api/v1/app/companies/{company}/payroll-rules/{section}/{id}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^social-security|tax|extra-salaries|bank-accounts|bank-templates|slip-templates$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-runs":{"get":{"tags":["payroll-runs"],"operationId":"app_payroll_runs","summary":"Payroll runs, newest first","description":"Payroll runs, newest first: month, kind (regular | off_cycle), status.\n\nPermission: payroll.runs.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["payroll-runs"],"operationId":"app_payroll_runs_store","summary":"POST /api/v1/app/companies/{company}/payroll-runs","description":"Permission: payroll.runs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"month":{"type":"string","format":"date","description":"required|date_format:Y-m"},"departments":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"branches":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"employees":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"picks":{"type":"array","items":{"type":"string"},"nullable":true,"description":"nullable|array"},"period_from":{"type":"string","format":"date","nullable":true,"description":"nullable|required_with:period_to|date_format:Y-m-d"},"period_to":{"type":"string","format":"date","nullable":true,"description":"nullable|required_with:period_from|date_format:Y-m-d|after_or_equal:period_from"},"batch_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"move_pending":{"type":"boolean","nullable":true,"description":"nullable|boolean"}},"required":["month"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-runs/{run}/review":{"get":{"tags":["payroll-runs"],"operationId":"app_payroll_runs_review","summary":"GET /api/v1/app/companies/{company}/payroll-runs/{run}/review","description":"Permission: payroll.runs.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-runs/{run}":{"get":{"tags":["payroll-runs"],"operationId":"app_payroll_runs_show","summary":"A run with its payslips (the ones in my scope).","description":"A run with its payslips (the ones in my scope).\n\nPermission: payroll.runs.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["payroll-runs"],"operationId":"app_payroll_runs_destroy","summary":"DELETE /api/v1/app/companies/{company}/payroll-runs/{run}","description":"Permission: payroll.runs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-runs/off-cycle":{"post":{"tags":["payroll-runs"],"operationId":"app_payroll_runs_off_cycle","summary":"POST /api/v1/app/companies/{company}/payroll-runs/off-cycle","description":"Permission: payroll.runs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"required|string|max:100"},"month":{"type":"string","format":"date","description":"required|date_format:Y-m"},"percent_of_basic":{"type":"number","description":"required|numeric|min:1|max:1000"},"picks":{"type":"array","items":{"type":"string"},"nullable":true,"description":"nullable|array"}},"required":["title","month","percent_of_basic"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-runs/{run}/recalculate":{"post":{"tags":["payroll-runs"],"operationId":"app_payroll_runs_recalculate","summary":"POST /api/v1/app/companies/{company}/payroll-runs/{run}/recalculate","description":"Permission: payroll.runs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-runs/{run}/approve":{"post":{"tags":["payroll-runs"],"operationId":"app_payroll_runs_approve","summary":"Approve, or send through the salary batch approval chain","description":"Approve, or send through the salary batch approval chain: result is \"approved\" or \"sent\".\n\nPermission: payroll.runs.approve. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.approve"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-runs/{run}/paid":{"post":{"tags":["payroll-runs"],"operationId":"app_payroll_runs_paid","summary":"POST /api/v1/app/companies/{company}/payroll-runs/{run}/paid","description":"Permission: payroll.runs.approve. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.approve"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"paid_at":{"type":"string","format":"date","description":"required|date"},"payment_reference":{"type":"string","nullable":true,"description":"nullable|string|max:100"}},"required":["paid_at"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-runs/{run}/payslips/{payslip}":{"delete":{"tags":["payroll-runs"],"operationId":"app_payroll_runs_payslips_destroy","summary":"Salary row \u2192 Delete","description":"Salary row \u2192 Delete: takes one employee out of a draft batch.\n\nPermission: payroll.runs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}},{"name":"payslip","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-runs/{run}/revert":{"get":{"tags":["payroll-runs"],"operationId":"app_payroll_runs_revert_check","summary":"Whether an approved run can go back to draft","description":"Whether an approved run can go back to draft: can_revert and the reasons it can't (blockers, keyed).\n\nPermission: payroll.runs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["payroll-runs"],"operationId":"app_payroll_runs_revert","summary":"Revert to draft","description":"Revert to draft: undoes what approving did (reason optional); 422 with the blockers when refused.\n\nPermission: payroll.runs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payroll-settings/{section}":{"get":{"tags":["payroll-settings"],"operationId":"app_payroll_settings_show","summary":"GET /api/v1/app/companies/{company}/payroll-settings/{section}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^payroll-setup|in-advance|extra-salaries|tax-setup|journal|provision-setup$"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["payroll-settings"],"operationId":"app_payroll_settings_update","summary":"Only the fields sent change; the others keep their values.","description":"Only the fields sent change; the others keep their values.\n\nPermission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"section","in":"path","required":true,"schema":{"type":"string","pattern":"^payroll-setup|in-advance|extra-salaries|tax-setup|journal|provision-setup$"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"payroll_cutoff_day":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:28"},"day_base_absence":{"type":"string","description":"$base"},"day_base_unpaid":{"type":"string","description":"$base"},"day_base_overtime":{"type":"string","description":"$base"},"day_base_vacation":{"type":"string","description":"$base"},"absence_calc_mode":{"type":"string","description":"$mode"},"unpaid_calc_mode":{"type":"string","description":"$mode"},"gross_up_rate_on":{"type":"string","enum":["net","gross"],"description":"required|in:net,gross"},"gross_up_type_id":{"type":"string","nullable":true,"description":"nullable|exists:transaction_types,id"},"gross_up_excluded":{"type":"array","items":{"type":"string"},"description":"array"},"tax_method":{"type":"string","enum":["monthly","accumulative","distributed"],"description":"required|in:monthly,accumulative,distributed"},"slip_annual_types":{"type":"array","items":{"type":"string"},"description":"array"},"slip_sick_types":{"type":"array","items":{"type":"string"},"description":"array"},"slip_taken_types":{"type":"array","items":{"type":"string"},"description":"array"},"neg_settlement_name_en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},"neg_settlement_name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},"neg_deduction_name_en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},"neg_deduction_name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},"payslip_header":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"payslip_footer":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"ss_base":{"type":"string","enum":["basic","gross"],"nullable":true,"description":"nullable|in:basic,gross"},"advance_calc_base":{"type":"string","description":"required|Rule::in(array_keys(self::advanceBases()))"},"advance_slip":{"type":"string","enum":["regular","advance"],"description":"required|in:regular,advance"},"advance_allowance_type_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"es_reimburse_type_id":{"type":"string","nullable":true,"description":"Rule::requiredIf($reimburse)|nullable|$type"},"es_calc_base":{"type":"string","enum":["30","calendar"],"description":"required|in:30,calendar"},"es_included_type_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"}},"required":["gross_up_rate_on","tax_method","advance_calc_base","advance_slip","es_calc_base"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payslips/{payslip}":{"get":{"tags":["payslips"],"operationId":"app_payroll_payslips_show","summary":"A payslip","description":"A payslip: my own once its run is approved, or any in my payroll scope.\n\nPermission: self.payslips.view or payroll.runs.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"payslip","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.payslips.view","payroll.runs.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payslips/{payslip}/pdf":{"get":{"tags":["payslips"],"operationId":"app_payroll_payslips_pdf","summary":"The payslip as a PDF file (application/pdf), with the same access as showPayslip; lang=en|ar picks its language.","description":"The payslip as a PDF file (application/pdf), with the same access as showPayslip; lang=en|ar picks its language.\n\nPermission: self.payslips.download or payroll.runs.view. Module: hrm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"payslip","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.payslips.download","payroll.runs.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":30,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/payslips/{payslip}/adjustment":{"put":{"tags":["payslips"],"operationId":"app_payroll_payslips_adjust","summary":"PUT /api/v1/app/companies/{company}/payslips/{payslip}/adjustment","description":"Permission: payroll.runs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"payslip","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"adjustment":{"type":"number","description":"required|numeric"},"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(255)"}},"required":["adjustment"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/pending-biometrics":{"get":{"tags":["pending-biometrics"],"operationId":"app_devices_pending","summary":"New biometrics and conflicts waiting for HR, each with the devices a publish reaches and the ones that can't take it.","description":"New biometrics and conflicts waiting for HR, each with the devices a publish reaches and the ones that can't take it.\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/pending-biometrics/publish-all":{"post":{"tags":["pending-biometrics"],"operationId":"app_devices_publish_all","summary":"Every pending biometric, one employee's (employee_id) or the ticked people's (employee_ids).","description":"Every pending biometric, one employee's (employee_id) or the ticked people's (employee_ids).\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/pending-biometrics/{template}/decide":{"post":{"tags":["pending-biometrics"],"operationId":"app_devices_decide","summary":"action publish (device_ids for chosen devices only), source_only or reject.","description":"action publish (device_ids for chosen devices only), source_only or reject.\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","enum":["publish","source_only","reject"],"description":"required|in:publish,source_only,reject"},"device_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"}},"required":["action"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/people/{user}/access":{"get":{"tags":["people"],"operationId":"app_people_access","summary":"See as them","description":"See as them: everything a person has on the web and in the app. ?about=employee id for the field levels about one employee.\n\nPermission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"user","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/people/{user}/access/explain":{"get":{"tags":["people"],"operationId":"app_people_access_explain","summary":"Why is this open? ?permission=key","description":"Why is this open? ?permission=key\n\nPermission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"user","in":"path","required":true,"schema":{"type":"integer"}},{"name":"permission","in":"query","required":true,"schema":{"type":"string"},"description":"required|string|Rule::in(\\App\\Models\\Role::allPermissions())"}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/performance-kpis":{"get":{"tags":["performance-kpis"],"operationId":"app_performance_kpis","summary":"GET /api/v1/app/companies/{company}/performance-kpis","description":"Permission: performance.view or performance.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance.view","performance.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/performance-setup/{kind}":{"get":{"tags":["performance-setup"],"operationId":"app_performance_setup_index","summary":"One list of setup records","description":"One list of setup records: templates, general_factors, okr_templates, rating_types, competency categories, levels, competencies, position_competencies.\n\nPermission: performance.view or performance.manage.* or performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","pattern":"^evaluation-templates|general-factor-templates|okr-templates|rating-types|categories|levels|competencies|position-competencies$"}}],"x-permissions":["performance.view","performance.manage.*","performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/permission-groups":{"get":{"tags":["permission-groups"],"operationId":"app_permission_groups_index","summary":"GET /api/v1/app/companies/{company}/permission-groups","description":"Permission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["permission-groups"],"operationId":"app_permission_groups_store","summary":"POST /api/v1/app/companies/{company}/permission-groups","description":"Permission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"$group ? 'sometimes' : 'required'|array","properties":{"en":{"type":"string","description":"$group ? 'required_with:name' : 'required'|string|'max:' . \\App\\Support\\Limits::chars(120)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(120)"}}},"description":{"type":"array","items":{"type":"string","nullable":true},"nullable":true,"description":"nullable|array"},"is_active":{"type":"boolean","description":"sometimes|boolean"},"branch_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"sometimes|nullable|array"},"unit_rules":{"type":"array","items":{"type":"array","items":{"type":"integer"}},"nullable":true,"description":"sometimes|nullable|array"},"people":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"sometimes|nullable|array"},"manager_role_id":{"type":"string","description":"sometimes|$roleRule"},"team_leader_role_id":{"type":"string","description":"sometimes|$roleRule"},"employee_role_id":{"type":"string","description":"sometimes|$roleRule"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/permission-groups/{group}":{"patch":{"tags":["permission-groups"],"operationId":"app_permission_groups_update","summary":"PATCH /api/v1/app/companies/{company}/permission-groups/{group}","description":"Permission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"group","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"$group ? 'sometimes' : 'required'|array","properties":{"en":{"type":"string","description":"$group ? 'required_with:name' : 'required'|string|'max:' . \\App\\Support\\Limits::chars(120)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(120)"}}},"description":{"type":"array","items":{"type":"string","nullable":true},"nullable":true,"description":"nullable|array"},"is_active":{"type":"boolean","description":"sometimes|boolean"},"branch_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"sometimes|nullable|array"},"unit_rules":{"type":"array","items":{"type":"array","items":{"type":"integer"}},"nullable":true,"description":"sometimes|nullable|array"},"people":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"sometimes|nullable|array"},"manager_role_id":{"type":"string","description":"sometimes|$roleRule"},"team_leader_role_id":{"type":"string","description":"sometimes|$roleRule"},"employee_role_id":{"type":"string","description":"sometimes|$roleRule"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["permission-groups"],"operationId":"app_permission_groups_destroy","summary":"DELETE /api/v1/app/companies/{company}/permission-groups/{group}","description":"Permission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"group","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/permission-overrides":{"get":{"tags":["permission-overrides"],"operationId":"app_permission_overrides_index","summary":"One person's exceptions, or everyone's.","description":"One person's exceptions, or everyone's.\n\nPermission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["permission-overrides"],"operationId":"app_permission_overrides_store","summary":"Sets a person's exception; both channels empty take it off (data is then null).","description":"Sets a person's exception; both channels empty take it off (data is then null).\n\nPermission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"user_id":{"type":"integer","description":"required|integer"},"kind":{"type":"string","enum":["action","field"],"description":"required|in:action,field"},"subject":{"type":"string","description":"required|string|Rule::in($kind === \\App\\Models\\PermissionOverride::FIELD ? \\App\\Tenancy\\FieldAcc..."},"web":{"type":"string","nullable":true,"description":"nullable|Rule::in($values)"},"app":{"type":"string","nullable":true,"description":"nullable|Rule::in($values)"},"scope":{"type":"string","enum":["company","branch","department","work_location","section","project","hierarchy_group","business_unit","division","segment","reports","team","reports_of"],"nullable":true,"description":"nullable|in:company,branch,department,work_location,section,project,hierarchy_group,business_unit,division,segment,reports,team,reports_of"},"scope_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"reason":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}},"required":["user_id","kind","subject"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/permission-overrides/{override}":{"delete":{"tags":["permission-overrides"],"operationId":"app_permission_overrides_destroy","summary":"DELETE /api/v1/app/companies/{company}/permission-overrides/{override}","description":"Permission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"override","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/plan-actions/{action}":{"patch":{"tags":["plan-actions"],"operationId":"app_succession_actions_update_patch","summary":"Fields not sent stay as they are.","description":"Fields not sent stay as they are.\n\nPermission: succession.manage.* or succession.successors.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.successors.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"required|string|max:255"},"kind":{"type":"string","enum":["training","mentoring","assignment","project","other"],"nullable":true,"description":"nullable|in:training,mentoring,assignment,project,other"},"owner_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:employees,id"},"due_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"status":{"type":"string","enum":["planned","in_progress","done"],"nullable":true,"description":"nullable|in:planned,in_progress,done"},"progress":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,100"},"competency_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:competencies,id"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"}},"required":["title"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["plan-actions"],"operationId":"app_succession_actions_update_put","summary":"Fields not sent stay as they are.","description":"Fields not sent stay as they are.\n\nPermission: succession.manage.* or succession.successors.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.successors.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"required|string|max:255"},"kind":{"type":"string","enum":["training","mentoring","assignment","project","other"],"nullable":true,"description":"nullable|in:training,mentoring,assignment,project,other"},"owner_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:employees,id"},"due_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"status":{"type":"string","enum":["planned","in_progress","done"],"nullable":true,"description":"nullable|in:planned,in_progress,done"},"progress":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,100"},"competency_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:competencies,id"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"}},"required":["title"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["plan-actions"],"operationId":"app_succession_actions_destroy","summary":"DELETE /api/v1/app/companies/{company}/plan-actions/{action}","description":"Permission: succession.manage.* or succession.successors.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.successors.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/position-competencies":{"post":{"tags":["position-competencies"],"operationId":"app_performance_position_competencies_store","summary":"position_id, competency_id, required_level, weight.","description":"position_id, competency_id, required_level, weight.\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"position_id":{"type":"integer","description":"required|integer|exists:positions,id"},"competency_id":{"type":"integer","description":"required|integer|exists:competencies,id"},"required_level":{"type":"integer","description":"required|integer|'between:1,' . \\App\\Models\\CompetencyLevel::scale()"},"weight":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:100"}},"required":["position_id","competency_id","required_level"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/position-competencies/{link}":{"delete":{"tags":["position-competencies"],"operationId":"app_performance_position_competencies_destroy","summary":"DELETE /api/v1/app/companies/{company}/position-competencies/{link}","description":"Permission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"link","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/positions":{"get":{"tags":["positions"],"operationId":"app_positions_index","summary":"GET /api/v1/app/companies/{company}/positions","description":"Permission: positions.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["positions.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["positions"],"operationId":"app_positions_store","summary":"POST /api/v1/app/companies/{company}/positions","description":"Permission: positions.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["positions.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"$position ? 'sometimes' : 'required'|array","properties":{"en":{"type":"string","description":"$position ? 'required_with:name' : 'required'|string|'max:' . \\App\\Support\\Limits::chars(120)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(120)"}}},"code":{"type":"string","nullable":true,"description":"nullable|alpha_dash|max:30"},"is_active":{"type":"boolean","description":"sometimes|boolean"},"job_description":{"type":"string","nullable":true,"description":"nullable|string|max:20000"},"job_role_type":{"type":"string","enum":["regular","hazardous"],"description":"sometimes|in:regular,hazardous"},"company_level":{"type":"boolean","description":"sometimes|boolean"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/positions/{position}":{"patch":{"tags":["positions"],"operationId":"app_positions_update","summary":"PATCH /api/v1/app/companies/{company}/positions/{position}","description":"Permission: positions.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"position","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["positions.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"$position ? 'sometimes' : 'required'|array","properties":{"en":{"type":"string","description":"$position ? 'required_with:name' : 'required'|string|'max:' . \\App\\Support\\Limits::chars(120)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(120)"}}},"code":{"type":"string","nullable":true,"description":"nullable|alpha_dash|max:30"},"is_active":{"type":"boolean","description":"sometimes|boolean"},"job_description":{"type":"string","nullable":true,"description":"nullable|string|max:20000"},"job_role_type":{"type":"string","enum":["regular","hazardous"],"description":"sometimes|in:regular,hazardous"},"company_level":{"type":"boolean","description":"sometimes|boolean"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/potential-assessments":{"post":{"tags":["potential-assessments"],"operationId":"app_nine_box_assess","summary":"employee_id, rating (low|medium|high), criteria {learning_agility, leadership, drive, adaptability, aspiration","description":"employee_id, rating (low|medium|high), criteria {learning_agility, leadership, drive, adaptability, aspiration: 1\u20135}, notes, evaluation_cycle_id, assessed_on.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer|exists:employees,id"},"rating":{"type":"string","enum":["low","medium","high"],"description":"required|in:low,medium,high"},"criteria":{"type":"array","items":{"type":"integer","nullable":true},"nullable":true,"description":"nullable|array"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"evaluation_cycle_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:evaluation_cycles,id"},"assessed_on":{"type":"string","format":"date","nullable":true,"description":"nullable|date|before_or_equal:today"}},"required":["employee_id","rating"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/potential-assessments/{assessment}":{"delete":{"tags":["potential-assessments"],"operationId":"app_nine_box_assessments_destroy","summary":"DELETE /api/v1/app/companies/{company}/potential-assessments/{assessment}","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"assessment","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/professional-data/{record}/cancel":{"post":{"tags":["professional-data"],"operationId":"app_professional_data_cancel","summary":"POST /api/v1/app/companies/{company}/professional-data/{record}/cancel","description":"Permission: employees.edit. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"record","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.edit"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/professional-data/{record}":{"patch":{"tags":["professional-data"],"operationId":"app_professional_data_update","summary":"PATCH /api/v1/app/companies/{company}/professional-data/{record}","description":"Permission: employees.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"record","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["professional-data"],"operationId":"app_professional_data_destroy","summary":"DELETE /api/v1/app/companies/{company}/professional-data/{record}","description":"Permission: employees.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"record","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/projects":{"get":{"tags":["projects"],"operationId":"app_projects_index","summary":"GET /api/v1/app/companies/{company}/projects","description":"Permission: projects.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["projects.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["projects"],"operationId":"app_projects_store","summary":"POST /api/v1/app/companies/{company}/projects","description":"Permission: projects.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["projects.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"required|string|max:30|unique:org_units,code"},"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"client":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"group_name":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"group_code":{"type":"string","nullable":true,"description":"nullable|string|max:30"},"entity_code":{"type":"string","nullable":true,"description":"nullable|string|max:30"},"manager_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:employees,id"},"start_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:start_date"},"budget_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"cost_center_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:cost_centers,id"},"status":{"type":"string","description":"required|Rule::in(self::STATUSES)"}},"required":["code","name","status"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/projects/{project}":{"get":{"tags":["projects"],"operationId":"app_projects_show","summary":"GET /api/v1/app/companies/{company}/projects/{project}","description":"Permission: projects.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"project","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["projects.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["projects"],"operationId":"app_projects_update","summary":"PATCH /api/v1/app/companies/{company}/projects/{project}","description":"Permission: projects.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"project","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["projects.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/projects/{project}/assignments":{"post":{"tags":["projects"],"operationId":"app_projects_assign","summary":"POST /api/v1/app/companies/{company}/projects/{project}/assignments","description":"Permission: projects.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"project","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["projects.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"position_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:positions,id"},"contribution_percent":{"type":"number","description":"required|numeric|min:0|max:100"},"staff_code":{"type":"string","nullable":true,"description":"nullable|string|max:30"},"start_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:start_date"}},"required":["employee_id","contribution_percent"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/projects/{project}/assignments/{assignment}":{"delete":{"tags":["projects"],"operationId":"app_projects_unassign","summary":"DELETE /api/v1/app/companies/{company}/projects/{project}/assignments/{assignment}","description":"Permission: projects.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"project","in":"path","required":true,"schema":{"type":"integer"}},{"name":"assignment","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["projects.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/proof/time-anchor":{"post":{"tags":["proof"],"operationId":"app_proof_time_anchor","summary":"body","description":"body: device_id, boot_id, elapsed_ms (the phone's since-boot clock as it asks).\n\nPermission: self.tasks.capture or self.field_capture. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.capture","self.field_capture"],"x-modules":[],"x-rate-limit-per-minute":30,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"device_id":{"type":"string","description":"required|string|max:100"},"boot_id":{"type":"string","nullable":true,"description":"nullable|string|max:100"},"elapsed_ms":{"type":"integer","nullable":true,"description":"nullable|integer|min:0"}},"required":["device_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/proof/device-keys/challenge":{"post":{"tags":["proof"],"operationId":"app_proof_device_keys_challenge","summary":"POST /api/v1/app/companies/{company}/proof/device-keys/challenge","description":"Permission: self.tasks.capture or self.field_capture. 10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.capture","self.field_capture"],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/proof/device-keys":{"post":{"tags":["proof"],"operationId":"app_proof_device_keys_store","summary":"device_id, public_key (base64 SPKI P-256), platform, challenge, attestation {android_key_chain | ios_app_attest {key_\u2026","description":"device_id, public_key (base64 SPKI P-256), platform, challenge, attestation {android_key_chain | ios_app_attest {key_id, attestation_object}}.\n\nPermission: self.tasks.capture or self.field_capture. 10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.capture","self.field_capture"],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/provisions":{"get":{"tags":["provisions"],"operationId":"app_provisions_index","summary":"Rows","description":"Rows: month (YYYY-MM, default this month) or from / to; stb_types[], contract_type, employee_status, kind, and the org filters (branch, department, \u2026) of the screens.\n\nPermission: payroll.provisions.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.provisions.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["provisions"],"operationId":"app_provisions_calculate","summary":"POST /api/v1/app/companies/{company}/provisions","description":"Permission: payroll.provisions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.provisions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/provisions/months":{"get":{"tags":["provisions"],"operationId":"app_provisions_months","summary":"The calculated months (last 24) with the people, the month's provisions and the running total, for the employees in s\u2026","description":"The calculated months (last 24) with the people, the month's provisions and the running total, for the employees in scope.\n\nPermission: payroll.provisions.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.provisions.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/provisions/bulk-delete":{"post":{"tags":["provisions"],"operationId":"app_provisions_bulk_destroy","summary":"ids[]","description":"ids[]: an earlier month a later one builds on stays (deleted < chosen).\n\nPermission: payroll.provisions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.provisions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer"},"description":"required|array"}},"required":["ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/provisions/{month}":{"delete":{"tags":["provisions"],"operationId":"app_provisions_destroy","summary":"DELETE /api/v1/app/companies/{company}/provisions/{month}","description":"Permission: payroll.provisions.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"month","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]{4}-[0-9]{2}$"}}],"x-permissions":["payroll.provisions.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/rating-types":{"post":{"tags":["rating-types"],"operationId":"app_performance_rating_types_store","summary":"name {en, ar}, units [{id?, name {en, ar}}].","description":"name {en, ar}, units [{id?, name {en, ar}}].\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/rating-types/{type}":{"patch":{"tags":["rating-types"],"operationId":"app_performance_rating_types_update_patch","summary":"name {en, ar}, units [{id?, name {en, ar}}].","description":"name {en, ar}, units [{id?, name {en, ar}}].\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["rating-types"],"operationId":"app_performance_rating_types_update_put","summary":"name {en, ar}, units [{id?, name {en, ar}}].","description":"name {en, ar}, units [{id?, name {en, ar}}].\n\nPermission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["rating-types"],"operationId":"app_performance_rating_types_destroy","summary":"DELETE /api/v1/app/companies/{company}/rating-types/{type}","description":"Permission: performance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["performance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/interviews/{interview}/scorecard":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_scorecards_store","summary":"A panel member's own scorecard","description":"A panel member's own scorecard: ratings [{criterion, rating}], overall 1\u20135, recommendation, notes.\n\nPermission: self.interviews or recruitment.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"interview","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.interviews","recruitment.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ratings":{"type":"array","items":{"type":"object","properties":{"criterion":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(120)"},"rating":{"type":"integer","description":"required|integer|between:1,5"}}},"nullable":true,"description":"nullable|array|max:20"},"overall":{"type":"integer","description":"required|integer|between:1,5"},"recommendation":{"type":"string","enum":["strong_yes","yes","no","strong_no"],"description":"required|in:strong_yes,yes,no,strong_no"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(5000)"}},"required":["overall","recommendation"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/offers/{offer}/decide":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_offers_decide","summary":"decision","description":"decision: approve or reject, note (needed to reject). Needs recruitment.approve_offers.\n\nPermission: recruitment.approve_offers. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"offer","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.approve_offers"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/offers":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_offers_index","summary":"Filter","description":"Filter: status.\n\nPermission: recruitment.view or recruitment.manage.* or recruitment.approve_offers. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*","recruitment.approve_offers"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/offers/{offer}":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_offers_show","summary":"GET /api/v1/app/companies/{company}/recruitment/offers/{offer}","description":"Permission: recruitment.view or recruitment.manage.* or recruitment.approve_offers. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"offer","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*","recruitment.approve_offers"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["recruitment"],"operationId":"app_recruitment_offers_update_patch","summary":"PATCH /api/v1/app/companies/{company}/recruitment/offers/{offer}","description":"Permission: recruitment.manage.* or recruitment.offers.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"offer","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.offers.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["recruitment"],"operationId":"app_recruitment_offers_update_put","summary":"PUT /api/v1/app/companies/{company}/recruitment/offers/{offer}","description":"Permission: recruitment.manage.* or recruitment.offers.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"offer","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.offers.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/dashboard":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_dashboard","summary":"Filters","description":"Filters: from, to (dates, default the last 90 days), job.\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/pipeline":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_pipeline","summary":"The board","description":"The board: the stages and who is in each, for one job or all that are open, with what the person may see and whether they may move people. The app's pipeline screen and list_recruitment_ats kind pipeline.\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/pool":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_pool","summary":"Filters","description":"Filters: q (name, email, skills, tags), tag.\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["recruitment"],"operationId":"app_recruitment_pool_store","summary":"name, email, phone, linkedin_url, tags, source, cover_note, cv (file).","description":"name, email, phone, linkedin_url, tags, source, cover_note, cv (file).\n\nPermission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"required|string|max:150"},"email":{"type":"string","format":"email","description":"required|email|max:150|unique:candidates,email"},"phone":{"type":"string","nullable":true,"description":"nullable|string|max:30"},"linkedin_url":{"type":"string","nullable":true,"description":"nullable|url|max:255|regex:#^https://([a-z]+\\.)?linkedin\\.com/#i"},"source":{"type":"string","enum":["careers_page","referral","linkedin","job_board","other"],"nullable":true,"description":"nullable|in:careers_page,referral,linkedin,job_board,other"},"cover_note":{"type":"string","nullable":true,"description":"nullable|string|max:3000"},"tags":{"type":"string","nullable":true,"description":"nullable"},"cv":{"type":"string","format":"binary","nullable":true,"description":"nullable|file|max:10240|mimes:pdf,doc,docx"}},"required":["name","email"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/availability":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_availability","summary":"Filter","description":"Filter: employee.\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/interviews/{interview}/ics":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_interviews_ics","summary":"GET /api/v1/app/companies/{company}/recruitment/interviews/{interview}/ics","description":"Permission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"interview","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/templates":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_templates","summary":"GET /api/v1/app/companies/{company}/recruitment/templates","description":"Permission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/assessments":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_assessments","summary":"A candidate's tests","description":"A candidate's tests: status, best result, pass or fail, the gate and the link.\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_assessments_store","summary":"assessment_id, due_date (Y-m-d), pass_stage, fail_stage, locale","description":"assessment_id, due_date (Y-m-d), pass_stage, fail_stage, locale: sends the link by the \"Assessment\" email.\n\nPermission: recruitment.manage.* or recruitment.candidates.manage or assessments.invite. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage","assessments.invite"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"assessment_id":{"type":"integer","description":"required|integer"},"due_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:today"},"pass_stage":{"type":"string","nullable":true,"description":"nullable|Rule::in(self::gateStages())"},"fail_stage":{"type":"string","nullable":true,"description":"nullable|Rule::in(self::gateStages())"},"locale":{"type":"string","enum":["en","ar"],"nullable":true,"description":"nullable|in:en,ar"}},"required":["assessment_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/stage-assessments":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_stage_assessments","summary":"The test each pipeline stage sends, and its gate.","description":"The test each pipeline stage sends, and its gate.\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["recruitment"],"operationId":"app_recruitment_stage_assessments_update","summary":"{stage","description":"{stage: {assessment_test_id (null removes), auto_send, pass_stage, fail_stage, due_days}} (or under \"stages\").\n\nPermission: recruitment.manage.* or recruitment.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"stages":{"type":"array","items":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"properties":{"assessment_test_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:assessment_tests,id"},"auto_send":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"pass_stage":{"type":"string","nullable":true,"description":"nullable|Rule::in(self::gateStages())"},"fail_stage":{"type":"string","nullable":true,"description":"nullable|Rule::in(self::gateStages())"},"due_days":{"type":"integer","nullable":true,"description":"nullable|integer|between:1,90"}}},"description":"array"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/settings":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_settings","summary":"AI switches, the candidate email language, and which accounts are connected (secrets are never returned).","description":"AI switches, the candidate email language, and which accounts are connected (secrets are never returned).\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["recruitment"],"operationId":"app_recruitment_settings_update_patch","summary":"ai_enabled, ai_candidate_data, ai_auto_parse, recruitment_email_language (en, ar, both).","description":"ai_enabled, ai_candidate_data, ai_auto_parse, recruitment_email_language (en, ar, both).\n\nPermission: recruitment.manage.* or recruitment.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"ai_enabled":{"type":"boolean","description":"sometimes|boolean"},"ai_candidate_data":{"type":"boolean","description":"sometimes|boolean"},"ai_auto_parse":{"type":"boolean","description":"sometimes|boolean"},"recruitment_email_language":{"type":"string","enum":["en","ar","both"],"description":"sometimes|in:en,ar,both"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["recruitment"],"operationId":"app_recruitment_settings_update_put","summary":"ai_enabled, ai_candidate_data, ai_auto_parse, recruitment_email_language (en, ar, both).","description":"ai_enabled, ai_candidate_data, ai_auto_parse, recruitment_email_language (en, ar, both).\n\nPermission: recruitment.manage.* or recruitment.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"ai_enabled":{"type":"boolean","description":"sometimes|boolean"},"ai_candidate_data":{"type":"boolean","description":"sometimes|boolean"},"ai_auto_parse":{"type":"boolean","description":"sometimes|boolean"},"recruitment_email_language":{"type":"string","enum":["en","ar","both"],"description":"sometimes|in:en,ar,both"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/summary":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_summary","summary":"Counts, and whether the careers page is on, with its address.","description":"Counts, and whether the careers page is on, with its address.\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/jobs":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_jobs_index","summary":"Filters","description":"Filters: status, type, department, branch, q.\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["recruitment"],"operationId":"app_recruitment_jobs_store","summary":"title {en, ar}, department_id, branch_id, position_id, employment_type, description, requirements, positions, closing\u2026","description":"title {en, ar}, department_id, branch_id, position_id, employment_type, description, requirements, positions, closing_date, status.\n\nPermission: recruitment.manage.* or recruitment.jobs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.jobs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"department_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:org_units,id"},"branch_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:branches,id"},"position_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:positions,id"},"employment_type":{"type":"string","enum":["full_time","part_time","contract","internship"],"description":"required|in:full_time,part_time,contract,internship"},"description":{"type":"string","description":"required|string|max:5000"},"requirements":{"type":"string","nullable":true,"description":"nullable|string|max:5000"},"description_ar":{"type":"string","nullable":true,"description":"nullable|string|max:5000"},"requirements_ar":{"type":"string","nullable":true,"description":"nullable|string|max:5000"},"in_job_feed":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"positions":{"type":"integer","description":"required|integer|between:1,100"},"closing_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"status":{"type":"string","enum":["draft","open","closed"],"description":"required|in:draft,open,closed"}},"required":["title","employment_type","description","positions","status"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/jobs/{job}":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_jobs_show","summary":"A job opening and its candidates by stage.","description":"A job opening and its candidates by stage.\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["recruitment"],"operationId":"app_recruitment_jobs_update_patch","summary":"PATCH /api/v1/app/companies/{company}/recruitment/jobs/{job}","description":"Permission: recruitment.manage.* or recruitment.jobs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.jobs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["recruitment"],"operationId":"app_recruitment_jobs_update_put","summary":"PUT /api/v1/app/companies/{company}/recruitment/jobs/{job}","description":"Permission: recruitment.manage.* or recruitment.jobs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.jobs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["recruitment"],"operationId":"app_recruitment_jobs_destroy","summary":"DELETE /api/v1/app/companies/{company}/recruitment/jobs/{job}","description":"Permission: recruitment.manage.* or recruitment.jobs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.jobs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_index","summary":"Filters","description":"Filters: job, stage, source, q.\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_show","summary":"A candidate with notes and interviews.","description":"A candidate with notes and interviews.\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_update_patch","summary":"stage (not hired","description":"stage (not hired: use hire), rejection_reason, rating 1\u20135.\n\nPermission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stage":{"type":"string","description":"sometimes|required|Rule::in(array_diff(\\App\\Models\\Candidate::STAGES, ['hired']))"},"rating":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|between:1,5"},"rejection_reason":{"type":"string","nullable":true,"description":"sometimes|nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"expected_salary":{"type":"number","nullable":true,"description":"sometimes|nullable|numeric|min:0|max:999999999"},"expected_salary_currency":{"type":"string","nullable":true,"description":"sometimes|nullable|string|size:3"}},"required":["stage"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_update_put","summary":"stage (not hired","description":"stage (not hired: use hire), rejection_reason, rating 1\u20135.\n\nPermission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stage":{"type":"string","description":"sometimes|required|Rule::in(array_diff(\\App\\Models\\Candidate::STAGES, ['hired']))"},"rating":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|between:1,5"},"rejection_reason":{"type":"string","nullable":true,"description":"sometimes|nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"expected_salary":{"type":"number","nullable":true,"description":"sometimes|nullable|numeric|min:0|max:999999999"},"expected_salary_currency":{"type":"string","nullable":true,"description":"sometimes|nullable|string|size:3"}},"required":["stage"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_destroy","summary":"DELETE /api/v1/app/companies/{company}/recruitment/candidates/{candidate}","description":"Permission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/cv":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_cv","summary":"GET /api/v1/app/companies/{company}/recruitment/candidates/{candidate}/cv","description":"Permission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/interviews":{"get":{"tags":["recruitment"],"operationId":"app_recruitment_interviews_index","summary":"Filters","description":"Filters: status (scheduled, done, cancelled), from, to (dates), candidate.\n\nPermission: recruitment.view or recruitment.manage.*. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.view","recruitment.manage.*"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/careers":{"put":{"tags":["recruitment"],"operationId":"app_recruitment_careers","summary":"enabled","description":"enabled: true or false.\n\nPermission: recruitment.manage.* or recruitment.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/jobs/{job}/candidates":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_store","summary":"name, email, phone, source, cover_note, cv (file).","description":"name, email, phone, source, cover_note, cv (file).\n\nPermission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"required|string|max:150"},"email":{"type":"string","format":"email","description":"required|email|max:150|unique:candidates,email"},"phone":{"type":"string","nullable":true,"description":"nullable|string|max:30"},"source":{"type":"string","enum":["careers_page","referral","linkedin","job_board","other"],"description":"required|in:careers_page,referral,linkedin,job_board,other"},"cover_note":{"type":"string","nullable":true,"description":"nullable|string|max:3000"},"rating":{"type":"integer","nullable":true,"description":"nullable|integer|between:1,5"},"expected_salary":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:999999999"},"expected_salary_currency":{"type":"string","nullable":true,"description":"nullable|string|size:3"},"cv":{"type":"string","format":"binary","nullable":true,"description":"nullable|file|max:10240|mimes:pdf,doc,docx"}},"required":["name","email","source"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/notes":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_notes_store","summary":"body.","description":"body.\n\nPermission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"body":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(3000)"}},"required":["body"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/interviews":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_interviews_store","summary":"interviewer_id (employee), panel_ids, scheduled_at, kind (onsite, video, phone), duration_minutes, location, video_pr\u2026","description":"interviewer_id (employee), panel_ids, scheduled_at, kind (onsite, video, phone), duration_minutes, location, video_provider (zoom, google_meet, teams, manual), video_link.\n\nPermission: recruitment.manage.* or recruitment.interviews.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.interviews.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/interviews/{interview}":{"patch":{"tags":["recruitment"],"operationId":"app_recruitment_interviews_update_patch","summary":"status, rating, feedback, video_link, location.","description":"status, rating, feedback, video_link, location.\n\nPermission: recruitment.manage.* or recruitment.interviews.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"interview","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.interviews.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"sometimes|required|Rule::in(array_diff(\\App\\Models\\Interview::STATUSES, ['awaiting_booking']))"},"rating":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|between:1,5"},"feedback":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:3000"},"video_link":{"type":"string","nullable":true,"description":"sometimes|nullable|url|max:500"},"location":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:255"}},"required":["status"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["recruitment"],"operationId":"app_recruitment_interviews_update_put","summary":"status, rating, feedback, video_link, location.","description":"status, rating, feedback, video_link, location.\n\nPermission: recruitment.manage.* or recruitment.interviews.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"interview","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.interviews.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","description":"sometimes|required|Rule::in(array_diff(\\App\\Models\\Interview::STATUSES, ['awaiting_booking']))"},"rating":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|between:1,5"},"feedback":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:3000"},"video_link":{"type":"string","nullable":true,"description":"sometimes|nullable|url|max:500"},"location":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:255"}},"required":["status"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/hire":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_hire","summary":"Make the employee record","description":"Make the employee record: employee_number, hire_date, branch_id, department_id, position_id, manager_id, basic_salary, create_login.\n\nPermission: recruitment.manage.* or recruitment.candidates.hire. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.hire"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/stage":{"put":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_stage","summary":"stage, reason (for rejected).","description":"stage, reason (for rejected).\n\nPermission: recruitment.manage.* or recruitment.candidates.move. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.move"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/bulk":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_bulk","summary":"ids, action (move, reject, tag, untag, pool, unpool, email, delete), stage, reason, tags, template, send_email.","description":"ids, action (move, reject, tag, untag, pool, unpool, email, delete), stage, reason, tags, template, send_email.\n\nPermission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","description":"required|Rule::in(self::BULK_ACTIONS)"},"ids":{"type":"array","items":{"type":"integer"},"description":"required|array|max:500"},"stage":{"type":"string","nullable":true,"description":"required_if:action,move|nullable|Rule::in(array_diff(\\App\\Models\\Candidate::STAGES, ['hired']))"},"reason":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"tags":{"type":"string","nullable":true,"description":"required_if:action,tag|required_if:action,untag|nullable"},"template":{"type":"string","enum":["applied","screening","interview","offer","hired","rejected"],"nullable":true,"description":"required_if:action,email|nullable|in:applied,screening,interview,offer,hired,rejected"}},"required":["action","ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/profile":{"patch":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_profile_patch","summary":"tags, in_talent_pool, linkedin_url.","description":"tags, in_talent_pool, linkedin_url.\n\nPermission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"tags":{"type":"string","nullable":true,"description":"sometimes|nullable"},"in_talent_pool":{"type":"boolean","description":"sometimes|boolean"},"linkedin_url":{"type":"string","nullable":true,"description":"sometimes|nullable|url|max:255|regex:#^https://([a-z]+\\.)?linkedin\\.com/#i"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_profile_put","summary":"tags, in_talent_pool, linkedin_url.","description":"tags, in_talent_pool, linkedin_url.\n\nPermission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"tags":{"type":"string","nullable":true,"description":"sometimes|nullable"},"in_talent_pool":{"type":"boolean","description":"sometimes|boolean"},"linkedin_url":{"type":"string","nullable":true,"description":"sometimes|nullable|url|max:255|regex:#^https://([a-z]+\\.)?linkedin\\.com/#i"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/email":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_email","summary":"template","description":"template: the stage whose email to send.\n\nPermission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/add-to-job":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_candidates_add_to_job","summary":"job_opening_id","description":"job_opening_id: puts a pool or past candidate forward for a job (a new candidate on that job).\n\nPermission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/ai/parse":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_ai_parse","summary":"POST /api/v1/app/companies/{company}/recruitment/candidates/{candidate}/ai/parse","description":"Permission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/ai/match":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_ai_match","summary":"POST /api/v1/app/companies/{company}/recruitment/candidates/{candidate}/ai/match","description":"Permission: recruitment.manage.* or recruitment.candidates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/jobs/{job}/ai/rank":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_ai_rank","summary":"refresh","description":"refresh: score everyone again. Returns the job's active candidates, best match first.\n\nPermission: recruitment.manage.* or recruitment.jobs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.jobs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/jobs/{job}/ai/questions":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_ai_questions","summary":"count (3\u201315).","description":"count (3\u201315).\n\nPermission: recruitment.manage.* or recruitment.jobs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.jobs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/ai/job-draft":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_ai_draft","summary":"title, department, employment_type, notes \u2192 description {en, ar}, requirements {en, ar}.","description":"title, department, employment_type, notes \u2192 description {en, ar}, requirements {en, ar}.\n\nPermission: recruitment.manage.* or recruitment.jobs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.jobs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"required|string|max:150"},"department":{"type":"string","nullable":true,"description":"nullable|string|max:150"},"employment_type":{"type":"string","enum":["full_time","part_time","contract","internship"],"nullable":true,"description":"nullable|in:full_time,part_time,contract,internship"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"}},"required":["title"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/jobs/{job}/linkedin":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_jobs_linkedin","summary":"Posts the job to the company's LinkedIn page; without a connected page answers with the share link.","description":"Posts the job to the company's LinkedIn page; without a connected page answers with the share link.\n\nPermission: recruitment.manage.* or recruitment.jobs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"job","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.jobs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/booking":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_interviews_invite","summary":"interviewer_id, panel_ids, kind, duration_minutes, location, video_provider, video_link, booking_from, booking_to.","description":"interviewer_id, panel_ids, kind, duration_minutes, location, video_provider, video_link, booking_from, booking_to.\n\nPermission: recruitment.manage.* or recruitment.interviews.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.interviews.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/availability/{employee}":{"put":{"tags":["recruitment"],"operationId":"app_recruitment_availability_update","summary":"windows","description":"windows: [{weekday 0\u20136 (Sunday = 0), starts_at HH:MM, ends_at HH:MM}], replacing the employee's.\n\nPermission: recruitment.manage.* or recruitment.interviews.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employee","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.interviews.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/candidates/{candidate}/offers":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_offers_store","summary":"offer_template_id, salary_package_id, job_title {en, ar}, start_date, basic_salary, currency, items [{type, transacti\u2026","description":"offer_template_id, salary_package_id, job_title {en, ar}, start_date, basic_salary, currency, items [{type, transaction_type_id, name {en, ar}, amount}], expires_on, language, body_en, body_ar.\n\nPermission: recruitment.manage.* or recruitment.offers.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"candidate","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.offers.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/offers/{offer}/{action}":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_offers_action","summary":"action","description":"action: submit, send, withdraw.\n\nPermission: recruitment.manage.* or recruitment.offers.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"offer","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","pattern":"^submit|send|withdraw$"}}],"x-permissions":["recruitment.manage.*","recruitment.offers.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/offers/{offer}/convert":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_offers_convert","summary":"employee_number, branch_id, department_id, position_id, manager_id, create_login, boarding_template_id.","description":"employee_number, branch_id, department_id, position_id, manager_id, create_login, boarding_template_id.\n\nPermission: recruitment.manage.* or recruitment.candidates.hire. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"offer","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.candidates.hire"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"boarding_template_id":{"type":"integer","description":"integer|exists:boarding_templates,id"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/templates/emails/{stage}":{"put":{"tags":["recruitment"],"operationId":"app_recruitment_templates_email","summary":"subject {en, ar}, body {en, ar}, auto_send.","description":"subject {en, ar}, body {en, ar}, auto_send.\n\nPermission: recruitment.manage.* or recruitment.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"stage","in":"path","required":true,"schema":{"type":"string","pattern":"^applied|screening|interview|offer|hired|rejected|assessment$"}}],"x-permissions":["recruitment.manage.*","recruitment.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/templates/offers":{"post":{"tags":["recruitment"],"operationId":"app_recruitment_templates_offers_store","summary":"name {en, ar}, body {en, ar}, active.","description":"name {en, ar}, body {en, ar}, active.\n\nPermission: recruitment.manage.* or recruitment.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"body":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(20000)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(20000)"}}},"active":{"type":"boolean","nullable":true,"description":"nullable|boolean"}},"required":["name","body"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/recruitment/templates/offers/{template}":{"patch":{"tags":["recruitment"],"operationId":"app_recruitment_templates_offers_update_patch","summary":"name {en, ar}, body {en, ar}, active.","description":"name {en, ar}, body {en, ar}, active.\n\nPermission: recruitment.manage.* or recruitment.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"body":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(20000)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(20000)"}}},"active":{"type":"boolean","nullable":true,"description":"nullable|boolean"}},"required":["name","body"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["recruitment"],"operationId":"app_recruitment_templates_offers_update_put","summary":"name {en, ar}, body {en, ar}, active.","description":"name {en, ar}, body {en, ar}, active.\n\nPermission: recruitment.manage.* or recruitment.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"body":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(20000)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(20000)"}}},"active":{"type":"boolean","nullable":true,"description":"nullable|boolean"}},"required":["name","body"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["recruitment"],"operationId":"app_recruitment_templates_offers_destroy","summary":"DELETE /api/v1/app/companies/{company}/recruitment/templates/offers/{template}","description":"Permission: recruitment.manage.* or recruitment.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["recruitment.manage.*","recruitment.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/regional-settings":{"get":{"tags":["regional-settings"],"operationId":"app_regional_settings_index","summary":"GET /api/v1/app/companies/{company}/regional-settings","description":"Permission: settings.manage or branches.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage","branches.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["regional-settings"],"operationId":"app_regional_settings_update_put","summary":"PUT /api/v1/app/companies/{company}/regional-settings","description":"Permission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["regional-settings"],"operationId":"app_regional_settings_update_patch","summary":"PATCH /api/v1/app/companies/{company}/regional-settings","description":"Permission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/reports":{"get":{"tags":["reports"],"operationId":"app_reports_index","summary":"GET reports","description":"GET reports: the reports by group (the ones the person may run, and the ones coming with a module), their saved options.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/reports/{report}":{"get":{"tags":["reports"],"operationId":"app_reports_show","summary":"GET reports/{report}","description":"GET reports/{report}: its filters with their options, columns, switches and exports.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"report","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/reports/{report}/run":{"get":{"tags":["reports"],"operationId":"app_reports_run_get","summary":"GET|POST reports/{report}/run","description":"GET|POST reports/{report}/run: the filters as the screen's query keys (multi filters as arrays, date ranges as key_from / key_to), cols, show, show_zero, saved_id to start from saved options, limit (rows per table, 500 by default, 5000 at most), format=csv|xlsx for a file, or one of the report's own exports (xlsx_colored for the Salaries report).\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"report","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["reports"],"operationId":"app_reports_run_post","summary":"GET|POST reports/{report}/run","description":"GET|POST reports/{report}/run: the filters as the screen's query keys (multi filters as arrays, date ranges as key_from / key_to), cols, show, show_zero, saved_id to start from saved options, limit (rows per table, 500 by default, 5000 at most), format=csv|xlsx for a file, or one of the report's own exports (xlsx_colored for the Salaries report).\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"report","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/reports/{report}/queue":{"post":{"tags":["reports"],"operationId":"app_reports_queue","summary":"POST reports/{report}/queue","description":"POST reports/{report}/queue: format xlsx|csv and the run's options; the file is built in the background (202).\n\nModule: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"report","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"format":{"type":"string","enum":["xlsx","csv"],"description":"required|in:xlsx,csv"}},"required":["format"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/reports/{report}/saved":{"post":{"tags":["reports"],"operationId":"app_reports_saved_store","summary":"POST reports/{report}/saved","description":"POST reports/{report}/saved: {name, options: {\u2026the run input\u2026}}.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"report","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"required|string|max:100"},"options":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"}},"required":["name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/request-types":{"get":{"tags":["request-types"],"operationId":"app_requests_types","summary":"The request types this company offers, with the fields each asks for and their choices (for my own requests).","description":"The request types this company offers, with the fields each asks for and their choices (for my own requests).\n\nPermission: self.requests.file or requests.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.requests.file","requests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/requests/{type}":{"post":{"tags":["requests"],"operationId":"app_requests_store","summary":"File a request of a type","description":"File a request of a type: its fields, an attachment (multipart), and employee_id to file for someone else.\n\nPermission: self.requests.file or requests.manage. Module: hrm. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z_]+$"}}],"x-permissions":["self.requests.file","requests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":20,"requestBody":{"required":false,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"attachment":{"type":"string","format":"binary","nullable":true,"description":"nullable|file|max:10240|mimes:pdf,jpg,jpeg,png,doc,docx"},"employee_id":{"type":"integer","nullable":true,"description":"nullable|integer"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/requests/{employeeRequest}":{"get":{"tags":["requests"],"operationId":"app_requests_show","summary":"GET /api/v1/app/companies/{company}/requests/{employeeRequest}","description":"Permission: self.requests.view or self.approvals.decide or requests.view or requests.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employeeRequest","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.requests.view","self.approvals.decide","requests.view","requests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/requests/{employeeRequest}/attachment":{"get":{"tags":["requests"],"operationId":"app_requests_attachment","summary":"GET /api/v1/app/companies/{company}/requests/{employeeRequest}/attachment","description":"Permission: self.requests.view or self.approvals.decide or requests.view or requests.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employeeRequest","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.requests.view","self.approvals.decide","requests.view","requests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/requests/{employeeRequest}/approval-cycle":{"get":{"tags":["requests"],"operationId":"app_requests_cycle","summary":"GET requests/{id}/approval-cycle","description":"GET requests/{id}/approval-cycle: ZenHR's \"Approval Cycle\" \u2014 every step, its approver, status, times and note (ApprovalCycle).\n\nPermission: self.requests.view or self.approvals.decide or requests.view or requests.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employeeRequest","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.requests.view","self.approvals.decide","requests.view","requests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/requests/{employeeRequest}/decide":{"post":{"tags":["requests"],"operationId":"app_requests_decide","summary":"Decide the step a request waits on","description":"Decide the step a request waits on: decision approved|rejected, decision_note.\n\nPermission: self.approvals.decide or requests.manage or leaves.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employeeRequest","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.approvals.decide","requests.manage","leaves.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/requests/{employeeRequest}/withdraw":{"post":{"tags":["requests"],"operationId":"app_requests_withdraw","summary":"Withdraw my pending request.","description":"Withdraw my pending request.\n\nPermission: self.requests.cancel or requests.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"employeeRequest","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.requests.cancel","requests.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/role-assignments":{"get":{"tags":["role-assignments"],"operationId":"app_role_assignments_index","summary":"GET /api/v1/app/companies/{company}/role-assignments","description":"Permission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["role-assignments"],"operationId":"app_role_assignments_store","summary":"Give a role to an employee's sign-in account","description":"Give a role to an employee's sign-in account: employee_id, role_id, scope, scope_id.\n\nPermission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"role_id":{"type":"integer","description":"required|integer|exists:roles,id"},"scope":{"type":"string","enum":["company","branch","department","work_location","section","project","hierarchy_group","business_unit","division","segment","reports","team","reports_of"],"description":"required|in:company,branch,department,work_location,section,project,hierarchy_group,business_unit,division,segment,reports,team,reports_of"},"scope_id":{"type":"integer","nullable":true,"description":"Rule::requiredIf(in_array($input['scope'] ?? null, self::TARGETED, true))|nullable|integer|match ($input['scope'] ?? null) {\n    'branch' => Rule::exists('branches', 'id')..."}},"required":["role_id","scope"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/role-assignments/{assignment}":{"delete":{"tags":["role-assignments"],"operationId":"app_role_assignments_destroy","summary":"DELETE /api/v1/app/companies/{company}/role-assignments/{assignment}","description":"Permission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"assignment","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/roles/{role}/matrix":{"get":{"tags":["roles"],"operationId":"app_roles_matrix","summary":"A role's whole table of web and app switches and field levels (docs/mobile-setup.md).","description":"A role's whole table of web and app switches and field levels (docs/mobile-setup.md).\n\nPermission: setup.roles.permissions. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"role","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["setup.roles.permissions"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["roles"],"operationId":"app_roles_matrix_update","summary":"Changes the rows sent, the rest stays; the same rules as saving a role (nobody gives what they don't have).","description":"Changes the rows sent, the rest stays; the same rules as saving a role (nobody gives what they don't have).\n\nPermission: setup.roles.permissions. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"role","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["setup.roles.permissions"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"actions":{"type":"array","items":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"}},"description":"sometimes|array"},"fields":{"type":"array","items":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"}},"description":"sometimes|array"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/roles":{"get":{"tags":["roles"],"operationId":"app_roles_index","summary":"GET /api/v1/app/companies/{company}/roles","description":"Permission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["roles"],"operationId":"app_roles_store","summary":"POST /api/v1/app/companies/{company}/roles","description":"Permission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"$role ? 'sometimes' : 'required'|array","properties":{"en":{"type":"string","description":"$role ? 'required_with:name' : 'required'|string|'max:' . \\App\\Support\\Limits::chars(80)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(80)"}}},"description":{"type":"array","items":{"type":"string","nullable":true},"nullable":true,"description":"nullable|array"},"permissions":{"type":"array","items":{"type":"string"},"description":"$role ? 'sometimes' : 'required'|array|$role?->isEveryone() ? 'min:0' : 'min:1'"},"channels":{"type":"array","items":{"type":"string","enum":["both","web","app","none"]},"nullable":true,"description":"sometimes|nullable|array"},"fields":{"type":"array","items":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"properties":{"web":{"type":"string","enum":["hidden","view","edit"],"description":"required|in:hidden,view,edit"},"app":{"type":"string","enum":["hidden","view","edit"],"description":"required|in:hidden,view,edit"}}},"nullable":true,"description":"sometimes|nullable|array"},"is_active":{"type":"boolean","description":"sometimes|boolean"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/roles/{role}":{"patch":{"tags":["roles"],"operationId":"app_roles_update","summary":"PATCH /api/v1/app/companies/{company}/roles/{role}","description":"Permission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"role","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"$role ? 'sometimes' : 'required'|array","properties":{"en":{"type":"string","description":"$role ? 'required_with:name' : 'required'|string|'max:' . \\App\\Support\\Limits::chars(80)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(80)"}}},"description":{"type":"array","items":{"type":"string","nullable":true},"nullable":true,"description":"nullable|array"},"permissions":{"type":"array","items":{"type":"string"},"description":"$role ? 'sometimes' : 'required'|array|$role?->isEveryone() ? 'min:0' : 'min:1'"},"channels":{"type":"array","items":{"type":"string","enum":["both","web","app","none"]},"nullable":true,"description":"sometimes|nullable|array"},"fields":{"type":"array","items":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"properties":{"web":{"type":"string","enum":["hidden","view","edit"],"description":"required|in:hidden,view,edit"},"app":{"type":"string","enum":["hidden","view","edit"],"description":"required|in:hidden,view,edit"}}},"nullable":true,"description":"sometimes|nullable|array"},"is_active":{"type":"boolean","description":"sometimes|boolean"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["roles"],"operationId":"app_roles_destroy","summary":"DELETE /api/v1/app/companies/{company}/roles/{role}","description":"Permission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"role","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/roles/{role}/where":{"get":{"tags":["roles"],"operationId":"app_roles_where","summary":"What a role shows on the web and in the app.","description":"What a role shows on the web and in the app.\n\nPermission: roles.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"role","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["roles.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salaries":{"get":{"tags":["salaries"],"operationId":"app_salaries_index","summary":"Filters as the screen","description":"Filters as the screen: year, month (1-12), salary_type (regular | off_cycle), run_status (draft | pending | rejected | approved | sent), date_from / date_to (YYYY-MM), in_advance and in_advance_paid (yes | no), q, and the org filters.\n\nPermission: payroll.runs.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salaries/calculate":{"get":{"tags":["salaries"],"operationId":"app_salaries_calculate_options","summary":"What Calculate offers for a month (?month=YYYY-MM, else the open one)","description":"What Calculate offers for a month (?month=YYYY-MM, else the open one): the picker groups, the cut-off date range and the draft batches to add to.\n\nPermission: payroll.runs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["salaries"],"operationId":"app_salaries_calculate","summary":"Calculate (payroll.manage)","description":"Calculate (payroll.manage): salary_type monthly | extra; month; picks[] (branch:<id>, employee:<id>, org:<id>); monthly: period_from / period_to, batch_id (an existing draft batch, else a new one), move_pending; extra: title, percent_of_basic.\n\nPermission: payroll.runs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"salary_type":{"type":"string","enum":["monthly","extra"],"nullable":true,"description":"nullable|in:monthly,extra"},"title":{"type":"string","description":"required|string|max:100"},"month":{"type":"string","format":"date","description":"required|date_format:Y-m"},"percent_of_basic":{"type":"number","description":"required|numeric|min:1|max:1000"},"picks":{"type":"array","items":{"type":"string"},"nullable":true,"description":"nullable|array"},"departments":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"branches":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"employees":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array"},"period_from":{"type":"string","format":"date","nullable":true,"description":"nullable|required_with:period_to|date_format:Y-m-d"},"period_to":{"type":"string","format":"date","nullable":true,"description":"nullable|required_with:period_from|date_format:Y-m-d|after_or_equal:period_from"},"batch_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"move_pending":{"type":"boolean","nullable":true,"description":"nullable|boolean"}},"required":["title","month","percent_of_basic"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salaries/off-cycle-settlement":{"get":{"tags":["salaries"],"operationId":"app_salaries_settlement_options","summary":"GET salaries/off-cycle-settlement","description":"GET salaries/off-cycle-settlement: who can get an off-cycle settlement (docs/payroll-settlement-slips.md).\n\nPermission: payroll.runs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["salaries"],"operationId":"app_salaries_settlement","summary":"POST salaries/off-cycle-settlement {employee_id}","description":"POST salaries/off-cycle-settlement {employee_id}: the leaver's final settlement as its own draft batch.\n\nPermission: payroll.runs.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"}},"required":["employee_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salary-batches":{"get":{"tags":["salary-batches"],"operationId":"app_salaries_batches","summary":"Salary Batches","description":"Salary Batches: year, month (1-12), salary_type (regular | off_cycle), run_status (draft | pending | rejected | approved | sent).\n\nPermission: payroll.runs.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.runs.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salary-package-templates":{"get":{"tags":["salary-package-templates"],"operationId":"app_payroll_templates","summary":"Salary package templates with their items (active=1 or 0 to filter).","description":"Salary package templates with their items (active=1 or 0 to filter).\n\nPermission: payroll.salary_packages.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["salary-package-templates"],"operationId":"app_payroll_templates_store","summary":"A new template","description":"A new template: name_en, name_ar, basic_salary, active, external_ref.\n\nPermission: payroll.salary_packages.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salary-package-templates/{template}":{"put":{"tags":["salary-package-templates"],"operationId":"app_payroll_templates_update","summary":"Changes only the given fields of a template.","description":"Changes only the given fields of a template.\n\nPermission: payroll.salary_packages.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"basic_salary":{"type":"number","description":"required|numeric|min:0"},"external_ref":{"type":"string","nullable":true,"description":"nullable|string|max:64"}},"required":["name_en","name_ar","basic_salary"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["salary-package-templates"],"operationId":"app_payroll_templates_destroy","summary":"DELETE /api/v1/app/companies/{company}/salary-package-templates/{template}","description":"Permission: payroll.salary_packages.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salary-package-templates/{template}/items":{"post":{"tags":["salary-package-templates"],"operationId":"app_payroll_templates_items_store","summary":"An item","description":"An item: type allowance | deduction, transaction_type_id or name_en / name_ar, amount.\n\nPermission: payroll.salary_packages.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["allowance","deduction"],"description":"required|in:allowance,deduction"},"transaction_type_id":{"type":"string","nullable":true,"description":"nullable|exists:transaction_types,id"},"name_en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},"name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},"amount":{"type":"number","description":"required|numeric|min:0"}},"required":["type","amount"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salary-package-templates/{template}/items/{item}":{"delete":{"tags":["salary-package-templates"],"operationId":"app_payroll_templates_items_destroy","summary":"DELETE /api/v1/app/companies/{company}/salary-package-templates/{template}/items/{item}","description":"Permission: payroll.salary_packages.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}},{"name":"item","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.salary_packages.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salary-packages-screening":{"get":{"tags":["salary-packages-screening"],"operationId":"app_payroll_packages_screening","summary":"Salary packages screening","description":"Salary packages screening: active_employees, effective_from, effective_to, approval_status, package_status and the org filters; paged.\n\nPermission: payroll.salary_packages.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"effective_from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"},{"name":"effective_to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"}],"x-permissions":["payroll.salary_packages.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salary-scales":{"get":{"tags":["salary-scales"],"operationId":"app_salary_scales_index","summary":"Scales, newest activation first; status filter.","description":"Scales, newest activation first; status filter.\n\nPermission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["salary-scales"],"operationId":"app_salary_scales_store","summary":"POST /api/v1/app/companies/{company}/salary-scales","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"},"salary_range_layer":{"type":"string","description":"$layer"},"benefits_layer":{"type":"string","description":"$layer"},"timeoffs_layer":{"type":"string","description":"$layer"},"exceed_range_percent":{"type":"number","nullable":true,"description":"nullable|numeric|between:0,1000"},"exceed_benefits_percent":{"type":"number","nullable":true,"description":"nullable|numeric|between:0,1000"},"compa_from":{"type":"number","nullable":true,"description":"nullable|numeric|between:0,1000|required_with:compa_to"},"compa_to":{"type":"number","nullable":true,"description":"nullable|numeric|between:0,1000|required_with:compa_from|gte:compa_from"},"activation_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"status":{"type":"string","enum":["active","inactive","draft"],"description":"required|in:active,inactive,draft"}},"required":["name_en","status"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salary-scales/{scale}":{"get":{"tags":["salary-scales"],"operationId":"app_salary_scales_show","summary":"GET /api/v1/app/companies/{company}/salary-scales/{scale}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"scale","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["salary-scales"],"operationId":"app_salary_scales_update","summary":"PUT /api/v1/app/companies/{company}/salary-scales/{scale}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"scale","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"},"salary_range_layer":{"type":"string","description":"$layer"},"benefits_layer":{"type":"string","description":"$layer"},"timeoffs_layer":{"type":"string","description":"$layer"},"exceed_range_percent":{"type":"number","nullable":true,"description":"nullable|numeric|between:0,1000"},"exceed_benefits_percent":{"type":"number","nullable":true,"description":"nullable|numeric|between:0,1000"},"compa_from":{"type":"number","nullable":true,"description":"nullable|numeric|between:0,1000|required_with:compa_to"},"compa_to":{"type":"number","nullable":true,"description":"nullable|numeric|between:0,1000|required_with:compa_from|gte:compa_from"},"activation_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"status":{"type":"string","enum":["active","inactive","draft"],"description":"required|in:active,inactive,draft"}},"required":["name_en","status"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["salary-scales"],"operationId":"app_salary_scales_destroy","summary":"DELETE /api/v1/app/companies/{company}/salary-scales/{scale}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"scale","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salary-scales/{scale}/{layer}":{"post":{"tags":["salary-scales"],"operationId":"app_salary_scales_layers_store","summary":"POST /api/v1/app/companies/{company}/salary-scales/{scale}/{layer}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"scale","in":"path","required":true,"schema":{"type":"integer"}},{"name":"layer","in":"path","required":true,"schema":{"type":"string","pattern":"^grade|band|level$"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"scale_grade_id":{"type":"string","description":"$layer === 'grade' ? ['prohibited'] : $parent('grade')"},"scale_band_id":{"type":"string","description":"$layer === 'level' ? $parent('band') : ['prohibited']"},"min_salary":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"max_salary":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|gte:min_salary"},"mid_salary":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"}},"required":["name_en","name_ar"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/salary-scales/{scale}/{layer}/{id}":{"put":{"tags":["salary-scales"],"operationId":"app_salary_scales_layers_update","summary":"PUT /api/v1/app/companies/{company}/salary-scales/{scale}/{layer}/{id}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"scale","in":"path","required":true,"schema":{"type":"integer"}},{"name":"layer","in":"path","required":true,"schema":{"type":"string","pattern":"^grade|band|level$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name_en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"name_ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"scale_grade_id":{"type":"string","description":"$layer === 'grade' ? ['prohibited'] : $parent('grade')"},"scale_band_id":{"type":"string","description":"$layer === 'level' ? $parent('band') : ['prohibited']"},"min_salary":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"max_salary":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|gte:min_salary"},"mid_salary":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"}},"required":["name_en","name_ar"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["salary-scales"],"operationId":"app_salary_scales_layers_destroy","summary":"DELETE /api/v1/app/companies/{company}/salary-scales/{scale}/{layer}/{id}","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"scale","in":"path","required":true,"schema":{"type":"integer"}},{"name":"layer","in":"path","required":true,"schema":{"type":"string","pattern":"^grade|band|level$"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/saved-reports/{saved}":{"delete":{"tags":["saved-reports"],"operationId":"app_reports_saved_destroy","summary":"DELETE /api/v1/app/companies/{company}/saved-reports/{saved}","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"saved","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/search":{"get":{"tags":["search"],"operationId":"app_search","summary":"GET /api/v1/app/companies/{company}/search","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/limits":{"get":{"tags":["settings"],"operationId":"app_settings_limits","summary":"GET /api/v1/app/companies/{company}/settings/limits","description":"Permission: limits.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch_id","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"sometimes|nullable|integer"}],"x-permissions":["limits.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_settings_limits_update","summary":"values","description":"values: {key: number, or null to go back to the level above}; sizes in KB. Only the keys sent change.\n\nPermission: limits.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["limits.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"branch_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/app-colors":{"get":{"tags":["settings"],"operationId":"app_settings_app_colors","summary":"?branch_id= one branch's own colors; none","description":"?branch_id= one branch's own colors; none: the company's.\n\nPermission: app_colors.view. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch_id","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"sometimes|nullable|integer"}],"x-permissions":["app_colors.view"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_settings_app_colors_update","summary":"primary, secondary (#RRGGBB; empty follows the level above), branch_id.","description":"primary, secondary (#RRGGBB; empty follows the level above), branch_id. Only what's sent changes.\n\nPermission: app_colors.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["app_colors.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"primary":{"type":"string","nullable":true,"description":"sometimes|nullable|regex:/^#[0-9A-Fa-f]{6}$/"},"secondary":{"type":"string","nullable":true,"description":"sometimes|nullable|regex:/^#[0-9A-Fa-f]{6}$/"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["settings"],"operationId":"app_settings_app_colors_reset","summary":"DELETE /api/v1/app/companies/{company}/settings/app-colors","description":"Permission: app_colors.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["app_colors.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/account":{"get":{"tags":["settings"],"operationId":"app_settings_account","summary":"GET /api/v1/app/companies/{company}/settings/account","description":"Permission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_settings_account_update_patch","summary":"PATCH","description":"PATCH: send only what changes. POST works too, for a logo as multipart/form-data.\n\nPermission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["settings"],"operationId":"app_settings_account_update_post","summary":"PATCH","description":"PATCH: send only what changes. POST works too, for a logo as multipart/form-data.\n\nPermission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/mail":{"get":{"tags":["settings"],"operationId":"app_settings_mail","summary":"GET /api/v1/app/companies/{company}/settings/mail","description":"Permission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["settings"],"operationId":"app_settings_mail_update_put","summary":"PUT /api/v1/app/companies/{company}/settings/mail","description":"Permission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"host":{"type":"string","nullable":true,"description":"nullable|string|max:190|regex:/^[A-Za-z0-9.\\-]+$/"},"port":{"type":"integer","description":"$on ? 'required' : 'nullable'|integer|between:1,65535"},"username":{"type":"string","nullable":true,"description":"nullable|string|max:190"},"password":{"type":"string","nullable":true,"description":"nullable|string|max:190"},"encryption":{"type":"string","enum":["tls","ssl","none"],"description":"$on ? 'required' : 'nullable'|in:tls,ssl,none"},"from":{"type":"string","format":"email","description":"$on ? 'required' : 'nullable'|email:filter|max:190"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_settings_mail_update_patch","summary":"PATCH /api/v1/app/companies/{company}/settings/mail","description":"Permission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"host":{"type":"string","nullable":true,"description":"nullable|string|max:190|regex:/^[A-Za-z0-9.\\-]+$/"},"port":{"type":"integer","description":"$on ? 'required' : 'nullable'|integer|between:1,65535"},"username":{"type":"string","nullable":true,"description":"nullable|string|max:190"},"password":{"type":"string","nullable":true,"description":"nullable|string|max:190"},"encryption":{"type":"string","enum":["tls","ssl","none"],"description":"$on ? 'required' : 'nullable'|in:tls,ssl,none"},"from":{"type":"string","format":"email","description":"$on ? 'required' : 'nullable'|email:filter|max:190"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/mail/test":{"post":{"tags":["settings"],"operationId":"app_settings_mail_test","summary":"POST /api/v1/app/companies/{company}/settings/mail/test","description":"Permission: settings.manage. 10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/mail/employees":{"put":{"tags":["settings"],"operationId":"app_settings_mail_employees_put","summary":"\"Email employees\" on or off (docs/mail.md)","description":"\"Email employees\" on or off (docs/mail.md): for branch_id when given, else the branch being worked in.\n\nPermission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_settings_mail_employees_patch","summary":"\"Email employees\" on or off (docs/mail.md)","description":"\"Email employees\" on or off (docs/mail.md): for branch_id when given, else the branch being worked in.\n\nPermission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/appearance":{"get":{"tags":["settings"],"operationId":"app_settings_appearance","summary":"GET /api/v1/app/companies/{company}/settings/appearance","description":"Permission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_settings_appearance_update","summary":"PATCH /api/v1/app/companies/{company}/settings/appearance","description":"Permission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"allow_user_override":{"type":"boolean","description":"boolean"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["settings"],"operationId":"app_settings_appearance_reset","summary":"DELETE /api/v1/app/companies/{company}/settings/appearance","description":"Permission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/sign-in":{"get":{"tags":["settings"],"operationId":"app_settings_sign_in","summary":"GET /api/v1/app/companies/{company}/settings/sign-in","description":"Permission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_settings_sign_in_update","summary":"Send only what changes; the client secret is write-only (blank keeps it).","description":"Send only what changes; the client secret is write-only (blank keeps it).\n\nPermission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"two_factor_required":{"type":"boolean","description":"sometimes|boolean"},"sso_enabled":{"type":"boolean","description":"sometimes|boolean"},"sso_protocol":{"type":"string","enum":["oidc","saml"],"description":"sometimes|in:oidc,saml"},"sso_name":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:40"},"sso_issuer":{"type":"string","nullable":true,"description":"sometimes|nullable|url:https|max:255"},"sso_client_id":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:255"},"sso_client_secret":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:500"},"sso_only":{"type":"boolean","description":"sometimes|boolean"},"sso_exempt_user_ids":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"sometimes|nullable|array|max:200"},"saml_idp_entity_id":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:255"},"saml_idp_sso_url":{"type":"string","nullable":true,"description":"sometimes|nullable|url:https|max:500"},"saml_idp_cert":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:20000"},"saml_metadata_url":{"type":"string","nullable":true,"description":"sometimes|nullable|url:https|max:500"},"saml_metadata_xml":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:500000"},"saml_email_attribute":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:190"},"pw_min_length":{"type":"integer","description":"sometimes|integer|min:6|max:64"},"pw_upper":{"type":"boolean","description":"sometimes|boolean"},"pw_lower":{"type":"boolean","description":"sometimes|boolean"},"pw_numbers":{"type":"boolean","description":"sometimes|boolean"},"pw_special":{"type":"boolean","description":"sometimes|boolean"},"pw_max_age_days":{"type":"integer","description":"sometimes|integer|min:0|max:365"},"pw_reuse":{"type":"integer","description":"sometimes|integer|min:0|max:24"},"pw_max_attempts":{"type":"integer","description":"sometimes|integer|min:0|max:20|fn($a, $v, $fail) => (int) $v === 0 || (int) $v >= 3 || $fail(__('Allow at least..."},"pw_lock_minutes":{"type":"integer","description":"sometimes|integer|min:0|max:1440"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/sign-in/sso-log":{"get":{"tags":["settings"],"operationId":"app_settings_sign_in_sso_log","summary":"The single sign-on audit log","description":"The single sign-on audit log: sign-ins, refusals, blocked password sign-ins and settings changes, newest first.\n\nPermission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"sometimes|integer|min:1|'max:' . \\App\\Support\\Limits::cap(200)"},{"name":"event","in":"query","required":false,"schema":{"type":"string","enum":["sign_in","sign_in_failed","password_blocked","settings_changed"]},"description":"sometimes|in:sign_in,sign_in_failed,password_blocked,settings_changed"}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/log-retention":{"get":{"tags":["settings"],"operationId":"app_settings_log_retention","summary":"GET /api/v1/app/companies/{company}/settings/log-retention","description":"Permission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_settings_log_retention_update","summary":"PATCH /api/v1/app/companies/{company}/settings/log-retention","description":"Permission: settings.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["settings.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"retention":{"type":"string","description":"required|Rule::in(\\App\\Support\\LogRetention::options())"}},"required":["retention"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/earned-wage":{"get":{"tags":["settings"],"operationId":"app_earned_wage_settings","summary":"GET /api/v1/app/companies/{company}/settings/earned-wage","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_earned_wage_settings_update","summary":"PATCH /api/v1/app/companies/{company}/settings/earned-wage","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/salary-scale":{"put":{"tags":["settings"],"operationId":"app_settings_salary_scale","summary":"PUT /api/v1/app/companies/{company}/settings/salary-scale","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"salary_scale_enforce":{"type":"string","enum":["off","block"],"description":"required|in:off,block"}},"required":["salary_scale_enforce"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/live-location":{"get":{"tags":["settings"],"operationId":"app_settings_live_location","summary":"GET /api/v1/app/companies/{company}/settings/live-location","description":"Permission: live_location.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["live_location.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["settings"],"operationId":"app_settings_live_location_update","summary":"enabled, mode, interval_seconds, distance_meters, max_silence_minutes, retention_days, reason {en, ar}, rules [{targe\u2026","description":"enabled, mode, interval_seconds, distance_meters, max_silence_minutes, retention_days, reason {en, ar}, rules [{target_type, target_id, effect}].\n\nPermission: live_location.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["live_location.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean","description":"sometimes|boolean"},"mode":{"type":"string","enum":["while_clocked_in","during_shift","always_when_app_open"],"description":"sometimes|in:while_clocked_in,during_shift,always_when_app_open"},"interval_seconds":{"type":"integer","description":"sometimes|integer|between:10,3600"},"distance_meters":{"type":"integer","description":"sometimes|integer|between:0,5000"},"max_silence_minutes":{"type":"integer","description":"sometimes|integer|between:2,1440"},"retention_days":{"type":"integer","description":"sometimes|integer|between:7,730"},"reason":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"sometimes|nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}}},"rules":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"sometimes|array"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/app-policies/{policy}":{"get":{"tags":["settings"],"operationId":"app_settings_app_policies","summary":"The app lock, the confirmation before a punch or blocking screenshots (app_policy.manage)","description":"The app lock, the confirmation before a punch or blocking screenshots (app_policy.manage): enabled, its options and rules.\n\nPermission: app_policy.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"string","pattern":"^app_lock|punch_auth|screen_capture|phone_sharing|event_location|location_required|context_device|context_network|context_battery|context_permissions|context_security|context_time|context_locale|context_health$"}}],"x-permissions":["app_policy.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["settings"],"operationId":"app_settings_app_policies_update","summary":"enabled; app_lock","description":"enabled; app_lock: when (every_open|after_background), after_minutes, methods (biometric|biometric_or_passcode); punch_auth: methods; rules [{target_type, target_id, effect}]; screen_capture: enabled only.\n\nPermission: app_policy.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"policy","in":"path","required":true,"schema":{"type":"string","pattern":"^app_lock|punch_auth|screen_capture|phone_sharing|event_location|location_required|context_device|context_network|context_battery|context_permissions|context_security|context_time|context_locale|context_health$"}}],"x-permissions":["app_policy.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean","description":"required|boolean"},"methods":{"type":"string","enum":["biometric","biometric_or_passcode"],"description":"sometimes|in:biometric,biometric_or_passcode"},"when":{"type":"string","enum":["every_open","after_background"],"description":"sometimes|in:every_open,after_background"},"after_minutes":{"type":"integer","description":"sometimes|integer|between:1,240"},"rules":{"type":"array","items":{"type":"object","properties":{"target_type":{"type":"string","enum":["all","branch","department","section","work_location","group","employee"],"description":"required|in:all,branch,department,section,work_location,group,employee"},"target_id":{"type":"integer","nullable":true,"description":"nullable|integer"},"effect":{"type":"string","enum":["include","exclude"],"description":"sometimes|in:include,exclude"}}},"description":"sometimes|array"},"inherit":{"type":"boolean","description":"sometimes|boolean"},"mode":{"type":"string","enum":["allow","warn","block"],"description":"sometimes|in:allow,warn,block"},"max_accounts":{"type":"integer","description":"sometimes|integer|between:1,10"}},"required":["enabled"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/clocking-security":{"get":{"tags":["settings"],"operationId":"app_settings_clocking_security","summary":"The checks of the company, or of a branch (branch_id) where it has its own values.","description":"The checks of the company, or of a branch (branch_id) where it has its own values.\n\nPermission: attendance.security.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.security.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_settings_clocking_security_update","summary":"Send only what changes","description":"Send only what changes: checks {check: off|flag|hold|block|on}, the numbers and ranges; branch_id for a branch's own values.\n\nPermission: attendance.security.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.security.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/buddy-punching":{"get":{"tags":["settings"],"operationId":"app_settings_buddy","summary":"GET /api/v1/app/companies/{company}/settings/buddy-punching","description":"Permission: attendance.buddy.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance.buddy.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/buddy-punching/{layer}":{"patch":{"tags":["settings"],"operationId":"app_settings_buddy_update","summary":"PATCH settings/buddy-punching/{layer}","description":"PATCH settings/buddy-punching/{layer}: inherit, or mode off|flag|refuse; the layer's own settings; rules.\n\nPermission: attendance.buddy.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"layer","in":"path","required":true,"schema":{"type":"string","pattern":"^bp_face|bp_device_key|bp_presence|bp_pattern$"}}],"x-permissions":["attendance.buddy.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/attendance":{"get":{"tags":["settings"],"operationId":"app_settings_attendance","summary":"GET /api/v1/app/companies/{company}/settings/attendance","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_settings_attendance_update_patch","summary":"Attendance setup","description":"Attendance setup: send only what changes.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["settings"],"operationId":"app_settings_attendance_update_post","summary":"Attendance setup","description":"Attendance setup: send only what changes.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/attendance/clock-button":{"get":{"tags":["settings"],"operationId":"app_settings_attendance_clock_button","summary":"\"Hide the clock button outside the work location\" (docs/attendance-security.md \u00a717)","description":"\"Hide the clock button outside the work location\" (docs/attendance-security.md \u00a717): on or off, and who it reaches. branch_id reads a branch's own value; choices are what that level may name (strict branch isolation).\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch_id","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer|exists:branches,id"}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_settings_attendance_clock_button_update","summary":"Send only what changes","description":"Send only what changes: clock_hide_outside_location, scope (all|chosen), branch_ids, department_ids, employee_ids; branch_id for a branch's own value.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"branch_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:branches,id"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/timesheets":{"get":{"tags":["settings"],"operationId":"app_settings_timesheets","summary":"GET /api/v1/app/companies/{company}/settings/timesheets","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["settings"],"operationId":"app_settings_timesheets_update_patch","summary":"Timesheets setup","description":"Timesheets setup: send only what changes.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["settings"],"operationId":"app_settings_timesheets_update_post","summary":"Timesheets setup","description":"Timesheets setup: send only what changes.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/settings/overtime-limit":{"get":{"tags":["settings"],"operationId":"app_settings_overtime_limit","summary":"GET /api/v1/app/companies/{company}/settings/overtime-limit","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["settings"],"operationId":"app_settings_overtime_limit_update","summary":"ot_limit_scope per_type|total, ot_total_limit_hours, ot_total_limit_period day|week|month.","description":"ot_limit_scope per_type|total, ot_total_limit_hours, ot_total_limit_period day|week|month.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/setup-forms/{entity}":{"get":{"tags":["setup-forms"],"operationId":"app_setup_forms_index","summary":"GET /api/v1/app/companies/{company}/setup-forms/{entity}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"entity","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["setup-forms"],"operationId":"app_setup_forms_store","summary":"POST /api/v1/app/companies/{company}/setup-forms/{entity}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"entity","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/setup-forms/{entity}/{id}":{"patch":{"tags":["setup-forms"],"operationId":"app_setup_forms_update_patch","summary":"PATCH /api/v1/app/companies/{company}/setup-forms/{entity}/{id}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"entity","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["setup-forms"],"operationId":"app_setup_forms_update_post","summary":"POST /api/v1/app/companies/{company}/setup-forms/{entity}/{id}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"entity","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["setup-forms"],"operationId":"app_setup_forms_destroy","summary":"DELETE /api/v1/app/companies/{company}/setup-forms/{entity}/{id}","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"entity","in":"path","required":true,"schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/shifts/{shift}/shares":{"get":{"tags":["shifts"],"operationId":"app_shifts_shares","summary":"HR","description":"HR: who a shift is shared with.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"shift","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["shifts"],"operationId":"app_shifts_share","summary":"HR","description":"HR: replaces the shares. targets: [{target_type department|group|employee, target_id, can_edit}].\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"shift","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/shifts":{"get":{"tags":["shifts"],"operationId":"app_shifts_index","summary":"GET /api/v1/app/companies/{company}/shifts","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["shifts"],"operationId":"app_shifts_store","summary":"POST /api/v1/app/companies/{company}/shifts","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"type":{"type":"string","enum":["regular","flexible","split","roster","roster_flexible"],"description":"required|in:regular,flexible,split,roster,roster_flexible"},"split_kind":{"type":"string","enum":["regular","flexible","roster"],"nullable":true,"description":"nullable|in:regular,flexible,roster"},"start_time":{"type":"string","format":"date","description":"required|date_format:H:i"},"end_time":{"type":"string","format":"date","description":"required|date_format:H:i"},"start_time_2":{"type":"string","format":"date","nullable":true,"description":"nullable|required_if:type,split|date_format:H:i"},"end_time_2":{"type":"string","format":"date","nullable":true,"description":"nullable|required_if:type,split|date_format:H:i"},"required_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0.5|max:24"},"required_hours_2":{"type":"number","nullable":true,"description":"nullable|numeric|min:0.5|max:24"},"interval_margin_pct":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,100"},"days_off":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array|max:6"},"color":{"type":"string","nullable":true,"description":"nullable|regex:/^#[0-9a-fA-F]{6}$/"},"break_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,600"},"late_grace_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,600"},"early_grace_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,600"},"flex_grace_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,600"},"overtime_after_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,1440"},"punch_in_window_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,720"},"punch_out_grace_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,720"},"extra_intervals":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"to":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"required_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0.25|max:24"}}},"nullable":true,"description":"nullable|array|'max:' . (\\App\\Models\\Shift::MAX_INTERVALS - 2)"},"functions":{"type":"array","items":{"type":"object","properties":{"attendance_function_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:attendance_functions,id"},"from":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"to":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"}}},"nullable":true,"description":"nullable|array"},"work_exceptions":{"type":"array","items":{"type":"object","properties":{"day":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,6"},"from":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"to":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"}}},"nullable":true,"description":"nullable|array"},"overtime_exceptions":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["0","1","2","3","4","5","6","off"],"nullable":true,"description":"nullable|in:0,1,2,3,4,5,6,off"},"from":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"to":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"basic_rate":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:20"},"allowances_rate":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:20"},"method":{"type":"string","enum":["hourly","daily"],"nullable":true,"description":"nullable|in:hourly,daily"}}},"nullable":true,"description":"nullable|array"},"is_default":{"type":"boolean","description":"sometimes|boolean"},"archived":{"type":"boolean","description":"sometimes|boolean"},"deduct_grace":{"type":"boolean","description":"sometimes|boolean"},"exclude_break":{"type":"boolean","description":"sometimes|boolean"},"holiday_overtime":{"type":"boolean","description":"sometimes|boolean"}},"required":["name","type","start_time","end_time"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/shifts/{shift}":{"get":{"tags":["shifts"],"operationId":"app_shifts_show","summary":"GET /api/v1/app/companies/{company}/shifts/{shift}","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"shift","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["shifts"],"operationId":"app_shifts_update","summary":"PUT /api/v1/app/companies/{company}/shifts/{shift}","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"shift","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"type":{"type":"string","enum":["regular","flexible","split","roster","roster_flexible"],"description":"required|in:regular,flexible,split,roster,roster_flexible"},"split_kind":{"type":"string","enum":["regular","flexible","roster"],"nullable":true,"description":"nullable|in:regular,flexible,roster"},"start_time":{"type":"string","format":"date","description":"required|date_format:H:i"},"end_time":{"type":"string","format":"date","description":"required|date_format:H:i"},"start_time_2":{"type":"string","format":"date","nullable":true,"description":"nullable|required_if:type,split|date_format:H:i"},"end_time_2":{"type":"string","format":"date","nullable":true,"description":"nullable|required_if:type,split|date_format:H:i"},"required_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0.5|max:24"},"required_hours_2":{"type":"number","nullable":true,"description":"nullable|numeric|min:0.5|max:24"},"interval_margin_pct":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,100"},"days_off":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array|max:6"},"color":{"type":"string","nullable":true,"description":"nullable|regex:/^#[0-9a-fA-F]{6}$/"},"break_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,600"},"late_grace_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,600"},"early_grace_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,600"},"flex_grace_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,600"},"overtime_after_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,1440"},"punch_in_window_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,720"},"punch_out_grace_minutes":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,720"},"extra_intervals":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"to":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"required_hours":{"type":"number","nullable":true,"description":"nullable|numeric|min:0.25|max:24"}}},"nullable":true,"description":"nullable|array|'max:' . (\\App\\Models\\Shift::MAX_INTERVALS - 2)"},"functions":{"type":"array","items":{"type":"object","properties":{"attendance_function_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:attendance_functions,id"},"from":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"to":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"}}},"nullable":true,"description":"nullable|array"},"work_exceptions":{"type":"array","items":{"type":"object","properties":{"day":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,6"},"from":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"to":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"}}},"nullable":true,"description":"nullable|array"},"overtime_exceptions":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","enum":["0","1","2","3","4","5","6","off"],"nullable":true,"description":"nullable|in:0,1,2,3,4,5,6,off"},"from":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"to":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"basic_rate":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:20"},"allowances_rate":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:20"},"method":{"type":"string","enum":["hourly","daily"],"nullable":true,"description":"nullable|in:hourly,daily"}}},"nullable":true,"description":"nullable|array"},"is_default":{"type":"boolean","description":"sometimes|boolean"},"archived":{"type":"boolean","description":"sometimes|boolean"},"deduct_grace":{"type":"boolean","description":"sometimes|boolean"},"exclude_break":{"type":"boolean","description":"sometimes|boolean"},"holiday_overtime":{"type":"boolean","description":"sometimes|boolean"}},"required":["name","type","start_time","end_time"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["shifts"],"operationId":"app_shifts_destroy","summary":"DELETE /api/v1/app/companies/{company}/shifts/{shift}","description":"Permission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"shift","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/shifts/{shift}/copy-to-roster":{"post":{"tags":["shifts"],"operationId":"app_shifts_copy_to_roster","summary":"A roster copy of a regular shift, as the shift screen's \"Copy to roster\".","description":"A roster copy of a regular shift, as the shift screen's \"Copy to roster\".\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"shift","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/shifts/{shift}/sync":{"post":{"tags":["shifts"],"operationId":"app_shifts_sync","summary":"The shift to every active employee without one.","description":"The shift to every active employee without one.\n\nPermission: attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"shift","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/signatures":{"get":{"tags":["signatures"],"operationId":"app_signatures_index","summary":"Signature requests I may see","description":"Signature requests I may see: mine, and those in my letters scope.\n\nPermission: self.signatures or letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.signatures","letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["signatures"],"operationId":"app_signatures_store","summary":"Send a document to sign","description":"Send a document to sign: employee_ids, and title + body or letter_id (letters.manage).\n\nPermission: letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1"},"title":{"type":"string","nullable":true,"description":"nullable|string"},"body":{"type":"string","nullable":true,"description":"nullable|string"},"letter_id":{"type":"integer","nullable":true,"description":"nullable|integer"}},"required":["employee_ids"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/signatures/{signature}":{"get":{"tags":["signatures"],"operationId":"app_signatures_show","summary":"GET /api/v1/app/companies/{company}/signatures/{signature}","description":"Permission: self.signatures or letters.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"signature","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.signatures","letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/signatures/{signature}/pdf":{"get":{"tags":["signatures"],"operationId":"app_signatures_pdf","summary":"A signed document as a PDF file (409 until it is signed).","description":"A signed document as a PDF file (409 until it is signed).\n\nPermission: self.signatures or letters.view or letters.manage. Module: hrm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"signature","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.signatures","letters.view","letters.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":30,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/signatures/{signature}/sign":{"post":{"tags":["signatures"],"operationId":"app_signatures_sign","summary":"Sign my document","description":"Sign my document: password, signature (a PNG data URL), agree.\n\nPermission: self.signatures. Module: hrm. 10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"signature","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.signatures"],"x-modules":["hrm"],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"required|string|fn($attribute, $value, $fail) => \\Illuminate\\Support\\Facades\\Hash::check((string..."},"signature":{"type":"string","description":"required|string|max:300000|regex:/^data:image\\/png;base64,[A-Za-z0-9+\\/=]+$/"},"agree":{"type":"boolean","description":"accepted"}},"required":["password","signature"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/signatures/{signature}/decline":{"post":{"tags":["signatures"],"operationId":"app_signatures_decline","summary":"POST /api/v1/app/companies/{company}/signatures/{signature}/decline","description":"Permission: self.signatures. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"signature","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.signatures"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/slack":{"get":{"tags":["slack"],"operationId":"app_slack_show","summary":"GET /api/v1/app/companies/{company}/slack","description":"Permission: integrations.slack.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.slack.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["slack"],"operationId":"app_slack_update","summary":"PUT /api/v1/app/companies/{company}/slack","description":"Permission: integrations.slack.manage. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.slack.manage"],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/social-security-salaries":{"post":{"tags":["social-security-salaries"],"operationId":"app_payroll_rules_ss_salaries","summary":"Update social security salaries (base basic | gross) for the active employees in the person's payroll.manage scope.","description":"Update social security salaries (base basic | gross) for the active employees in the person's payroll.manage scope.\n\nPermission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"base":{"type":"string","enum":["basic","gross"],"description":"required|in:basic,gross"}},"required":["base"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/stb-encashments/settings":{"get":{"tags":["stb-encashments"],"operationId":"app_stb_encashments_settings","summary":"GET /api/v1/app/companies/{company}/stb-encashments/settings","description":"Permission: payroll.stb_encashments.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.stb_encashments.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["stb-encashments"],"operationId":"app_stb_encashments_settings_update","summary":"PUT /api/v1/app/companies/{company}/stb-encashments/settings","description":"Permission: payroll_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"stb_encash_max_percent":{"type":"number","description":"required|numeric|min:0|max:100"},"stb_encash_min_years":{"type":"number","description":"required|numeric|min:0|max:50"},"stb_encash_every_years":{"type":"number","description":"required|numeric|min:0|max:50"},"stb_encash_min_amount":{"type":"number","nullable":true,"description":"nullable|numeric|min:0"},"stb_encash_max_amount":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|gte:stb_encash_min_amount"},"stb_encash_after_months":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:600"},"stb_encash_times":{"type":"integer","nullable":true,"description":"nullable|integer|min:1|max:100"},"stb_encash_per_years":{"type":"number","nullable":true,"description":"nullable|numeric|min:0|max:50|required_with:stb_encash_times"},"stb_encash_eligible":{"type":"string","enum":["all","citizens","non_citizens"],"nullable":true,"description":"nullable|in:all,citizens,non_citizens"},"stb_encash_default_payment":{"type":"string","enum":["payroll","off_cycle"],"nullable":true,"description":"nullable|in:payroll,off_cycle"},"stb_encash_limited_policy_id":{"type":"string","description":"$policy"},"stb_encash_unlimited_policy_id":{"type":"string","description":"$policy"},"stb_encash_income_name_en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},"stb_encash_income_name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},"stb_encash_deduction_name_en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},"stb_encash_deduction_name_ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"}},"required":["stb_encash_max_percent","stb_encash_min_years","stb_encash_every_years"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/stb-encashments":{"get":{"tags":["stb-encashments"],"operationId":"app_stb_encashments_index","summary":"Encashments in my scope, newest first (employee_id filter), with the company's limits.","description":"Encashments in my scope, newest first (employee_id filter), with the company's limits.\n\nPermission: payroll.stb_encashments.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.stb_encashments.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["stb-encashments"],"operationId":"app_stb_encashments_store","summary":"POST /api/v1/app/companies/{company}/stb-encashments","description":"Permission: payroll.stb_encashments.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.stb_encashments.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"amount":{"type":"number","description":"required|numeric|gt:0"},"payment":{"type":"string","enum":["payroll","off_cycle"],"description":"required|in:payroll,off_cycle"},"notes":{"type":"string","description":"$limits['stb_encash_notes_required'] ? 'required' : 'nullable'|string|max:500"},"external_ref":{"type":"string","nullable":true,"description":"nullable|string|max:64"}},"required":["employee_id","amount","payment"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/stb-encashments/{encashment}":{"delete":{"tags":["stb-encashments"],"operationId":"app_stb_encashments_destroy","summary":"DELETE /api/v1/app/companies/{company}/stb-encashments/{encashment}","description":"Permission: payroll.stb_encashments.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"encashment","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["payroll.stb_encashments.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/succession/coverage":{"get":{"tags":["succession"],"operationId":"app_succession_coverage","summary":"exposure (critical|exposed|watch|covered), department_id.","description":"exposure (critical|exposed|watch|covered), department_id.\n\nPermission: succession.manage.* or succession.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/successors/{successor}":{"delete":{"tags":["successors"],"operationId":"app_succession_successors_destroy","summary":"DELETE /api/v1/app/companies/{company}/successors/{successor}","description":"Permission: succession.manage.* or succession.successors.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"successor","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.successors.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"get":{"tags":["successors"],"operationId":"app_succession_successors_show","summary":"GET /api/v1/app/companies/{company}/successors/{successor}","description":"Permission: succession.manage.* or succession.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"successor","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/successors/{successor}/draft-plan":{"post":{"tags":["successors"],"operationId":"app_succession_draft_plan","summary":"apply","description":"apply: true saves the drafted actions on the plan.\n\nPermission: succession.manage.* or succession.successors.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"successor","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.successors.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/successors/{successor}/plan-actions":{"post":{"tags":["successors"],"operationId":"app_succession_actions_store","summary":"title, kind, owner_id, due_date, status, progress, competency_id, notes.","description":"title, kind, owner_id, due_date, status, progress, competency_id, notes.\n\nPermission: succession.manage.* or succession.successors.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"successor","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["succession.manage.*","succession.successors.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"required|string|max:255"},"kind":{"type":"string","enum":["training","mentoring","assignment","project","other"],"nullable":true,"description":"nullable|in:training,mentoring,assignment,project,other"},"owner_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:employees,id"},"due_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"status":{"type":"string","enum":["planned","in_progress","done"],"nullable":true,"description":"nullable|in:planned,in_progress,done"},"progress":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,100"},"competency_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:competencies,id"},"notes":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"}},"required":["title"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/suspensions":{"get":{"tags":["suspensions"],"operationId":"app_suspensions_index","summary":"GET /api/v1/app/companies/{company}/suspensions","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["suspensions"],"operationId":"app_suspensions_store","summary":"POST /api/v1/app/companies/{company}/suspensions","description":"Module: hrm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":30,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/suspensions/{suspension}/{action}":{"post":{"tags":["suspensions"],"operationId":"app_suspensions_act","summary":"decide, withdraw, resume, decide-resumption, withdraw-resumption, cancel, decide-cancel, cancel-resumption, decide-ca\u2026","description":"decide, withdraw, resume, decide-resumption, withdraw-resumption, cancel, decide-cancel, cancel-resumption, decide-cancel-resumption\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"suspension","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","pattern":"^decide|withdraw|resume|decide-resumption|withdraw-resumption|cancel|decide-cancel|cancel-resumption|decide-cancel-resumption$"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/suspensions/{suspension}":{"delete":{"tags":["suspensions"],"operationId":"app_suspensions_destroy","summary":"DELETE /api/v1/app/companies/{company}/suspensions/{suspension}","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"suspension","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/system-announcements":{"get":{"tags":["system-announcements"],"operationId":"app_system_announcements_index","summary":"GET /api/v1/app/system-announcements","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/system-announcements/{announcement}/dismiss":{"post":{"tags":["system-announcements"],"operationId":"app_system_announcements_dismiss","summary":"POST /api/v1/app/system-announcements/{announcement}/dismiss","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"announcement","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/system-announcements/{announcement}/acknowledge":{"post":{"tags":["system-announcements"],"operationId":"app_system_announcements_acknowledge","summary":"POST /api/v1/app/system-announcements/{announcement}/acknowledge","description":"60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"announcement","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/task-templates":{"get":{"tags":["task-templates"],"operationId":"app_task_templates_index","summary":"GET /api/v1/app/companies/{company}/task-templates","description":"Permission: tasks.templates.manage or tasks.templates.use. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.templates.manage","tasks.templates.use"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["task-templates"],"operationId":"app_task_templates_store","summary":"title {en, ar}, description, priority, due_in_days, related_to (general, onboarding, offboarding).","description":"title {en, ar}, description, priority, due_in_days, related_to (general, onboarding, offboarding).\n\nPermission: tasks.templates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.templates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(200)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(200)"}}},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"priority":{"type":"string","enum":["low","normal","high"],"nullable":true,"description":"nullable|in:low,normal,high"},"due_in_days":{"type":"integer","nullable":true,"description":"nullable|integer|min:0|max:365"},"related_to":{"type":"string","enum":["general","onboarding","offboarding"],"nullable":true,"description":"nullable|in:general,onboarding,offboarding"},"steps":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"},"branch_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:branches,id"}},"required":["title"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/task-templates/{template}":{"patch":{"tags":["task-templates"],"operationId":"app_task_templates_update_patch","summary":"PATCH /api/v1/app/companies/{company}/task-templates/{template}","description":"Permission: tasks.templates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.templates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["task-templates"],"operationId":"app_task_templates_update_put","summary":"PUT /api/v1/app/companies/{company}/task-templates/{template}","description":"Permission: tasks.templates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.templates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["task-templates"],"operationId":"app_task_templates_destroy","summary":"DELETE /api/v1/app/companies/{company}/task-templates/{template}","description":"Permission: tasks.templates.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"template","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.templates.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks":{"get":{"tags":["tasks"],"operationId":"app_tasks_index","summary":"tab (mine, assigned, employees), show (pending, past_due, completed, all), status, kind, employee, template, q, per_p\u2026","description":"tab (mine, assigned, employees), show (pending, past_due, completed, all), status, kind, employee, template, q, per_page.\n\nPermission: self.tasks.view or tasks.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.view","tasks.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["tasks"],"operationId":"app_tasks_store","summary":"Assign Task","description":"Assign Task: kind, title, description, due_date, priority, task_template_id, employee_id or assign_mode group with group_dimension and group_value, and the kind's fields.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","nullable":true,"description":"nullable|Rule::in(array_diff(array_keys(\\App\\Models\\Task::KINDS), \\App\\Models\\Task::WORKF..."},"task_template_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:task_templates,id"},"title":{"type":"string","description":"$kind === 'custom' ? 'required' : 'nullable'|string|max:200"},"description":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"assign_mode":{"type":"string","enum":["individual","group"],"nullable":true,"description":"nullable|in:individual,group"},"employee_id":{"type":"integer","description":"$group ? 'nullable' : 'required'|integer|Rule::in($assignable)"},"group_dimension":{"type":"string","description":"$group ? 'required' : 'nullable'|Rule::in(array_keys(self::dimensions()))"},"group_value":{"type":"string","description":"$group ? 'required' : 'nullable'|string|max:50"},"due_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"priority":{"type":"string","enum":["low","normal","high"],"nullable":true,"description":"nullable|in:low,normal,high"},"notes_required":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"attachments_required":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"proof_required":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"steps":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"},"document_type_id":{"type":"integer","description":"$kind === 'document_upload' ? 'required' : 'nullable'|integer|exists:document_types,id"},"document_id":{"type":"integer","description":"$kind === 'document_download' ? 'required' : 'nullable'|integer|exists:employee_documents,id"},"asset_type_id":{"type":"integer","description":"$kind === 'give_asset' ? 'required' : 'nullable'|integer|exists:asset_types,id"},"target_employee_id":{"type":"integer","description":"in_array($kind, ['give_asset', 'take_asset'], true) ? 'required' : 'nullable'|integer"},"asset_id":{"type":"integer","description":"$kind === 'take_asset' ? 'required' : 'nullable'|integer|exists:assets,id"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/bulk-delete":{"post":{"tags":["tasks"],"operationId":"app_tasks_bulk_destroy","summary":"tasks","description":"tasks: ids of pending tasks to delete.\n\nModule: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/settings":{"get":{"tags":["tasks"],"operationId":"app_tasks_settings","summary":"All the task settings","description":"All the task settings: the photo switches and what a new task starts with (docs/communication.md \u00a75\u0647\u0640).\n\nPermission: tasks.proof.settings. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.settings"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["tasks"],"operationId":"app_tasks_settings_update","summary":"PATCH /api/v1/app/companies/{company}/tasks/settings","description":"Permission: tasks.proof.settings. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.settings"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/settings/branches/{branch}":{"get":{"tags":["tasks"],"operationId":"app_tasks_settings_branch","summary":"GET /api/v1/app/companies/{company}/tasks/settings/branches/{branch}","description":"Permission: tasks.proof.settings. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.settings"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["tasks"],"operationId":"app_tasks_settings_branch_update","summary":"PATCH /api/v1/app/companies/{company}/tasks/settings/branches/{branch}","description":"Permission: tasks.proof.settings. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.settings"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/proof":{"get":{"tags":["tasks"],"operationId":"app_tasks_proof_index","summary":"The tasks with photos of the people in scope, for a manager","description":"The tasks with photos of the people in scope, for a manager: show (open, flagged, done, all), employee, q, page, per_page.\n\nPermission: tasks.proof.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/{task}":{"get":{"tags":["tasks"],"operationId":"app_tasks_show","summary":"GET /api/v1/app/companies/{company}/tasks/{task}","description":"Permission: self.tasks.view or tasks.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.view","tasks.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["tasks"],"operationId":"app_tasks_destroy","summary":"DELETE /api/v1/app/companies/{company}/tasks/{task}","description":"Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/{task}/status":{"post":{"tags":["tasks"],"operationId":"app_tasks_status","summary":"status","description":"status: todo, in_progress or done (a task that needs its form is completed with /complete).\n\nPermission: self.tasks.update or tasks.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.update","tasks.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/{task}/complete":{"post":{"tags":["tasks"],"operationId":"app_tasks_complete","summary":"completion_notes, attachments[] (files), attachment (the document of a document upload), expires_at, asset_id (give a\u2026","description":"completion_notes, attachments[] (files), attachment (the document of a document upload), expires_at, asset_id (give asset).\n\nPermission: self.tasks.update or tasks.manage. Module: hrm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.update","tasks.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":30,"requestBody":{"required":false,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"completion_notes":{"type":"string","description":"$task->notes_required ? 'required' : 'nullable'|string|'max:' . \\App\\Support\\Limits::chars(2000)"},"attachment":{"type":"string","format":"binary","nullable":true,"description":"$task->kind === 'document_upload' ? 'required' : 'prohibited'|nullable|file|mimes:pdf,jpg,jpeg,png,webp,doc,docx,xls,xlsx|max:10240"},"expires_at":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"attachments":{"type":"array","items":{"type":"string","format":"binary"},"description":"$task->attachments_required && $task->kind !== 'document_upload' ? 'required' :...|array|'max:' . (int) \\App\\Support\\Field\\FieldSettings::value('task_attachment_max_file..."},"asset_id":{"type":"integer","description":"$task->kind === 'give_asset' ? 'required' : 'nullable'|integer|exists:assets,id"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/{task}/confirm-receipt":{"post":{"tags":["tasks"],"operationId":"app_tasks_confirm_receipt","summary":"The employee who got a handed-over asset confirms receiving it (give-asset tasks awaiting confirmation).","description":"The employee who got a handed-over asset confirms receiving it (give-asset tasks awaiting confirmation).\n\nPermission: self.tasks.update or tasks.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.update","tasks.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/proof/mine":{"get":{"tags":["tasks"],"operationId":"app_tasks_proof_mine","summary":"The open tasks that ask for proof, with photos and rules, for working offline.","description":"The open tasks that ask for proof, with photos and rules, for working offline.\n\nPermission: self.tasks.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/{task}/proof/mine":{"get":{"tags":["tasks"],"operationId":"app_tasks_proof_own","summary":"One of the employee's own tasks with every photo they took, open or finished, waived or voided included.","description":"One of the employee's own tasks with every photo they took, open or finished, waived or voided included. Anyone else's: 404.\n\nPermission: self.tasks.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/{task}/evidence/video":{"post":{"tags":["tasks"],"operationId":"app_tasks_video_start","summary":"meta, signature, bytes, chunk_bytes.","description":"meta, signature, bytes, chunk_bytes. Again for the same client_uuid: where it got to, or the record if it's all there.\n\nPermission: self.tasks.capture. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.capture"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"string","description":"required|string|max:20000"},"signature":{"type":"string","description":"required|string|max:500"},"bytes":{"type":"integer","description":"required|integer|min:1"},"chunk_bytes":{"type":"integer","description":"required|integer|min:1024|'max:' . \\Illuminate\\Http\\UploadedFile::getMaxFilesize()"}},"required":["meta","signature","bytes","chunk_bytes"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/{task}/evidence/video/{upload}/chunk":{"post":{"tags":["tasks"],"operationId":"app_tasks_video_chunk","summary":"offset, chunk (a file).","description":"offset, chunk (a file). A chunk that already arrived changes nothing, and the answer always says how much the server has.\n\nPermission: self.tasks.capture. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}},{"name":"upload","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.capture"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"offset":{"type":"integer","description":"required|integer|min:0"},"chunk":{"type":"string","format":"binary","description":"required|file"}},"required":["offset","chunk"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/{task}/evidence/video/{upload}/finish":{"post":{"tags":["tasks"],"operationId":"app_tasks_video_finish","summary":"All there","description":"All there: the same checks as a photo. The answer is the same receipt as a photo's.\n\nPermission: self.tasks.capture. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}},{"name":"upload","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.capture"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/{task}/evidence":{"post":{"tags":["tasks"],"operationId":"app_tasks_proof_upload","summary":"multipart","description":"multipart: photo, meta (with task_id, not job_id), signature. While the switch is off the phone gets 403 and keeps the draft.\n\nPermission: self.tasks.capture. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.capture"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"photo":{"type":"string","format":"binary","description":"required|file|mimetypes:image/jpeg|'max:' . 1024 * (int) \\App\\Support\\Field\\FieldSettings::value('task_photo_max_mb..."},"meta":{"type":"string","description":"required|string|max:20000"},"signature":{"type":"string","description":"required|string|max:500"}},"required":["photo","meta","signature"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/{task}/proof":{"get":{"tags":["tasks"],"operationId":"app_tasks_proof_show","summary":"GET /api/v1/app/companies/{company}/tasks/{task}/proof","description":"Permission: tasks.proof.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/{task}/proof/request-upload":{"post":{"tags":["tasks"],"operationId":"app_tasks_proof_request_upload","summary":"POST /api/v1/app/companies/{company}/tasks/{task}/proof/request-upload","description":"Permission: tasks.proof.request_upload. Module: hrm. 30 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.request_upload"],"x-modules":["hrm"],"x-rate-limit-per-minute":30,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(500)"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/{task}/proof/waive":{"post":{"tags":["tasks"],"operationId":"app_tasks_proof_waive","summary":"POST /api/v1/app/companies/{company}/tasks/{task}/proof/waive","description":"Permission: tasks.proof.waive. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"task","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.waive"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","description":"required|string|min:3|'max:' . \\App\\Support\\Limits::chars(1000)"}},"required":["reason"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/proof/evidence/{evidence}/photo":{"get":{"tags":["tasks"],"operationId":"app_tasks_proof_photo","summary":"The photo","description":"The photo: its employee, or who may see the task's proof. ?size=thumb\n\nPermission: self.tasks.view or tasks.proof.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evidence","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.tasks.view","tasks.proof.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/proof/evidence/{evidence}/void":{"post":{"tags":["tasks"],"operationId":"app_tasks_proof_void","summary":"reason (required).","description":"reason (required).\n\nPermission: tasks.proof.void. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"evidence","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.void"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","description":"required|string|min:3|'max:' . \\App\\Support\\Limits::chars(1000)"}},"required":["reason"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/proof/settings":{"get":{"tags":["tasks"],"operationId":"app_tasks_proof_settings","summary":"GET /api/v1/app/companies/{company}/tasks/proof/settings","description":"Permission: tasks.proof.settings. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.settings"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["tasks"],"operationId":"app_tasks_proof_settings_update","summary":"PATCH /api/v1/app/companies/{company}/tasks/proof/settings","description":"Permission: tasks.proof.settings. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.settings"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tasks/proof/settings/branches/{branch}":{"get":{"tags":["tasks"],"operationId":"app_tasks_proof_settings_branch","summary":"GET /api/v1/app/companies/{company}/tasks/proof/settings/branches/{branch}","description":"Permission: tasks.proof.settings. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.settings"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["tasks"],"operationId":"app_tasks_proof_settings_branch_update","summary":"PATCH /api/v1/app/companies/{company}/tasks/proof/settings/branches/{branch}","description":"Permission: tasks.proof.settings. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tasks.proof.settings"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/team-leaves":{"get":{"tags":["team-leaves"],"operationId":"app_leaves_team","summary":"The team's leaves","description":"The team's leaves: status (pending by default, or all), type, employee, from, to.\n\nPermission: leaves.view. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","approved","rejected","withdrawn","all"],"nullable":true},"description":"nullable|in:pending,approved,rejected,withdrawn,all"},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["days","hours"],"nullable":true},"description":"nullable|in:days,hours"},{"name":"type","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"employee","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"from","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"},{"name":"to","in":"query","required":false,"schema":{"type":"string","format":"date","nullable":true},"description":"nullable|date"}],"x-permissions":["leaves.view"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["team-leaves"],"operationId":"app_leaves_for_employee","summary":"HR adds approved leave for an employee.","description":"HR adds approved leave for an employee.\n\nPermission: leaves.record. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["leaves.record"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"},"leave_type_id":{"type":"string","description":"required|exists:leave_types,id"},"start_date":{"type":"string","format":"date","description":"required|date"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:start_date"},"start_time":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"end_time":{"type":"string","format":"date","nullable":true,"description":"nullable|date_format:H:i"},"reason":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"}},"required":["employee_id","leave_type_id","start_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/team-schedule":{"get":{"tags":["team-schedule"],"operationId":"app_team_schedule_index","summary":"The shifts shared with the caller (every shift for HR), with whether they may change each, and their team.","description":"The shifts shared with the caller (every shift for HR), with whether they may change each, and their team.\n\nPermission: shifts.assign_team or attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["shifts.assign_team","attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/team-schedule/assign":{"post":{"tags":["team-schedule"],"operationId":"app_team_schedule_assign","summary":"employees, shift_id (or \"off\"), start_date, end_date (none = open-ended), conflict replace|keep, draft.","description":"employees, shift_id (or \"off\"), start_date, end_date (none = open-ended), conflict replace|keep, draft.\n\nPermission: shifts.assign_team or attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["shifts.assign_team","attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employees":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1|max:500"},"shift_id":{"type":"string","description":"required"},"start_date":{"type":"string","format":"date","description":"required|date"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:start_date"},"conflict":{"type":"string","enum":["replace","keep"],"description":"sometimes|in:replace,keep"},"draft":{"type":"boolean","description":"sometimes|boolean"}},"required":["employees","shift_id","start_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/team-schedule/clear":{"post":{"tags":["team-schedule"],"operationId":"app_team_schedule_clear","summary":"POST /api/v1/app/companies/{company}/team-schedule/clear","description":"Permission: shifts.assign_team or attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["shifts.assign_team","attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employees":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1|max:500"},"start_date":{"type":"string","format":"date","description":"required|date"},"end_date":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:start_date"}},"required":["employees","start_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/team-schedule/plan":{"post":{"tags":["team-schedule"],"operationId":"app_team_schedule_plan","summary":"shift_ids (shared), start_date, end_date, employees (none = the whole team), max_in_a_row, days_off_a_week, max_weekl\u2026","description":"shift_ids (shared), start_date, end_date, employees (none = the whole team), max_in_a_row, days_off_a_week, max_weekly_hours, fair_nights.\n\nPermission: shifts.assign_team or attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["shifts.assign_team","attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"shift_ids":{"type":"array","items":{"type":"integer"},"description":"required|array|min:1"},"employees":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array|max:500"},"start_date":{"type":"string","format":"date","description":"required|date"},"end_date":{"type":"string","format":"date","description":"required|date|after_or_equal:start_date"},"max_in_a_row":{"type":"integer","nullable":true,"description":"nullable|integer|between:1,14"},"days_off_a_week":{"type":"integer","nullable":true,"description":"nullable|integer|between:0,6"},"max_weekly_hours":{"type":"number","nullable":true,"description":"nullable|numeric|between:1,168"},"fair_nights":{"type":"boolean","description":"sometimes|boolean"}},"required":["shift_ids","start_date","end_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/team-schedule/copy":{"post":{"tags":["team-schedule"],"operationId":"app_team_schedule_copy","summary":"source_from, source_to, target_from, target_to, employees (none = the whole team), draft.","description":"source_from, source_to, target_from, target_to, employees (none = the whole team), draft.\n\nPermission: shifts.assign_team or attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["shifts.assign_team","attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employees":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array|max:500"},"source_from":{"type":"string","format":"date","description":"required|date"},"source_to":{"type":"string","format":"date","description":"required|date|after_or_equal:source_from"},"target_from":{"type":"string","format":"date","description":"required|date"},"target_to":{"type":"string","format":"date","description":"required|date|after_or_equal:target_from"},"draft":{"type":"boolean","description":"sometimes|boolean"}},"required":["source_from","source_to","target_from","target_to"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/team-schedule/publish":{"post":{"tags":["team-schedule"],"operationId":"app_team_schedule_publish","summary":"start_date, end_date, employees (none = the whole team).","description":"start_date, end_date, employees (none = the whole team).\n\nPermission: shifts.assign_team or attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["shifts.assign_team","attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employees":{"type":"array","items":{"type":"integer"},"nullable":true,"description":"nullable|array|max:500"},"start_date":{"type":"string","format":"date","description":"required|date"},"end_date":{"type":"string","format":"date","description":"required|date|after_or_equal:start_date"}},"required":["start_date","end_date"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/team-schedule/shifts/{shift}":{"put":{"tags":["team-schedule"],"operationId":"app_team_schedule_shift_update_put","summary":"A shift's definition, where a share lets the caller change it (HR always).","description":"A shift's definition, where a share lets the caller change it (HR always). Same fields as the shift setup.\n\nPermission: shifts.assign_team or attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"shift","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["shifts.assign_team","attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["team-schedule"],"operationId":"app_team_schedule_shift_update_patch","summary":"A shift's definition, where a share lets the caller change it (HR always).","description":"A shift's definition, where a share lets the caller change it (HR always). Same fields as the shift setup.\n\nPermission: shifts.assign_team or attendance_setup.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"shift","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["shifts.assign_team","attendance_setup.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/template-conflicts":{"get":{"tags":["template-conflicts"],"operationId":"app_devices_conflicts","summary":"Slots devices hold different data for, with every version (no template data).","description":"Slots devices hold different data for, with every version (no template data).\n\nPermission: devices.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["devices.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/terminations":{"get":{"tags":["terminations"],"operationId":"app_terminations_index","summary":"GET /api/v1/app/companies/{company}/terminations","description":"Permission: employees.terminate. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["employees.terminate"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/timesheets":{"get":{"tags":["timesheets"],"operationId":"app_timesheets_index","summary":"My period holding ?week (a date), with its entries, and all my periods.","description":"My period holding ?week (a date), with its entries, and all my periods.\n\nPermission: self.timesheets.view or timesheets.approve. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.timesheets.view","timesheets.approve"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["timesheets"],"operationId":"app_timesheets_store","summary":"POST /api/v1/app/companies/{company}/timesheets","description":"Permission: self.timesheets.log. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.timesheets.log"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"project_id":{"type":"string","description":"required|exists:org_units,id"},"work_date":{"type":"string","format":"date","description":"required|date|before_or_equal:today"},"hours":{"type":"number","description":"required|numeric|min:0.25|'max:' . $max"},"description":{"type":"string","description":"\\App\\Models\\CompanySetting::get('ts_notes_required', $companyId) === '1' ? 'requ...|string|'max:' . \\App\\Support\\Limits::chars(255)"}},"required":["project_id","work_date","hours"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/timesheets/submit":{"post":{"tags":["timesheets"],"operationId":"app_timesheets_submit","summary":"POST /api/v1/app/companies/{company}/timesheets/submit","description":"Permission: self.timesheets.log. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.timesheets.log"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/timesheets/{entry}":{"delete":{"tags":["timesheets"],"operationId":"app_timesheets_destroy","summary":"DELETE /api/v1/app/companies/{company}/timesheets/{entry}","description":"Permission: self.timesheets.log. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"entry","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["self.timesheets.log"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/timesheets/review":{"get":{"tags":["timesheets"],"operationId":"app_timesheets_review","summary":"Submitted periods of the employees in reach.","description":"Submitted periods of the employees in reach.\n\nPermission: timesheets.approve. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["timesheets.approve"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["timesheets"],"operationId":"app_timesheets_decide","summary":"POST /api/v1/app/companies/{company}/timesheets/review","description":"Permission: timesheets.approve. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["timesheets.approve"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"employee_id":{"type":"integer","description":"required|integer"}},"required":["employee_id"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tv":{"get":{"tags":["tv"],"operationId":"app_tv_index","summary":"The TV setup","description":"The TV setup: channels, devices (no tokens), breaking news and slides.\n\nPermission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tv/channels":{"post":{"tags":["tv"],"operationId":"app_tv_channels_store","summary":"name, layout (full, split, quad), areas","description":"name, layout (full, split, quad), areas: one list of widgets per area.\n\nPermission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"required|string|max:100"},"layout":{"type":"string","enum":["full","split","quad"],"description":"required|in:full,split,quad"},"areas":{"type":"array","items":{"type":"array","items":{"type":"string","enum":["today","announcements","birthdays","off_today","coming_up","content","clock","attendance_qr"]},"nullable":true},"description":"required|array"},"is_default":{"type":"boolean","nullable":true,"description":"nullable|boolean"},"active":{"type":"boolean","nullable":true,"description":"nullable|boolean"}},"required":["name","layout","areas"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tv/channels/{channel}":{"patch":{"tags":["tv"],"operationId":"app_tv_channels_update_patch","summary":"PATCH /api/v1/app/companies/{company}/tv/channels/{channel}","description":"Permission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"channel","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["tv"],"operationId":"app_tv_channels_update_put","summary":"PUT /api/v1/app/companies/{company}/tv/channels/{channel}","description":"Permission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"channel","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["tv"],"operationId":"app_tv_channels_destroy","summary":"DELETE /api/v1/app/companies/{company}/tv/channels/{channel}","description":"Permission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"channel","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tv/devices":{"post":{"tags":["tv"],"operationId":"app_tv_devices_store","summary":"name, branch_id, work_location_id (site), tv_channel_id.","description":"name, branch_id, work_location_id (site), tv_channel_id. The answer carries the TV's link and token, once.\n\nPermission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"required|string|max:100"},"branch_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:branches,id"},"tv_channel_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:tv_channels,id"},"work_location_id":{"type":"integer","nullable":true,"description":"nullable|integer|exists:org_units,id"},"locale":{"type":"string","enum":["en","ar"],"nullable":true,"description":"nullable|in:en,ar"}},"required":["name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tv/devices/{device}":{"patch":{"tags":["tv"],"operationId":"app_tv_devices_update_patch","summary":"PATCH /api/v1/app/companies/{company}/tv/devices/{device}","description":"Permission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["tv"],"operationId":"app_tv_devices_update_put","summary":"PUT /api/v1/app/companies/{company}/tv/devices/{device}","description":"Permission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["tv"],"operationId":"app_tv_devices_destroy","summary":"DELETE /api/v1/app/companies/{company}/tv/devices/{device}","description":"Permission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tv/devices/{device}/token":{"post":{"tags":["tv"],"operationId":"app_tv_devices_rotate","summary":"A new link; the old one stops working.","description":"A new link; the old one stops working. The answer carries the new token, once.\n\nPermission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"device","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tv/items":{"post":{"tags":["tv"],"operationId":"app_tv_items_store","summary":"kind (news, slide), title {en, ar}, body {en, ar}, starts_on, ends_on, active, image (file), remove_image.","description":"kind (news, slide), title {en, ar}, body {en, ar}, starts_on, ends_on, active, image (file), remove_image.\n\nPermission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["news","slide","video"],"description":"required|in:news,slide,video"},"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"body":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"}}},"starts_on":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"ends_on":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:starts_on"},"image":{"type":"string","format":"binary","nullable":true,"description":"nullable|image|mimes:jpg,jpeg,png,webp|max:10240"},"video":{"type":"string","format":"binary","description":"($input['kind'] ?? null) === 'video' && !$item?->video_path ? 'required' : 'null...|file|mimetypes:video/mp4,video/webm|max:10240"}},"required":["kind","title"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/tv/items/{item}":{"patch":{"tags":["tv"],"operationId":"app_tv_items_update_patch","summary":"PATCH /api/v1/app/companies/{company}/tv/items/{item}","description":"Permission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"item","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["news","slide","video"],"description":"required|in:news,slide,video"},"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"body":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"}}},"starts_on":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"ends_on":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:starts_on"},"image":{"type":"string","format":"binary","nullable":true,"description":"nullable|image|mimes:jpg,jpeg,png,webp|max:10240"},"video":{"type":"string","format":"binary","description":"($input['kind'] ?? null) === 'video' && !$item?->video_path ? 'required' : 'null...|file|mimetypes:video/mp4,video/webm|max:10240"}},"required":["kind","title"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["tv"],"operationId":"app_tv_items_update_post","summary":"POST /api/v1/app/companies/{company}/tv/items/{item}","description":"Permission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"item","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["news","slide","video"],"description":"required|in:news,slide,video"},"title":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"required|array","properties":{"en":{"type":"string","description":"required|string|'max:' . \\App\\Support\\Limits::chars(150)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(150)"}}},"body":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(1000)"}}},"starts_on":{"type":"string","format":"date","nullable":true,"description":"nullable|date"},"ends_on":{"type":"string","format":"date","nullable":true,"description":"nullable|date|after_or_equal:starts_on"},"image":{"type":"string","format":"binary","nullable":true,"description":"nullable|image|mimes:jpg,jpeg,png,webp|max:10240"},"video":{"type":"string","format":"binary","description":"($input['kind'] ?? null) === 'video' && !$item?->video_path ? 'required' : 'null...|file|mimetypes:video/mp4,video/webm|max:10240"}},"required":["kind","title"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["tv"],"operationId":"app_tv_items_destroy","summary":"DELETE /api/v1/app/companies/{company}/tv/items/{item}","description":"Permission: tv.manage. Module: hrm. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"item","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["tv.manage"],"x-modules":["hrm"],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/users":{"get":{"tags":["users"],"operationId":"app_users_index","summary":"GET /api/v1/app/companies/{company}/users","description":"Permission: users.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["users.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/users/{user}":{"patch":{"tags":["users"],"operationId":"app_users_update","summary":"PATCH /api/v1/app/companies/{company}/users/{user}","description":"Permission: users.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"user","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["users.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["active","inactive"],"description":"required|in:active,inactive"}},"required":["status"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/users/{user}/two-factor/reset":{"post":{"tags":["users"],"operationId":"app_users_two_factor_reset","summary":"POST /api/v1/app/companies/{company}/users/{user}/two-factor/reset","description":"Permission: users.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"user","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["users.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/webhook-deliveries":{"get":{"tags":["webhook-deliveries"],"operationId":"app_webhooks_deliveries","summary":"GET webhook-deliveries?webhook_id=&status=delivered|failed","description":"GET webhook-deliveries?webhook_id=&status=delivered|failed\n\nPermission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/webhook-deliveries/{delivery}":{"get":{"tags":["webhook-deliveries"],"operationId":"app_webhooks_deliveries_show","summary":"GET /api/v1/app/companies/{company}/webhook-deliveries/{delivery}","description":"Permission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"delivery","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/webhook-deliveries/{delivery}/resend":{"post":{"tags":["webhook-deliveries"],"operationId":"app_webhooks_deliveries_resend","summary":"POST /api/v1/app/companies/{company}/webhook-deliveries/{delivery}/resend","description":"Permission: integrations.api_keys.manage. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"delivery","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/webhook-events":{"get":{"tags":["webhook-events"],"operationId":"app_webhooks_events","summary":"GET /api/v1/app/companies/{company}/webhook-events","description":"Permission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/webhooks":{"get":{"tags":["webhooks"],"operationId":"app_webhooks_index","summary":"GET /api/v1/app/companies/{company}/webhooks","description":"Permission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["webhooks"],"operationId":"app_webhooks_store","summary":"POST webhooks","description":"POST webhooks: the signing secret is in the answer this once.\n\nPermission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:100"},"url":{"type":"string","description":"$req|url:http,https|max:500"},"events":{"type":"array","items":{"type":"string"},"description":"$req|array|min:1"},"format":{"type":"string","enum":["json","xml"],"description":"sometimes|in:json,xml"},"active":{"type":"boolean","description":"sometimes|boolean"},"group":{"type":"string","enum":["financial_employee","financial_journal"],"nullable":true,"description":"sometimes|nullable|in:financial_employee,financial_journal"},"api_key_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|exists:api_keys,id"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/webhooks/{webhook}":{"patch":{"tags":["webhooks"],"operationId":"app_webhooks_update_patch","summary":"PATCH /api/v1/app/companies/{company}/webhooks/{webhook}","description":"Permission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"webhook","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:100"},"url":{"type":"string","description":"$req|url:http,https|max:500"},"events":{"type":"array","items":{"type":"string"},"description":"$req|array|min:1"},"format":{"type":"string","enum":["json","xml"],"description":"sometimes|in:json,xml"},"active":{"type":"boolean","description":"sometimes|boolean"},"group":{"type":"string","enum":["financial_employee","financial_journal"],"nullable":true,"description":"sometimes|nullable|in:financial_employee,financial_journal"},"api_key_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|exists:api_keys,id"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["webhooks"],"operationId":"app_webhooks_update_put","summary":"PUT /api/v1/app/companies/{company}/webhooks/{webhook}","description":"Permission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"webhook","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","nullable":true,"description":"sometimes|nullable|string|max:100"},"url":{"type":"string","description":"$req|url:http,https|max:500"},"events":{"type":"array","items":{"type":"string"},"description":"$req|array|min:1"},"format":{"type":"string","enum":["json","xml"],"description":"sometimes|in:json,xml"},"active":{"type":"boolean","description":"sometimes|boolean"},"group":{"type":"string","enum":["financial_employee","financial_journal"],"nullable":true,"description":"sometimes|nullable|in:financial_employee,financial_journal"},"api_key_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|exists:api_keys,id"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["webhooks"],"operationId":"app_webhooks_destroy","summary":"DELETE /api/v1/app/companies/{company}/webhooks/{webhook}","description":"Permission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"webhook","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/webhooks/{webhook}/rotate-secret":{"post":{"tags":["webhooks"],"operationId":"app_webhooks_rotate","summary":"POST /api/v1/app/companies/{company}/webhooks/{webhook}/rotate-secret","description":"Permission: integrations.api_keys.manage. 60 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"webhook","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":60,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/app/companies/{company}/webhooks/{webhook}/test":{"post":{"tags":["webhooks"],"operationId":"app_webhooks_test","summary":"POST /api/v1/app/companies/{company}/webhooks/{webhook}/test","description":"Permission: integrations.api_keys.manage. 20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"webhook","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":["integrations.api_keys.manage"],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/ai":{"get":{"tags":["platform: ai"],"operationId":"platform_ai_show","summary":"GET /api/v1/platform/ai","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["platform: ai"],"operationId":"platform_ai_update","summary":"PUT /api/v1/platform/ai","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/ai/models":{"get":{"tags":["platform: ai"],"operationId":"platform_ai_models","summary":"GET /api/v1/platform/ai/models","description":"20 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-activity":{"get":{"tags":["platform: app-activity"],"operationId":"platform_app_activity_index","summary":"GET app-activity","description":"GET app-activity: every phone's sign-in activity (filters: user_id, install_id, device_id, event, result, from, to; page, per_page).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-debug/accounts":{"get":{"tags":["platform: app-debug"],"operationId":"platform_app_debug_accounts","summary":"GET app-debug/accounts","description":"GET app-debug/accounts: the accounts with debug mode, on or ended.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-debug/accounts/{user}":{"put":{"tags":["platform: app-debug"],"operationId":"platform_app_debug_accounts_update","summary":"PUT app-debug/accounts/{user}","description":"PUT app-debug/accounts/{user}: on (boolean), hours (1\u2013168, default 24; null = no end), send (ask the phone for a report).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"user","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-debug/accounts/{user}/request":{"post":{"tags":["platform: app-debug"],"operationId":"platform_app_debug_accounts_request","summary":"POST app-debug/accounts/{user}/request","description":"POST app-debug/accounts/{user}/request: the phone sends a report at its next open.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"user","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-debug/reports":{"get":{"tags":["platform: app-debug"],"operationId":"platform_app_debug_reports","summary":"GET app-debug/reports","description":"GET app-debug/reports: newest first; filters user_id, install_id, build.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer"},{"name":"install_id","in":"query","required":false,"schema":{"type":"string","nullable":true},"description":"nullable|string|max:64"},{"name":"build","in":"query","required":false,"schema":{"type":"string","nullable":true},"description":"nullable|string|max:20"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer|min:1|'max:' . \\App\\Support\\Limits::pageMax(100)"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-debug/reports/{report}":{"get":{"tags":["platform: app-debug"],"operationId":"platform_app_debug_reports_show","summary":"GET app-debug/reports/{report}","description":"GET app-debug/reports/{report}: the whole report.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"report","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-fleet":{"get":{"tags":["platform: app-fleet"],"operationId":"platform_app_fleet_index","summary":"Phones and versions","description":"Phones and versions: every phone with the app, with the summary. Filters as AppFleet::validateFilters; page, per_page.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-fleet/people/{user}/context":{"get":{"tags":["platform: app-fleet"],"operationId":"platform_app_fleet_person_context","summary":"GET app-fleet/people/{user}/context","description":"GET app-fleet/people/{user}/context: a person's phone details, latest per phone and the history (filters install_id, category, limit).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"user","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-fleet/phones/{install}/test-push":{"post":{"tags":["platform: app-fleet"],"operationId":"platform_app_fleet_test_push","summary":"POST app-fleet/phones/{install}/test-push","description":"POST app-fleet/phones/{install}/test-push: one test notification to one phone (docs/notifications.md \u00ab\u0627\u0644\u0625\u0634\u0639\u0627\u0631 \u0627\u0644\u062a\u062c\u0631\u064a\u0628\u064a\u00bb).\n\n10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"install","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-fleet/people/{user}":{"get":{"tags":["platform: app-fleet"],"operationId":"platform_app_fleet_person","summary":"GET app-fleet/people/{user}","description":"GET app-fleet/people/{user}: one person's phones with their IPs and timelines.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"user","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-releases":{"get":{"tags":["platform: app-releases"],"operationId":"platform_app_releases_index","summary":"GET /api/v1/platform/app-releases","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-releases/sync":{"post":{"tags":["platform: app-releases"],"operationId":"platform_app_releases_sync","summary":"Reads both stores' latest version now (also hourly), and returns each check.","description":"Reads both stores' latest version now (also hourly), and returns each check.\n\n10 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-releases/{platform}":{"patch":{"tags":["platform: app-releases"],"operationId":"platform_app_releases_update","summary":"min_version (one of meta.known_versions), update_mode (none|suggest|force), message {en, ar}, release_notes {en, ar}","description":"min_version (one of meta.known_versions), update_mode (none|suggest|force), message {en, ar}, release_notes {en, ar}: any of them. latest_version and store_url come from the stores: sending them is a 422.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"platform","in":"path","required":true,"schema":{"type":"string","pattern":"^android|ios$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-releases/companies/{company}":{"put":{"tags":["platform: app-releases"],"operationId":"platform_app_releases_overrides_update","summary":"mode stricter (min_android and/or min_ios), exempt, or none to remove the company's rule.","description":"mode stricter (min_android and/or min_ios), exempt, or none to remove the company's rule.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-releases/{platform}/impact":{"get":{"tags":["platform: app-releases"],"operationId":"platform_app_releases_impact","summary":"?version=","description":"?version=: how many phones and people a minimum of that version would block, against today (default: forcing the latest).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"platform","in":"path","required":true,"schema":{"type":"string","pattern":"^android|ios$"}},{"name":"version","in":"query","required":false,"schema":{"type":"string","nullable":true},"description":"nullable|string|regex:/^\\d{1,5}(\\.\\d{1,5}){0,3}$/"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/app-releases/{platform}/nudge":{"post":{"tags":["platform: app-releases"],"operationId":"platform_app_releases_nudge","summary":"\"Please update\"","description":"\"Please update\": version_state outdated (default) or below_min; a push linking to the store. Needs platform.broadcast too.\n\n5 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"platform","in":"path","required":true,"schema":{"type":"string","pattern":"^android|ios$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":5,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/appearance":{"get":{"tags":["platform: appearance"],"operationId":"platform_appearance_show","summary":"GET /api/v1/platform/appearance","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: appearance"],"operationId":"platform_appearance_update","summary":"PATCH /api/v1/platform/appearance","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["platform: appearance"],"operationId":"platform_appearance_reset","summary":"DELETE /api/v1/platform/appearance","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/backups":{"get":{"tags":["platform: backups"],"operationId":"platform_backups_status","summary":"GET /api/v1/platform/backups","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/backups/runs":{"get":{"tags":["platform: backups"],"operationId":"platform_backups_runs_index","summary":"GET /api/v1/platform/backups/runs","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: backups"],"operationId":"platform_backups_runs_store","summary":"POST /api/v1/platform/backups/runs","description":"10 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/backups/runs/{run}":{"get":{"tags":["platform: backups"],"operationId":"platform_backups_runs_show","summary":"GET /api/v1/platform/backups/runs/{run}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/backups/restore-tests":{"get":{"tags":["platform: backups"],"operationId":"platform_backups_restore_tests_index","summary":"GET /api/v1/platform/backups/restore-tests","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/backups/destinations":{"get":{"tags":["platform: backups"],"operationId":"platform_backups_destinations_index","summary":"GET /api/v1/platform/backups/destinations","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: backups"],"operationId":"platform_backups_destinations_store","summary":"POST /api/v1/platform/backups/destinations","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/backups/settings":{"patch":{"tags":["platform: backups"],"operationId":"platform_backups_settings_update","summary":"PATCH /api/v1/platform/backups/settings","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/backups/passphrase":{"put":{"tags":["platform: backups"],"operationId":"platform_backups_passphrase_update","summary":"PUT /api/v1/platform/backups/passphrase","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"passphrase":{"type":"string","description":"required|string"}},"required":["passphrase"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/backups/destinations/{destination}":{"patch":{"tags":["platform: backups"],"operationId":"platform_backups_destinations_update","summary":"PATCH /api/v1/platform/backups/destinations/{destination}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"destination","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["platform: backups"],"operationId":"platform_backups_destinations_destroy","summary":"DELETE /api/v1/platform/backups/destinations/{destination}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"destination","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/backups/destinations/{destination}/connect-link":{"post":{"tags":["platform: backups"],"operationId":"platform_backups_destinations_connect_link","summary":"A link to open in a browser signed in to the panel; the sign-in on the service happens there.","description":"A link to open in a browser signed in to the panel; the sign-in on the service happens there.\n\n10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"destination","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/backups/destinations/{destination}/test":{"post":{"tags":["platform: backups"],"operationId":"platform_backups_destinations_test","summary":"POST /api/v1/platform/backups/destinations/{destination}/test","description":"10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"destination","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/backups/runs/{run}/restore-test":{"post":{"tags":["platform: backups"],"operationId":"platform_backups_runs_restore_test","summary":"POST /api/v1/platform/backups/runs/{run}/restore-test","description":"10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/branches":{"get":{"tags":["platform: branches"],"operationId":"platform_companies_branches_index","summary":"GET /api/v1/platform/companies/{company}/branches","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: branches"],"operationId":"platform_companies_branches_store","summary":"Within the license's branch limit (platform.companies).","description":"Within the license's branch limit (platform.companies). Logos as multipart files.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/branches/{branch}":{"put":{"tags":["platform: branches"],"operationId":"platform_companies_branches_update_put","summary":"PUT /api/v1/platform/companies/{company}/branches/{branch}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: branches"],"operationId":"platform_companies_branches_update_patch","summary":"PATCH /api/v1/platform/companies/{company}/branches/{branch}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/broadcasts/preview":{"post":{"tags":["platform: broadcasts"],"operationId":"platform_broadcasts_preview","summary":"company_ids, roles, user_ids, branch_ids, install_ids, platform, version_state, version","description":"company_ids, roles, user_ids, branch_ids, install_ids, platform, version_state, version: how many people, phones and emails a send would reach.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/broadcasts":{"get":{"tags":["platform: broadcasts"],"operationId":"platform_broadcasts_index","summary":"GET /api/v1/platform/broadcasts","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: broadcasts"],"operationId":"platform_broadcasts_store","summary":"title {en, ar}, body {en, ar}, url, push, email, the audience (company_ids, roles, user_ids, branch_ids, install_ids,\u2026","description":"title {en, ar}, body {en, ar}, url, push, email, the audience (company_ids, roles, user_ids, branch_ids, install_ids, platform, version_state, version), image (a file, multipart), scheduled_at. test=true sends it now to your own phones and email only. Goes out in the background.\n\n5 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":5,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/broadcasts/{broadcast}":{"get":{"tags":["platform: broadcasts"],"operationId":"platform_broadcasts_show","summary":"The send with a page of its people and what each channel answered; ?result=failed|no_device|\u2026 filters push results.","description":"The send with a page of its people and what each channel answered; ?result=failed|no_device|\u2026 filters push results.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"broadcast","in":"path","required":true,"schema":{"type":"integer"}},{"name":"result","in":"query","required":false,"schema":{"type":"string","nullable":true},"description":"nullable|string|max:20"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer|min:1|'max:' . \\App\\Support\\Limits::pageMax(200)"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/broadcasts/{broadcast}/cancel":{"post":{"tags":["platform: broadcasts"],"operationId":"platform_broadcasts_cancel","summary":"Cancels a send that hasn't started (scheduled or still waiting).","description":"Cancels a send that hasn't started (scheduled or still waiting).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"broadcast","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/buddy-punching":{"get":{"tags":["platform: buddy-punching"],"operationId":"platform_buddy_punching_show","summary":"GET buddy-punching","description":"GET buddy-punching: the platform default of each buddy-punching layer and who set their own (docs/attendance-security.md \u00a719).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/buddy-punching/{layer}":{"put":{"tags":["platform: buddy-punching"],"operationId":"platform_buddy_punching_update","summary":"PUT buddy-punching/{layer}","description":"PUT buddy-punching/{layer}: mode off|flag|refuse and the layer's own settings.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"layer","in":"path","required":true,"schema":{"type":"string","pattern":"^bp_face|bp_device_key|bp_presence|bp_pattern$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/calculator-rule-sets":{"get":{"tags":["platform: calculator-rule-sets"],"operationId":"platform_calculator_rule_sets_index","summary":"GET /api/v1/platform/calculator-rule-sets","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: calculator-rule-sets"],"operationId":"platform_calculator_rule_sets_store","summary":"POST /api/v1/platform/calculator-rule-sets","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"country_code":{"type":"string","description":"required|string|size:2|fn($a, $v, $fail) => \\App\\Support\\Countries::exists($v) ? null : $fail(__('Unkno..."},"variant":{"type":"string","nullable":true,"description":"nullable|string|max:40|regex:/^[a-z0-9-]+$/"},"variant_label":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(100)"}}},"effective_from":{"type":"string","format":"date","description":"required|date_format:Y-m-d"},"copy_from":{"type":"integer","nullable":true,"description":"nullable|integer|exists:calculator_rule_sets,id"},"notes":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"nullable|array"},"allow_estimates":{"type":"boolean","description":"sometimes|boolean"}},"required":["country_code","effective_from"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/calculator-rule-sets/{ruleSet}":{"get":{"tags":["platform: calculator-rule-sets"],"operationId":"platform_calculator_rule_sets_show","summary":"GET /api/v1/platform/calculator-rule-sets/{ruleSet}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"ruleSet","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: calculator-rule-sets"],"operationId":"platform_calculator_rule_sets_update","summary":"PATCH /api/v1/platform/calculator-rule-sets/{ruleSet}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"ruleSet","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"rules":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"sometimes|array"},"notes":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"sometimes|nullable|array","properties":{"en":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(3000)"},"ar":{"type":"string","nullable":true,"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(3000)"}}},"allow_estimates":{"type":"boolean","description":"sometimes|boolean"},"variant_label":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"nullable":true,"description":"sometimes|nullable|array"},"effective_from":{"type":"string","format":"date","description":"sometimes|date_format:Y-m-d"},"position":{"type":"integer","description":"sometimes|integer|min:0|max:100"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/calculator-rule-sets/{ruleSet}/verify":{"post":{"tags":["platform: calculator-rule-sets"],"operationId":"platform_calculator_rule_sets_verify","summary":"POST /api/v1/platform/calculator-rule-sets/{ruleSet}/verify","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"ruleSet","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"string"},"description":"required|array|min:1"},"verified":{"type":"boolean","description":"sometimes|boolean"}},"required":["keys"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/calculator-rule-sets/{ruleSet}/publish":{"post":{"tags":["platform: calculator-rule-sets"],"operationId":"platform_calculator_rule_sets_publish","summary":"POST /api/v1/platform/calculator-rule-sets/{ruleSet}/publish","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"ruleSet","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/calculator-rule-sets/{ruleSet}/unpublish":{"post":{"tags":["platform: calculator-rule-sets"],"operationId":"platform_calculator_rule_sets_unpublish","summary":"POST /api/v1/platform/calculator-rule-sets/{ruleSet}/unpublish","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"ruleSet","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/calculator-rule-sets/{ruleSet}/restore/{revision}":{"post":{"tags":["platform: calculator-rule-sets"],"operationId":"platform_calculator_rule_sets_restore","summary":"POST /api/v1/platform/calculator-rule-sets/{ruleSet}/restore/{revision}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"ruleSet","in":"path","required":true,"schema":{"type":"integer"}},{"name":"revision","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}":{"delete":{"tags":["platform: companies"],"operationId":"platform_companies_destroy","summary":"Body","description":"Body: confirm_name (the name or slug), confirm: true, force: true when it has payroll or attendance, reason.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"get":{"tags":["platform: companies"],"operationId":"platform_companies_show","summary":"GET /api/v1/platform/companies/{company}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["platform: companies"],"operationId":"platform_companies_update_put","summary":"PUT /api/v1/platform/companies/{company}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: companies"],"operationId":"platform_companies_update_patch","summary":"PATCH /api/v1/platform/companies/{company}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies":{"get":{"tags":["platform: companies"],"operationId":"platform_companies_index","summary":"GET /api/v1/platform/companies","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: companies"],"operationId":"platform_companies_store","summary":"Response includes the owner's temporary password once, when a new user was created.","description":"Response includes the owner's temporary password once, when a new user was created.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/company-availability":{"get":{"tags":["platform: company-availability"],"operationId":"platform_company_availability","summary":"GET /api/v1/platform/company-availability","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/deleted-companies":{"get":{"tags":["platform: deleted-companies"],"operationId":"platform_deleted_companies_index","summary":"GET /api/v1/platform/deleted-companies","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/deleted-companies/{company}/restore":{"post":{"tags":["platform: deleted-companies"],"operationId":"platform_deleted_companies_restore","summary":"POST /api/v1/platform/deleted-companies/{company}/restore","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/deletion-preview":{"get":{"tags":["platform: deletion-preview"],"operationId":"platform_companies_deletion_preview","summary":"What a deletion would lose","description":"What a deletion would lose: the payroll runs and attendance that make it \"real\", employees and accounts.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/demo/reset":{"post":{"tags":["platform: demo"],"operationId":"platform_demo_reset","summary":"POST /api/v1/platform/demo/reset","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/device-data":{"get":{"tags":["platform: device-data"],"operationId":"platform_device_data_show","summary":"GET device-data","description":"GET device-data: the platform defaults of location as a condition of using the app and of each category of phone details.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["platform: device-data"],"operationId":"platform_device_data_update","summary":"PUT device-data","description":"PUT device-data: location_required {enabled, precise, reason_en, reason_ar}, categories {category: {enabled, retention_days}}.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/domains":{"get":{"tags":["platform: domains"],"operationId":"platform_domains_index","summary":"GET /api/v1/platform/domains","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/event-location":{"get":{"tags":["platform: event-location"],"operationId":"platform_event_location_show","summary":"GET event-location","description":"GET event-location: the platform default for keeping the phone's GPS point with sign-ins and opens, and the companies with their own.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["platform: event-location"],"operationId":"platform_event_location_update","summary":"PUT event-location","description":"PUT event-location: mode auto (companies with live location or the clock-in geofence) | on | off.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","description":"required|Rule::in(self::MODES)"}},"required":["mode"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/flash-messages":{"get":{"tags":["platform: flash-messages"],"operationId":"platform_flash_messages_show","summary":"GET /api/v1/platform/flash-messages","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: flash-messages"],"operationId":"platform_flash_messages_update","summary":"position, duration_seconds, auto_close","description":"position, duration_seconds, auto_close: any of them; the rest keep their value.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/leads":{"get":{"tags":["platform: leads"],"operationId":"platform_leads_index","summary":"GET /api/v1/platform/leads","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/leads/{lead}":{"get":{"tags":["platform: leads"],"operationId":"platform_leads_show","summary":"GET /api/v1/platform/leads/{lead}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"lead","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: leads"],"operationId":"platform_leads_update","summary":"PATCH /api/v1/platform/leads/{lead}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"lead","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["new","contacted","closed"],"description":"sometimes|in:new,contacted,closed"},"notes":{"type":"string","nullable":true,"description":"sometimes|nullable|string|'max:' . \\App\\Support\\Limits::chars(5000)"},"assigned_to":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer|Rule::exists(\\App\\Models\\User::class, 'id')->where('is_admin', true)"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/leads/{lead}/archive":{"post":{"tags":["platform: leads"],"operationId":"platform_leads_archive","summary":"Archive (soft delete, restorable); messages are never deleted.","description":"Archive (soft delete, restorable); messages are never deleted.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"lead","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/leads/{lead}/restore":{"post":{"tags":["platform: leads"],"operationId":"platform_leads_restore","summary":"POST /api/v1/platform/leads/{lead}/restore","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"lead","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/licenses":{"get":{"tags":["platform: licenses"],"operationId":"platform_companies_licenses_index","summary":"GET /api/v1/platform/companies/{company}/licenses","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: licenses"],"operationId":"platform_companies_licenses_store","summary":"POST /api/v1/platform/companies/{company}/licenses","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/licenses/{license}":{"patch":{"tags":["platform: licenses"],"operationId":"platform_companies_licenses_update","summary":"Edits a license in place; fields left out keep their value (platform.companies).","description":"Edits a license in place; fields left out keep their value (platform.companies).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"license","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["platform: licenses"],"operationId":"platform_companies_licenses_destroy","summary":"Never the only license or the one in effect (422).","description":"Never the only license or the one in effect (422).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"license","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/licenses/{license}/suspend":{"post":{"tags":["platform: licenses"],"operationId":"platform_companies_licenses_suspend","summary":"POST /api/v1/platform/companies/{company}/licenses/{license}/suspend","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"license","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/licenses/{license}/reactivate":{"post":{"tags":["platform: licenses"],"operationId":"platform_companies_licenses_reactivate","summary":"POST /api/v1/platform/companies/{company}/licenses/{license}/reactivate","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"license","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/limits":{"get":{"tags":["platform: limits"],"operationId":"platform_limits_show","summary":"GET /api/v1/platform/limits","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: limits"],"operationId":"platform_limits_update","summary":"values","description":"values: {key: number, or null for the built-in default}; sizes in KB. Only the keys sent change.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/login-designs":{"get":{"tags":["platform: login-designs"],"operationId":"platform_login_designs_index","summary":"GET /api/v1/platform/login-designs","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/login-designs/areas":{"patch":{"tags":["platform: login-designs"],"operationId":"platform_login_designs_areas","summary":"PATCH /api/v1/platform/login-designs/areas","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/login-designs/{design}":{"patch":{"tags":["platform: login-designs"],"operationId":"platform_login_designs_update","summary":"PATCH /api/v1/platform/login-designs/{design}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"design","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/messaging/{channel}":{"get":{"tags":["platform: messaging"],"operationId":"platform_messaging_show","summary":"Secrets are never returned, only whether one is saved.","description":"Secrets are never returned, only whether one is saved.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"channel","in":"path","required":true,"schema":{"type":"string","pattern":"^mail|whatsapp$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["platform: messaging"],"operationId":"platform_messaging_update","summary":"PUT /api/v1/platform/messaging/{channel}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"channel","in":"path","required":true,"schema":{"type":"string","pattern":"^mail|whatsapp$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"required"},"access_token":{"type":"string","description":"required"}},"required":["password","access_token"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/messaging/mail/test":{"post":{"tags":["platform: messaging"],"operationId":"platform_messaging_mail_test","summary":"One test email through the saved settings; a failure is a 422 with the reason explained (docs/mail.md).","description":"One test email through the saved settings; a failure is a 422 with the reason explained (docs/mail.md).\n\n10 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/messaging/mail/health":{"get":{"tags":["platform: messaging"],"operationId":"platform_messaging_mail_health","summary":"Is email going anywhere","description":"Is email going anywhere: the sending method, last 24 hours, queued and failed (docs/mail.md).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/messaging/mail/deliveries":{"get":{"tags":["platform: messaging"],"operationId":"platform_messaging_mail_deliveries","summary":"Email deliveries, newest first; ?status=sent|logged|queued|failed, ?q= address or subject.","description":"Email deliveries, newest first; ?status=sent|logged|queued|failed, ?q= address or subject.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["sent","logged","queued","failed"],"nullable":true},"description":"nullable|in:sent,logged,queued,failed"},{"name":"q","in":"query","required":false,"schema":{"type":"string","nullable":true},"description":"nullable|string|'max:' . \\App\\Support\\Limits::chars(190)"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer|min:1|'max:' . \\App\\Support\\Limits::pageMax(100)"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/messaging/mail/deliveries/{delivery}/retry":{"post":{"tags":["platform: messaging"],"operationId":"platform_messaging_mail_retry","summary":"Puts a failed email back in the queue; it goes out within a minute.","description":"Puts a failed email back in the queue; it goes out within a minute.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"delivery","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/monitor/overview":{"get":{"tags":["platform: monitor"],"operationId":"platform_monitor_overview","summary":"Everything the live page shows, with the value of each alert metric.","description":"Everything the live page shows, with the value of each alert metric.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/monitor/history":{"get":{"tags":["platform: monitor"],"operationId":"platform_monitor_history","summary":"?range=24h|7d|30d","description":"?range=24h|7d|30d: chart series averaged per slot.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"range","in":"query","required":false,"schema":{"type":"string","enum":["24h","7d","30d"],"nullable":true},"description":"nullable|in:24h,7d,30d"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/monitor/alerts/rules":{"get":{"tags":["platform: monitor"],"operationId":"platform_monitor_rules_index","summary":"GET /api/v1/platform/monitor/alerts/rules","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/monitor/alerts/rules/{rule}":{"patch":{"tags":["platform: monitor"],"operationId":"platform_monitor_rules_update","summary":"threshold, for_minutes, cooldown_minutes, enabled","description":"threshold, for_minutes, cooldown_minutes, enabled: any of them.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"rule","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"threshold":{"type":"number","description":"sometimes|numeric|'min:' . $bounds['min']|'max:' . $bounds['max']"},"for_minutes":{"type":"integer","description":"sometimes|integer|min:1|max:1440"},"cooldown_minutes":{"type":"integer","description":"sometimes|integer|min:5|max:10080"},"enabled":{"type":"boolean","description":"sometimes|boolean"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/monitor/alerts/recipients":{"get":{"tags":["platform: monitor"],"operationId":"platform_monitor_recipients_show","summary":"GET /api/v1/platform/monitor/alerts/recipients","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["platform: monitor"],"operationId":"platform_monitor_recipients_update","summary":"recipients","description":"recipients: a list of addresses (an empty list stops alert emails), language: en|ar.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"recipients":{"type":"array","items":{"type":"string","format":"email"},"description":"present|array|max:20"},"language":{"type":"string","enum":["en","ar"],"description":"sometimes|in:en,ar"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/monitor/alerts/events":{"get":{"tags":["platform: monitor"],"operationId":"platform_monitor_events_index","summary":"The alerts log, newest first; ?kind=fired|repeat|recovered, ?metric=.","description":"The alerts log, newest first; ?kind=fired|repeat|recovered, ?metric=.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["fired","repeat","recovered"],"nullable":true},"description":"nullable|in:fired,repeat,recovered"},{"name":"metric","in":"query","required":false,"schema":{"type":"string","enum":["cpu","memory","disk","load","db_connections","db_timeouts","errors","failed_jobs","service_down","site_down","ssl_days","zenhr_sync_failed","device_offline_hours","backup_age_hours"],"nullable":true},"description":"nullable|in:cpu,memory,disk,load,db_connections,db_timeouts,errors,failed_jobs,service_down,site_down,ssl_days,zenhr_sync_failed,device_offline_hours,backup_age_hours"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer|min:1|'max:' . \\App\\Support\\Limits::pageMax(100)"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/notification-log":{"get":{"tags":["platform: notification-log"],"operationId":"platform_notification_log_index","summary":"GET notification-log?tab=notices|broadcasts|emails&from=&to=&company=&category=&channel=&status=&kind=&q=&per_page=","description":"GET notification-log?tab=notices|broadcasts|emails&from=&to=&company=&category=&channel=&status=&kind=&q=&per_page=\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/notification-log/export":{"get":{"tags":["platform: notification-log"],"operationId":"platform_notification_log_export","summary":"GET notification-log/export?tab=&format=csv|xlsx&\u2026filters, or send= one notice's recipients.","description":"GET notification-log/export?tab=&format=csv|xlsx&\u2026filters, or send= one notice's recipients.\n\n20 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/notification-log/{send}":{"get":{"tags":["platform: notification-log"],"operationId":"platform_notification_log_show","summary":"GET notification-log/{send}","description":"GET notification-log/{send}: one company notice with every person and each channel's answer.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"send","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/phone-sharing":{"get":{"tags":["platform: phone-sharing"],"operationId":"platform_phone_sharing_show","summary":"GET phone-sharing","description":"GET phone-sharing: the platform default for one account per phone (docs/platform-control.md \u00ab\u0627\u0644\u0647\u0627\u062a\u0641 \u0627\u0644\u0645\u0634\u062a\u0631\u0643\u00bb), and the companies with their own.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["platform: phone-sharing"],"operationId":"platform_phone_sharing_update","summary":"PUT phone-sharing","description":"PUT phone-sharing: mode (allow|warn|block), max_accounts (1\u201310).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","description":"required|Rule::in(self::MODES)"},"max_accounts":{"type":"integer","description":"required|integer|between:1,10"}},"required":["mode","max_accounts"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/platform-admins":{"get":{"tags":["platform: platform-admins"],"operationId":"platform_platform_admins_index","summary":"q (name or email), permission, sort (name, email, added) and dir.","description":"q (name or email), permission, sort (name, email, added) and dir. With per_page (10, 25, 50, 100) one page and its meta; without, all of them. Also the permissions there are, with what each allows.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: platform-admins"],"operationId":"platform_platform_admins_store","summary":"name, email, permissions.","description":"name, email, permissions. The temporary password is in the answer once.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"required|string|max:120"},"email":{"type":"string","format":"email","description":"required|email|max:190"},"permissions":{"type":"array","items":{"type":"string","enum":["platform.ai","server.monitor","platform.app_control","platform.broadcast","platform.companies","platform.phones.location","platform.admins","platform.notifications","platform.zenhr","platform.flash_messages","platform.server_switch","platform.app_debug","platform.backups","platform.backups_change","platform.backups_run"]},"nullable":true,"description":"sometimes|nullable|array"}},"required":["name","email"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/platform-admins/{platform_admin}":{"get":{"tags":["platform: platform-admins"],"operationId":"platform_platform_admins_show","summary":"GET /api/v1/platform/platform-admins/{platform_admin}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"platform_admin","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["platform: platform-admins"],"operationId":"platform_platform_admins_update_put","summary":"name; permissions (the whole list kept), or grant / revoke one.","description":"name; permissions (the whole list kept), or grant / revoke one.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"platform_admin","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"sometimes|required|string|max:120"},"permissions":{"type":"array","items":{"type":"string","enum":["platform.ai","server.monitor","platform.app_control","platform.broadcast","platform.companies","platform.phones.location","platform.admins","platform.notifications","platform.zenhr","platform.flash_messages","platform.server_switch","platform.app_debug","platform.backups","platform.backups_change","platform.backups_run"]},"nullable":true,"description":"sometimes|nullable|array"},"grant":{"type":"string","enum":["platform.ai","server.monitor","platform.app_control","platform.broadcast","platform.companies","platform.phones.location","platform.admins","platform.notifications","platform.zenhr","platform.flash_messages","platform.server_switch","platform.app_debug","platform.backups","platform.backups_change","platform.backups_run"],"description":"sometimes|string|in:platform.ai,server.monitor,platform.app_control,platform.broadcast,platform.companies,platform.phones.location,platform.admins,platform.notifications,platform.zenhr,platform.flash_messages,platform.server_switch,platform.app_debug,platform.backups,platform.backups_change,platform.backups_run"},"revoke":{"type":"string","enum":["platform.ai","server.monitor","platform.app_control","platform.broadcast","platform.companies","platform.phones.location","platform.admins","platform.notifications","platform.zenhr","platform.flash_messages","platform.server_switch","platform.app_debug","platform.backups","platform.backups_change","platform.backups_run"],"description":"sometimes|string|in:platform.ai,server.monitor,platform.app_control,platform.broadcast,platform.companies,platform.phones.location,platform.admins,platform.notifications,platform.zenhr,platform.flash_messages,platform.server_switch,platform.app_debug,platform.backups,platform.backups_change,platform.backups_run"}},"required":["name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: platform-admins"],"operationId":"platform_platform_admins_update_patch","summary":"name; permissions (the whole list kept), or grant / revoke one.","description":"name; permissions (the whole list kept), or grant / revoke one.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"platform_admin","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"sometimes|required|string|max:120"},"permissions":{"type":"array","items":{"type":"string","enum":["platform.ai","server.monitor","platform.app_control","platform.broadcast","platform.companies","platform.phones.location","platform.admins","platform.notifications","platform.zenhr","platform.flash_messages","platform.server_switch","platform.app_debug","platform.backups","platform.backups_change","platform.backups_run"]},"nullable":true,"description":"sometimes|nullable|array"},"grant":{"type":"string","enum":["platform.ai","server.monitor","platform.app_control","platform.broadcast","platform.companies","platform.phones.location","platform.admins","platform.notifications","platform.zenhr","platform.flash_messages","platform.server_switch","platform.app_debug","platform.backups","platform.backups_change","platform.backups_run"],"description":"sometimes|string|in:platform.ai,server.monitor,platform.app_control,platform.broadcast,platform.companies,platform.phones.location,platform.admins,platform.notifications,platform.zenhr,platform.flash_messages,platform.server_switch,platform.app_debug,platform.backups,platform.backups_change,platform.backups_run"},"revoke":{"type":"string","enum":["platform.ai","server.monitor","platform.app_control","platform.broadcast","platform.companies","platform.phones.location","platform.admins","platform.notifications","platform.zenhr","platform.flash_messages","platform.server_switch","platform.app_debug","platform.backups","platform.backups_change","platform.backups_run"],"description":"sometimes|string|in:platform.ai,server.monitor,platform.app_control,platform.broadcast,platform.companies,platform.phones.location,platform.admins,platform.notifications,platform.zenhr,platform.flash_messages,platform.server_switch,platform.app_debug,platform.backups,platform.backups_change,platform.backups_run"}},"required":["name"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["platform: platform-admins"],"operationId":"platform_platform_admins_destroy","summary":"Removes the admin access","description":"Removes the admin access: no panel, no permissions, platform API keys revoked, signed out.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"platform_admin","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/security":{"get":{"tags":["platform: security"],"operationId":"platform_security_show","summary":"GET /api/v1/platform/security","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: security"],"operationId":"platform_security_update","summary":"PATCH /api/v1/platform/security","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/seo":{"get":{"tags":["platform: seo"],"operationId":"platform_seo_show","summary":"GET /api/v1/platform/seo","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/seo/settings":{"patch":{"tags":["platform: seo"],"operationId":"platform_seo_settings_update","summary":"PATCH /api/v1/platform/seo/settings","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/seo/robots":{"patch":{"tags":["platform: seo"],"operationId":"platform_seo_robots_update","summary":"PATCH /api/v1/platform/seo/robots","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/seo/pages/{key}":{"get":{"tags":["platform: seo"],"operationId":"platform_seo_pages_show","summary":"GET /api/v1/platform/seo/pages/{key}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z]+\\.[a-z-]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: seo"],"operationId":"platform_seo_pages_update","summary":"PATCH /api/v1/platform/seo/pages/{key}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z]+\\.[a-z-]+$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/server-switch":{"get":{"tags":["platform: server-switch"],"operationId":"platform_server_switch_show","summary":"GET server-switch","description":"GET server-switch: the app's live/dev switch {on, until, by, at} (docs/mobile-server-switch.md).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["platform: server-switch"],"operationId":"platform_server_switch_update","summary":"PUT server-switch","description":"PUT server-switch: on (boolean); hours (1\u2013168, default 24; null = no end) for how long it stays on.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/sign-in-options":{"get":{"tags":["platform: sign-in-options"],"operationId":"platform_sign_in_options_show","summary":"The sign-in screen switches {forgot_password, sso, privacy}, with meta.last_change {by, at} (null = defaults).","description":"The sign-in screen switches {forgot_password, sso, privacy}, with meta.last_change {by, at} (null = defaults).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: sign-in-options"],"operationId":"platform_sign_in_options_update","summary":"forgot_password, sso, privacy (booleans)","description":"forgot_password, sso, privacy (booleans): any of them; the rest keep their value.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/settings":{"get":{"tags":["platform: site"],"operationId":"platform_site_settings","summary":"GET /api/v1/platform/site/settings","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: site"],"operationId":"platform_site_settings_update","summary":"PATCH /api/v1/platform/site/settings","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/calculators":{"get":{"tags":["platform: site"],"operationId":"platform_site_calculators","summary":"A country's rates in force (Iraq by default, ?country= and ?variant= for another).","description":"A country's rates in force (Iraq by default, ?country= and ?variant= for another).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: site"],"operationId":"platform_site_calculators_update","summary":"PATCH /api/v1/platform/site/calculators","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/plans":{"get":{"tags":["platform: site"],"operationId":"platform_site_plans","summary":"GET /api/v1/platform/site/plans","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: site"],"operationId":"platform_site_plans_store","summary":"POST /api/v1/platform/site/plans","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/plans/{plan}":{"patch":{"tags":["platform: site"],"operationId":"platform_site_plans_update","summary":"PATCH /api/v1/platform/site/plans/{plan}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"plan","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["platform: site"],"operationId":"platform_site_plans_destroy","summary":"DELETE /api/v1/platform/site/plans/{plan}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"plan","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/plans/{plan}/move/{direction}":{"post":{"tags":["platform: site"],"operationId":"platform_site_plans_move","summary":"POST /api/v1/platform/site/plans/{plan}/move/{direction}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"plan","in":"path","required":true,"schema":{"type":"string"}},{"name":"direction","in":"path","required":true,"schema":{"type":"string","pattern":"^up|down$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/section-types":{"get":{"tags":["platform: site"],"operationId":"platform_site_section_types","summary":"GET /api/v1/platform/site/section-types","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/pages/{page}/sections":{"get":{"tags":["platform: site"],"operationId":"platform_site_sections","summary":"GET /api/v1/platform/site/pages/{page}/sections","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: site"],"operationId":"platform_site_sections_store","summary":"POST /api/v1/platform/site/pages/{page}/sections","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"page","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","description":"required|string"}},"required":["type"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/sections/{section}":{"patch":{"tags":["platform: site"],"operationId":"platform_site_sections_update","summary":"PATCH /api/v1/platform/site/sections/{section}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"section","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["platform: site"],"operationId":"platform_site_sections_destroy","summary":"DELETE /api/v1/platform/site/sections/{section}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"section","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/sections/{section}/move/{direction}":{"post":{"tags":["platform: site"],"operationId":"platform_site_sections_move","summary":"POST /api/v1/platform/site/sections/{section}/move/{direction}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"section","in":"path","required":true,"schema":{"type":"string"}},{"name":"direction","in":"path","required":true,"schema":{"type":"string","pattern":"^up|down$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/offices":{"get":{"tags":["platform: site"],"operationId":"platform_site_offices","summary":"GET /api/v1/platform/site/offices","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: site"],"operationId":"platform_site_offices_store","summary":"POST /api/v1/platform/site/offices","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/offices/{office}":{"patch":{"tags":["platform: site"],"operationId":"platform_site_offices_update","summary":"PATCH /api/v1/platform/site/offices/{office}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"office","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["platform: site"],"operationId":"platform_site_offices_destroy","summary":"DELETE /api/v1/platform/site/offices/{office}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"office","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/offices/{office}/move/{direction}":{"post":{"tags":["platform: site"],"operationId":"platform_site_offices_move","summary":"POST /api/v1/platform/site/offices/{office}/move/{direction}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"office","in":"path","required":true,"schema":{"type":"string"}},{"name":"direction","in":"path","required":true,"schema":{"type":"string","pattern":"^up|down$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/site/contact-settings":{"get":{"tags":["platform: site"],"operationId":"platform_site_contact_settings","summary":"GET /api/v1/platform/site/contact-settings","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: site"],"operationId":"platform_site_contact_settings_update","summary":"PATCH /api/v1/platform/site/contact-settings","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/support-sessions":{"get":{"tags":["platform: support-sessions"],"operationId":"platform_companies_support_sessions_index","summary":"GET /api/v1/platform/companies/{company}/support-sessions","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: support-sessions"],"operationId":"platform_companies_support_sessions_store","summary":"POST /api/v1/platform/companies/{company}/support-sessions","description":"10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":"string","description":"required|string|min:5|'max:' . \\App\\Support\\Limits::chars(500)"}},"required":["reason"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/support-sessions/{supportSession}":{"delete":{"tags":["platform: support-sessions"],"operationId":"platform_support_sessions_destroy","summary":"DELETE /api/v1/platform/support-sessions/{supportSession}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"supportSession","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/system-announcements":{"get":{"tags":["platform: system-announcements"],"operationId":"platform_system_announcements_index","summary":"?state=live|scheduled|ended|off","description":"?state=live|scheduled|ended|off\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"state","in":"query","required":false,"schema":{"type":"string","enum":["live","scheduled","ended","off"],"nullable":true},"description":"nullable|in:live,scheduled,ended,off"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","nullable":true},"description":"nullable|integer|min:1|'max:' . \\App\\Support\\Limits::pageMax(100)"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: system-announcements"],"operationId":"platform_system_announcements_store","summary":"POST /api/v1/platform/system-announcements","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/system-announcements/{announcement}":{"get":{"tags":["platform: system-announcements"],"operationId":"platform_system_announcements_show","summary":"GET /api/v1/platform/system-announcements/{announcement}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"announcement","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"patch":{"tags":["platform: system-announcements"],"operationId":"platform_system_announcements_update","summary":"PATCH /api/v1/platform/system-announcements/{announcement}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"announcement","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"delete":{"tags":["platform: system-announcements"],"operationId":"platform_system_announcements_destroy","summary":"Only one nobody has seen yet (422 otherwise","description":"Only one nobody has seen yet (422 otherwise: switch it off with is_active false instead).\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"announcement","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/users":{"get":{"tags":["platform: users"],"operationId":"platform_companies_users_index","summary":"The company's accounts","description":"The company's accounts: q (name or email), role (admin, user), status (active, temporary, disabled), sort (name, email, role, status, joined) and dir. With per_page (10, 25, 50, 100) one page and its meta; without, all of them.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/users/{user}/reset-password":{"post":{"tags":["platform: users"],"operationId":"platform_companies_users_reset_password","summary":"POST /api/v1/platform/companies/{company}/users/{user}/reset-password","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"user","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/users/{user}/contact":{"put":{"tags":["platform: users"],"operationId":"platform_companies_users_contact","summary":"PUT /api/v1/platform/companies/{company}/users/{user}/contact","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"user","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/users/{user}/unlock":{"post":{"tags":["platform: users"],"operationId":"platform_companies_users_unlock","summary":"POST /api/v1/platform/companies/{company}/users/{user}/unlock","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"user","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/users/{user}/two-factor/reset":{"post":{"tags":["platform: users"],"operationId":"platform_companies_users_two_factor_reset","summary":"POST /api/v1/platform/companies/{company}/users/{user}/two-factor/reset","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"user","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/users/{user}/access":{"patch":{"tags":["platform: users"],"operationId":"platform_companies_users_access","summary":"Switches the account on or off (is_active) and makes it a company admin or not (is_owner); platform.companies.","description":"Switches the account on or off (is_active) and makes it a company admin or not (is_owner); platform.companies.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"user","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"is_active":{"type":"boolean","description":"sometimes|boolean"},"is_owner":{"type":"boolean","description":"sometimes|boolean"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/zenhr-sync/emergency-stop":{"put":{"tags":["platform: zenhr-sync"],"operationId":"platform_zenhr_sync_emergency","summary":"Stops every company's sync, or lifts that.","description":"Stops every company's sync, or lifts that.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"on":{"type":"boolean","description":"required|boolean"}},"required":["on"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync":{"get":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_show","summary":"GET /api/v1/platform/companies/{company}/zenhr-sync","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/switch":{"put":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_switch","summary":"On or off for this company (\"off\" when the move to Mihnaro is final).","description":"On or off for this company (\"off\" when the move to Mihnaro is final). A run in progress stops at its next safe place.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean","description":"required|boolean"}},"required":["enabled"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/health":{"get":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_health","summary":"GET /api/v1/platform/companies/{company}/zenhr-sync/health","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/runs":{"get":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_runs_index","summary":"GET /api/v1/platform/companies/{company}/zenhr-sync/runs","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"sometimes|string"},{"name":"trigger","in":"query","required":false,"schema":{"type":"string"},"description":"sometimes|string"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer"},"description":"sometimes|integer|min:1|'max:' . \\App\\Support\\Limits::pageMax(100)"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_runs_store","summary":"Queues a run for the runner (it can take minutes); one at a time, whoever started it.","description":"Queues a run for the runner (it can take minutes); one at a time, whoever started it.\n\n6 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":6,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"source":{"type":"string","enum":["api","extraction"],"description":"sometimes|in:api,extraction"},"dry_run":{"type":"boolean","description":"sometimes|boolean"},"data_types":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"sometimes|array"},"branch_ids":{"type":"array","items":{"__PHP_Incomplete_Class_Name":"stdClass"},"description":"sometimes|array"},"since":{"type":"string","format":"date","nullable":true,"description":"sometimes|nullable|date"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/runs/{run}":{"get":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_runs_show","summary":"GET /api/v1/platform/companies/{company}/zenhr-sync/runs/{run}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/runs/{run}/items":{"get":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_runs_items","summary":"The records a run touched","description":"The records a run touched: table, reference and column names, never values.\n\n120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"query","required":false,"schema":{"type":"string","enum":["inserted","updated","flagged"]},"description":"sometimes|in:inserted,updated,flagged"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer"},"description":"sometimes|integer|min:1|'max:' . \\App\\Support\\Limits::pageMax(200)"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/runs/{run}/stop":{"post":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_runs_stop","summary":"POST /api/v1/platform/companies/{company}/zenhr-sync/runs/{run}/stop","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/runs/{run}/resume":{"post":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_runs_resume","summary":"POST /api/v1/platform/companies/{company}/zenhr-sync/runs/{run}/resume","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"run","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/conflicts":{"get":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_conflicts_index","summary":"GET /api/v1/platform/companies/{company}/zenhr-sync/conflicts","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["open","applied","kept","all"]},"description":"sometimes|in:open,applied,kept,all"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"sometimes|integer|min:1|'max:' . \\App\\Support\\Limits::cap(200)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"},"description":"sometimes|integer|min:0"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/conflicts/{conflict}/{action}":{"post":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_conflicts_resolve","summary":"POST /api/v1/platform/companies/{company}/zenhr-sync/conflicts/{conflict}/{action}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"conflict","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"path","required":true,"schema":{"type":"string","pattern":"^apply|keep$"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/connection":{"get":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_connection_show","summary":"GET /api/v1/platform/companies/{company}/zenhr-sync/connection","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"put":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_connection_update","summary":"Takes the keys as the screen does, and never returns them.","description":"Takes the keys as the screen does, and never returns them.\n\n20 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":20,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/connection/authorize":{"post":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_connection_authorize","summary":"POST /api/v1/platform/companies/{company}/zenhr-sync/connection/authorize","description":"10 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":10,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","description":"required|string|max:2000"}},"required":["code"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/connection/test":{"post":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_connection_test","summary":"POST /api/v1/platform/companies/{company}/zenhr-sync/connection/test","description":"6 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":6,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/branches/{branch}/link":{"post":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_branches_link","summary":"POST /api/v1/platform/companies/{company}/zenhr-sync/branches/{branch}/link","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/branches/{branch}/switch":{"put":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_branches_switch","summary":"PUT /api/v1/platform/companies/{company}/zenhr-sync/branches/{branch}/switch","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"branch","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean","description":"required|boolean"}},"required":["enabled"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/data-types":{"get":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_data_types_index","summary":"GET /api/v1/platform/companies/{company}/zenhr-sync/data-types","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/data-types/{type}":{"put":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_data_types_update","summary":"PUT /api/v1/platform/companies/{company}/zenhr-sync/data-types/{type}","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"path","required":true,"schema":{"type":"string"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"branch_id":{"type":"integer","nullable":true,"description":"sometimes|nullable|integer"},"enabled":{"type":"boolean","description":"sometimes|boolean"},"frequency":{"type":"string","nullable":true,"description":"sometimes|nullable|string"},"starting_from":{"type":"string","format":"date","nullable":true,"description":"sometimes|nullable|date"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/totals":{"get":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_totals","summary":"GET /api/v1/platform/companies/{company}/zenhr-sync/totals","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/payroll-compare":{"get":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_payroll_compare_show","summary":"GET /api/v1/platform/companies/{company}/zenhr-sync/payroll-compare","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}},"post":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_payroll_compare_store","summary":"POST /api/v1/platform/companies/{company}/zenhr-sync/payroll-compare","description":"6 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":6,"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","properties":{"months":{"type":"integer","description":"sometimes|integer|min:1|max:12"}}}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/platform/companies/{company}/zenhr-sync/audit":{"get":{"tags":["platform: zenhr-sync"],"operationId":"platform_companies_zenhr_sync_audit","summary":"GET /api/v1/platform/companies/{company}/zenhr-sync/audit","description":"120 requests a minute.","security":[{"bearer":[]}],"parameters":[{"name":"company","in":"path","required":true,"schema":{"type":"integer"}},{"name":"action","in":"query","required":false,"schema":{"type":"string"},"description":"sometimes|string|max:40"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer"},"description":"sometimes|integer|min:1|'max:' . \\App\\Support\\Limits::pageMax(100)"}],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":120,"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}},"/biometric/punches":{"post":{"tags":["device: biometric"],"operationId":"biometric_punches","summary":"POST {\"punches\":[{\"pin\":\"12\",\"time\":\"2026-10-19 08:03:00\"}]} with the header X-Device-Token.","description":"POST {\"punches\":[{\"pin\":\"12\",\"time\":\"2026-10-19 08:03:00\"}]} with the header X-Device-Token.\n\n600 requests a minute.","security":[{"deviceToken":[]}],"parameters":[],"x-permissions":[],"x-modules":[],"x-rate-limit-per-minute":600,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"punches":{"type":"array","items":{"type":"object","properties":{"pin":{"type":"string","description":"required|string|max:32"},"time":{"type":"string","format":"date","description":"required|date"},"status":{"type":"string","nullable":true,"description":"nullable|string|max:8"}}},"description":"required|array|max:2000"}},"required":["punches"]}}}},"responses":{"2XX":{"description":"Success. JSON with data (and meta on lists), or a file for downloads."},"401":{"$ref":"#/components/responses/Unauthenticated"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationError"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"An app token from POST /app/token, a company API key (mhk_\u2026), or a platform admin's key for /platform."},"deviceToken":{"type":"apiKey","in":"header","name":"X-Device-Token","description":"The fingerprint machine's token."}},"schemas":{"Error":{"type":"object","required":["message"],"properties":{"message":{"type":"string"},"code":{"type":"string","description":"A machine-readable reason, e.g. invalid_api_key, forbidden, password_change_required, branch_forbidden, update_required."}}},"ValidationError":{"type":"object","required":["message","errors"],"properties":{"message":{"type":"string"},"code":{"type":"string"},"errors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}}},"responses":{"Unauthenticated":{"description":"No token, or an invalid, expired or revoked one.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"Not allowed: the permission, the license, the company or branch, or the API key's limits.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"No such record, or not one this person may see.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"ValidationError":{"description":"The data is not valid: a message per field in errors.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationError"}}}},"TooManyRequests":{"description":"Over the rate limit. Wait for the seconds in Retry-After.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}}