# ⚙️ Services

Service catalog and offerings management

## List services

> Get a paginated list of services with optional filters

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Services","description":"Service catalog and offerings management"}],"servers":[{"url":"https://skhokho.ai","description":"Production"},{"url":"http://102.209.118.152:8000/","description":"Local"},{"url":"https://dev.skhokho.ai","description":"Development"}],"security":[{"cookieAuth":[]},{"basicAuth":[]}],"components":{"securitySchemes":{"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"ServiceList":{"type":"object","description":"Lightweight serializer for service lists.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","readOnly":true},"short_description":{"type":"string","readOnly":true},"service_code":{"type":"string","nullable":true,"maxLength":100},"service_type":{"enum":["hourly","fixed","subscription","project","consultation","maintenance","other"],"type":"string","description":"* `hourly` - Hourly Service\n* `fixed` - Fixed Price Service\n* `subscription` - Subscription Service\n* `project` - Project-based Service\n* `consultation` - Consultation Service\n* `maintenance` - Maintenance Service\n* `other` - Other"},"category":{"type":"string","nullable":true,"maxLength":200},"hourly_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Rate per hour for hourly services"},"fixed_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Fixed price for the service"},"effective_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$","nullable":true,"readOnly":true},"billing_cycle":{"enum":["one_time","hourly","daily","weekly","monthly","quarterly","annually"],"type":"string","description":"* `one_time` - One Time\n* `hourly` - Hourly\n* `daily` - Daily\n* `weekly` - Weekly\n* `monthly` - Monthly\n* `quarterly` - Quarterly\n* `annually` - Annually"},"status":{"enum":["active","inactive","discontinued"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued"},"date_created":{"type":"string","format":"date-time","nullable":true}},"required":["effective_rate","name","short_description"]}}},"paths":{"/api/v1.0/organisation/{org_uid}/services/":{"get":{"operationId":"organisation_services_list","description":"Get a paginated list of services with optional filters","summary":"List services","parameters":[{"in":"path","name":"org_uid","schema":{"type":"string"},"required":true}],"tags":["Services"],"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ServiceList"}}}},"description":""},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}}}}}}
```

## Create service

> Create a new service. service\_type is required and must be one of: hourly, fixed, subscription, project, consultation, maintenance, or other.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Services","description":"Service catalog and offerings management"}],"servers":[{"url":"https://skhokho.ai","description":"Production"},{"url":"http://102.209.118.152:8000/","description":"Local"},{"url":"https://dev.skhokho.ai","description":"Development"}],"security":[{"cookieAuth":[]},{"basicAuth":[]}],"components":{"securitySchemes":{"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"ServiceRequest":{"type":"object","description":"Full serializer for Service creation and updates.\nHandles translatable fields correctly.","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"description":{"type":"string","nullable":true},"short_description":{"type":"string","nullable":true,"maxLength":500},"service_code":{"type":"string","nullable":true,"maxLength":100},"service_type":{"enum":["hourly","fixed","subscription","project","consultation","maintenance","other"],"type":"string","description":"Service type: hourly, fixed, subscription, project, consultation, maintenance, or other\n\n* `hourly` - Hourly Service\n* `fixed` - Fixed Price Service\n* `subscription` - Subscription Service\n* `project` - Project-based Service\n* `consultation` - Consultation Service\n* `maintenance` - Maintenance Service\n* `other` - Other"},"category":{"type":"string","nullable":true,"maxLength":200},"hourly_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Rate per hour for hourly services"},"fixed_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Fixed price for the service"},"billing_cycle":{"enum":["one_time","hourly","daily","weekly","monthly","quarterly","annually"],"type":"string","description":"* `one_time` - One Time\n* `hourly` - Hourly\n* `daily` - Daily\n* `weekly` - Weekly\n* `monthly` - Monthly\n* `quarterly` - Quarterly\n* `annually` - Annually"},"estimated_duration_hours":{"type":"string","format":"decimal","pattern":"^-?\\d{0,6}(?:\\.\\d{0,2})?$","nullable":true,"title":"Estimated Duration (Hours)","description":"Estimated time to complete the service"},"status":{"enum":["active","inactive","discontinued"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued"},"requirements":{"type":"string","nullable":true}},"required":["name","service_type"]},"ServiceDetail":{"type":"object","description":"Detailed serializer for single service retrieval.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","readOnly":true},"description":{"type":"string","readOnly":true},"short_description":{"type":"string","readOnly":true},"service_code":{"type":"string","nullable":true,"maxLength":100},"service_type":{"enum":["hourly","fixed","subscription","project","consultation","maintenance","other"],"type":"string","description":"* `hourly` - Hourly Service\n* `fixed` - Fixed Price Service\n* `subscription` - Subscription Service\n* `project` - Project-based Service\n* `consultation` - Consultation Service\n* `maintenance` - Maintenance Service\n* `other` - Other"},"category":{"type":"string","nullable":true,"maxLength":200},"hourly_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Rate per hour for hourly services"},"fixed_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Fixed price for the service"},"effective_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$","nullable":true,"readOnly":true},"billing_cycle":{"enum":["one_time","hourly","daily","weekly","monthly","quarterly","annually"],"type":"string","description":"* `one_time` - One Time\n* `hourly` - Hourly\n* `daily` - Daily\n* `weekly` - Weekly\n* `monthly` - Monthly\n* `quarterly` - Quarterly\n* `annually` - Annually"},"estimated_duration_hours":{"type":"string","format":"decimal","pattern":"^-?\\d{0,6}(?:\\.\\d{0,2})?$","nullable":true,"title":"Estimated Duration (Hours)","description":"Estimated time to complete the service"},"status":{"enum":["active","inactive","discontinued"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued"},"requirements":{"type":"string","nullable":true},"created_by":{"allOf":[{"$ref":"#/components/schemas/ServicePersonMini"}],"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by","description","effective_rate","name","short_description"]},"ServicePersonMini":{"type":"object","description":"Lightweight serializer for Person references.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"full_name":{"type":"string","nullable":true,"readOnly":true}},"required":["full_name"]}}},"paths":{"/api/v1.0/organisation/{org_uid}/services/create/":{"post":{"operationId":"organisation_services_create_create","description":"Create a new service. service_type is required and must be one of: hourly, fixed, subscription, project, consultation, maintenance, or other.","summary":"Create service","parameters":[{"in":"path","name":"org_uid","schema":{"type":"string"},"required":true}],"tags":["Services"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ServiceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ServiceRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceDetail"}}},"description":""},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}}}}}}
```

## Retrieve service

> Get detailed information about a specific service

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Services","description":"Service catalog and offerings management"}],"servers":[{"url":"https://skhokho.ai","description":"Production"},{"url":"http://102.209.118.152:8000/","description":"Local"},{"url":"https://dev.skhokho.ai","description":"Development"}],"security":[{"cookieAuth":[]},{"basicAuth":[]}],"components":{"securitySchemes":{"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"ServiceDetail":{"type":"object","description":"Detailed serializer for single service retrieval.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","readOnly":true},"description":{"type":"string","readOnly":true},"short_description":{"type":"string","readOnly":true},"service_code":{"type":"string","nullable":true,"maxLength":100},"service_type":{"enum":["hourly","fixed","subscription","project","consultation","maintenance","other"],"type":"string","description":"* `hourly` - Hourly Service\n* `fixed` - Fixed Price Service\n* `subscription` - Subscription Service\n* `project` - Project-based Service\n* `consultation` - Consultation Service\n* `maintenance` - Maintenance Service\n* `other` - Other"},"category":{"type":"string","nullable":true,"maxLength":200},"hourly_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Rate per hour for hourly services"},"fixed_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Fixed price for the service"},"effective_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$","nullable":true,"readOnly":true},"billing_cycle":{"enum":["one_time","hourly","daily","weekly","monthly","quarterly","annually"],"type":"string","description":"* `one_time` - One Time\n* `hourly` - Hourly\n* `daily` - Daily\n* `weekly` - Weekly\n* `monthly` - Monthly\n* `quarterly` - Quarterly\n* `annually` - Annually"},"estimated_duration_hours":{"type":"string","format":"decimal","pattern":"^-?\\d{0,6}(?:\\.\\d{0,2})?$","nullable":true,"title":"Estimated Duration (Hours)","description":"Estimated time to complete the service"},"status":{"enum":["active","inactive","discontinued"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued"},"requirements":{"type":"string","nullable":true},"created_by":{"allOf":[{"$ref":"#/components/schemas/ServicePersonMini"}],"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by","description","effective_rate","name","short_description"]},"ServicePersonMini":{"type":"object","description":"Lightweight serializer for Person references.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"full_name":{"type":"string","nullable":true,"readOnly":true}},"required":["full_name"]}}},"paths":{"/api/v1.0/organisation/{org_uid}/services/{unique_id}/":{"get":{"operationId":"organisation_services_retrieve","description":"Get detailed information about a specific service","summary":"Retrieve service","parameters":[{"in":"path","name":"org_uid","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Services"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceDetail"}}},"description":""},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```

## Update service

> Update service information (PUT for full update, PATCH for partial)

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Services","description":"Service catalog and offerings management"}],"servers":[{"url":"https://skhokho.ai","description":"Production"},{"url":"http://102.209.118.152:8000/","description":"Local"},{"url":"https://dev.skhokho.ai","description":"Development"}],"security":[{"cookieAuth":[]},{"basicAuth":[]}],"components":{"securitySchemes":{"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"ServiceRequest":{"type":"object","description":"Full serializer for Service creation and updates.\nHandles translatable fields correctly.","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"description":{"type":"string","nullable":true},"short_description":{"type":"string","nullable":true,"maxLength":500},"service_code":{"type":"string","nullable":true,"maxLength":100},"service_type":{"enum":["hourly","fixed","subscription","project","consultation","maintenance","other"],"type":"string","description":"Service type: hourly, fixed, subscription, project, consultation, maintenance, or other\n\n* `hourly` - Hourly Service\n* `fixed` - Fixed Price Service\n* `subscription` - Subscription Service\n* `project` - Project-based Service\n* `consultation` - Consultation Service\n* `maintenance` - Maintenance Service\n* `other` - Other"},"category":{"type":"string","nullable":true,"maxLength":200},"hourly_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Rate per hour for hourly services"},"fixed_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Fixed price for the service"},"billing_cycle":{"enum":["one_time","hourly","daily","weekly","monthly","quarterly","annually"],"type":"string","description":"* `one_time` - One Time\n* `hourly` - Hourly\n* `daily` - Daily\n* `weekly` - Weekly\n* `monthly` - Monthly\n* `quarterly` - Quarterly\n* `annually` - Annually"},"estimated_duration_hours":{"type":"string","format":"decimal","pattern":"^-?\\d{0,6}(?:\\.\\d{0,2})?$","nullable":true,"title":"Estimated Duration (Hours)","description":"Estimated time to complete the service"},"status":{"enum":["active","inactive","discontinued"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued"},"requirements":{"type":"string","nullable":true}},"required":["name","service_type"]},"ServiceDetail":{"type":"object","description":"Detailed serializer for single service retrieval.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","readOnly":true},"description":{"type":"string","readOnly":true},"short_description":{"type":"string","readOnly":true},"service_code":{"type":"string","nullable":true,"maxLength":100},"service_type":{"enum":["hourly","fixed","subscription","project","consultation","maintenance","other"],"type":"string","description":"* `hourly` - Hourly Service\n* `fixed` - Fixed Price Service\n* `subscription` - Subscription Service\n* `project` - Project-based Service\n* `consultation` - Consultation Service\n* `maintenance` - Maintenance Service\n* `other` - Other"},"category":{"type":"string","nullable":true,"maxLength":200},"hourly_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Rate per hour for hourly services"},"fixed_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Fixed price for the service"},"effective_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$","nullable":true,"readOnly":true},"billing_cycle":{"enum":["one_time","hourly","daily","weekly","monthly","quarterly","annually"],"type":"string","description":"* `one_time` - One Time\n* `hourly` - Hourly\n* `daily` - Daily\n* `weekly` - Weekly\n* `monthly` - Monthly\n* `quarterly` - Quarterly\n* `annually` - Annually"},"estimated_duration_hours":{"type":"string","format":"decimal","pattern":"^-?\\d{0,6}(?:\\.\\d{0,2})?$","nullable":true,"title":"Estimated Duration (Hours)","description":"Estimated time to complete the service"},"status":{"enum":["active","inactive","discontinued"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued"},"requirements":{"type":"string","nullable":true},"created_by":{"allOf":[{"$ref":"#/components/schemas/ServicePersonMini"}],"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by","description","effective_rate","name","short_description"]},"ServicePersonMini":{"type":"object","description":"Lightweight serializer for Person references.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"full_name":{"type":"string","nullable":true,"readOnly":true}},"required":["full_name"]}}},"paths":{"/api/v1.0/organisation/{org_uid}/services/{unique_id}/update/":{"put":{"operationId":"organisation_services_update_update","description":"Update service information (PUT for full update, PATCH for partial)","summary":"Update service","parameters":[{"in":"path","name":"org_uid","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Services"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ServiceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ServiceRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceDetail"}}},"description":""},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```

## Update service

> Update service information (PUT for full update, PATCH for partial)

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Services","description":"Service catalog and offerings management"}],"servers":[{"url":"https://skhokho.ai","description":"Production"},{"url":"http://102.209.118.152:8000/","description":"Local"},{"url":"https://dev.skhokho.ai","description":"Development"}],"security":[{"cookieAuth":[]},{"basicAuth":[]}],"components":{"securitySchemes":{"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"PatchedServiceRequest":{"type":"object","description":"Full serializer for Service creation and updates.\nHandles translatable fields correctly.","properties":{"name":{"type":"string","minLength":1,"maxLength":300},"description":{"type":"string","nullable":true},"short_description":{"type":"string","nullable":true,"maxLength":500},"service_code":{"type":"string","nullable":true,"maxLength":100},"service_type":{"enum":["hourly","fixed","subscription","project","consultation","maintenance","other"],"type":"string","description":"Service type: hourly, fixed, subscription, project, consultation, maintenance, or other\n\n* `hourly` - Hourly Service\n* `fixed` - Fixed Price Service\n* `subscription` - Subscription Service\n* `project` - Project-based Service\n* `consultation` - Consultation Service\n* `maintenance` - Maintenance Service\n* `other` - Other"},"category":{"type":"string","nullable":true,"maxLength":200},"hourly_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Rate per hour for hourly services"},"fixed_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Fixed price for the service"},"billing_cycle":{"enum":["one_time","hourly","daily","weekly","monthly","quarterly","annually"],"type":"string","description":"* `one_time` - One Time\n* `hourly` - Hourly\n* `daily` - Daily\n* `weekly` - Weekly\n* `monthly` - Monthly\n* `quarterly` - Quarterly\n* `annually` - Annually"},"estimated_duration_hours":{"type":"string","format":"decimal","pattern":"^-?\\d{0,6}(?:\\.\\d{0,2})?$","nullable":true,"title":"Estimated Duration (Hours)","description":"Estimated time to complete the service"},"status":{"enum":["active","inactive","discontinued"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued"},"requirements":{"type":"string","nullable":true}}},"ServiceDetail":{"type":"object","description":"Detailed serializer for single service retrieval.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","readOnly":true},"description":{"type":"string","readOnly":true},"short_description":{"type":"string","readOnly":true},"service_code":{"type":"string","nullable":true,"maxLength":100},"service_type":{"enum":["hourly","fixed","subscription","project","consultation","maintenance","other"],"type":"string","description":"* `hourly` - Hourly Service\n* `fixed` - Fixed Price Service\n* `subscription` - Subscription Service\n* `project` - Project-based Service\n* `consultation` - Consultation Service\n* `maintenance` - Maintenance Service\n* `other` - Other"},"category":{"type":"string","nullable":true,"maxLength":200},"hourly_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Rate per hour for hourly services"},"fixed_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Fixed price for the service"},"effective_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$","nullable":true,"readOnly":true},"billing_cycle":{"enum":["one_time","hourly","daily","weekly","monthly","quarterly","annually"],"type":"string","description":"* `one_time` - One Time\n* `hourly` - Hourly\n* `daily` - Daily\n* `weekly` - Weekly\n* `monthly` - Monthly\n* `quarterly` - Quarterly\n* `annually` - Annually"},"estimated_duration_hours":{"type":"string","format":"decimal","pattern":"^-?\\d{0,6}(?:\\.\\d{0,2})?$","nullable":true,"title":"Estimated Duration (Hours)","description":"Estimated time to complete the service"},"status":{"enum":["active","inactive","discontinued"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued"},"requirements":{"type":"string","nullable":true},"created_by":{"allOf":[{"$ref":"#/components/schemas/ServicePersonMini"}],"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by","description","effective_rate","name","short_description"]},"ServicePersonMini":{"type":"object","description":"Lightweight serializer for Person references.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"full_name":{"type":"string","nullable":true,"readOnly":true}},"required":["full_name"]}}},"paths":{"/api/v1.0/organisation/{org_uid}/services/{unique_id}/update/":{"patch":{"operationId":"organisation_services_update_partial_update","description":"Update service information (PUT for full update, PATCH for partial)","summary":"Update service","parameters":[{"in":"path","name":"org_uid","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Services"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedServiceRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedServiceRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedServiceRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceDetail"}}},"description":""},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```

## Perform action on service

> Perform actions on a service (duplicate, deactivate). Uses query parameters.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Services","description":"Service catalog and offerings management"}],"servers":[{"url":"https://skhokho.ai","description":"Production"},{"url":"http://102.209.118.152:8000/","description":"Local"},{"url":"https://dev.skhokho.ai","description":"Development"}],"security":[{"cookieAuth":[]},{"basicAuth":[]}],"components":{"securitySchemes":{"cookieAuth":{"type":"apiKey","in":"cookie","name":"sessionid"},"basicAuth":{"type":"http","scheme":"basic"}},"schemas":{"ServiceDetail":{"type":"object","description":"Detailed serializer for single service retrieval.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","readOnly":true},"description":{"type":"string","readOnly":true},"short_description":{"type":"string","readOnly":true},"service_code":{"type":"string","nullable":true,"maxLength":100},"service_type":{"enum":["hourly","fixed","subscription","project","consultation","maintenance","other"],"type":"string","description":"* `hourly` - Hourly Service\n* `fixed` - Fixed Price Service\n* `subscription` - Subscription Service\n* `project` - Project-based Service\n* `consultation` - Consultation Service\n* `maintenance` - Maintenance Service\n* `other` - Other"},"category":{"type":"string","nullable":true,"maxLength":200},"hourly_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Rate per hour for hourly services"},"fixed_price":{"type":"string","format":"decimal","pattern":"^-?\\d{0,13}(?:\\.\\d{0,2})?$","nullable":true,"description":"Fixed price for the service"},"effective_rate":{"type":"string","format":"decimal","pattern":"^-?\\d{0,8}(?:\\.\\d{0,2})?$","nullable":true,"readOnly":true},"billing_cycle":{"enum":["one_time","hourly","daily","weekly","monthly","quarterly","annually"],"type":"string","description":"* `one_time` - One Time\n* `hourly` - Hourly\n* `daily` - Daily\n* `weekly` - Weekly\n* `monthly` - Monthly\n* `quarterly` - Quarterly\n* `annually` - Annually"},"estimated_duration_hours":{"type":"string","format":"decimal","pattern":"^-?\\d{0,6}(?:\\.\\d{0,2})?$","nullable":true,"title":"Estimated Duration (Hours)","description":"Estimated time to complete the service"},"status":{"enum":["active","inactive","discontinued"],"type":"string","description":"* `active` - Active\n* `inactive` - Inactive\n* `discontinued` - Discontinued"},"requirements":{"type":"string","nullable":true},"created_by":{"allOf":[{"$ref":"#/components/schemas/ServicePersonMini"}],"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by","description","effective_rate","name","short_description"]},"ServicePersonMini":{"type":"object","description":"Lightweight serializer for Person references.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"full_name":{"type":"string","nullable":true,"readOnly":true}},"required":["full_name"]}}},"paths":{"/api/v1.0/organisation/{org_uid}/services/{unique_id}/action/":{"get":{"operationId":"organisation_services_action_retrieve","description":"Perform actions on a service (duplicate, deactivate). Uses query parameters.","summary":"Perform action on service","parameters":[{"in":"query","name":"action","schema":{"type":"string","enum":["deactivate","duplicate"]},"description":"Action to perform: duplicate or deactivate","required":true},{"in":"path","name":"org_uid","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Services"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceDetail"}}},"description":""},"400":{"description":"Bad Request - Invalid action"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.skhokho.ai/assets/services.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
