> For the complete documentation index, see [llms.txt](https://docs.skhokho.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.skhokho.ai/organization/contact-groups.md).

# 📁 Contact Groups

Organize contacts into groups and categories

## Create contact group

> Create a new contact group in the organisation. Group Name is required.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contact Groups","description":"Organize contacts into groups and categories"}],"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":{"ContactGroupRequest":{"type":"object","description":"Serializer for ContactGroup model supporting both creation and listing.\nHandles multilingual fields through parler TranslatableModelSerializer.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","nullable":true},"translations":{"type":"string"},"is_active":{"type":"boolean"},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["name","translations"]},"ContactGroup":{"type":"object","description":"Serializer for ContactGroup model supporting both creation and listing.\nHandles multilingual fields through parler TranslatableModelSerializer.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","maxLength":200},"description":{"type":"string","nullable":true},"translations":{"type":"string"},"is_active":{"type":"boolean"},"created_by_name":{"type":"string","nullable":true,"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by_name","name","translations"]}}},"paths":{"/api/v1.0/organisation/{unique_id}/contact-groups/create/":{"post":{"operationId":"organisation_contact_groups_create_create","description":"Create a new contact group in the organisation. Group Name is required.","summary":"Create contact group","parameters":[{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contact Groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ContactGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ContactGroupRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactGroup"}}},"description":""},"400":{"description":"Bad Request - invalid or missing fields"},"401":{"description":"Unauthorized"}}}}}}
```

## List contact groups

> Get all contact groups for an organisation

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contact Groups","description":"Organize contacts into groups and categories"}],"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":{"ContactGroup":{"type":"object","description":"Serializer for ContactGroup model supporting both creation and listing.\nHandles multilingual fields through parler TranslatableModelSerializer.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","maxLength":200},"description":{"type":"string","nullable":true},"translations":{"type":"string"},"is_active":{"type":"boolean"},"created_by_name":{"type":"string","nullable":true,"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by_name","name","translations"]}}},"paths":{"/api/v1.0/organisation/{unique_id}/contact-groups/":{"get":{"operationId":"organisation_contact_groups_list","description":"Get all contact groups for an organisation","summary":"List contact groups","parameters":[{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contact Groups"],"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactGroup"}}}},"description":""}}}}}}
```

## Contact group details

> Retrieve full information about a specific contact group.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contact Groups","description":"Organize contacts into groups and categories"}],"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":{"ContactGroupDetail":{"type":"object","description":"Serializer for ContactGroup model with minimal nested information for performance.\nHandles multilingual fields through parler TranslatableModelSerializer.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"translations":{"type":"string"},"organisation_name":{"type":"string","readOnly":true},"created_by_name":{"type":"string","nullable":true,"readOnly":true},"is_active":{"type":"boolean"},"contacts_count":{"type":"integer","readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["contacts_count","created_by_name","organisation_name","translations"]}}},"paths":{"/api/v1.0/organisation/{unique_id}/contact-groups/{group_unique_id}/":{"get":{"operationId":"organisation_contact_groups_retrieve","description":"Retrieve full information about a specific contact group.","summary":"Contact group details","parameters":[{"in":"path","name":"group_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contact Groups"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactGroupDetail"}}},"description":""},"401":{"description":"Unauthorized"},"404":{"description":"Not Found"}}}}}}
```

## Update contact group (full)

> Replace all editable fields of a contact group. Provide the full payload.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contact Groups","description":"Organize contacts into groups and categories"}],"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":{"ContactGroupRequest":{"type":"object","description":"Serializer for ContactGroup model supporting both creation and listing.\nHandles multilingual fields through parler TranslatableModelSerializer.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","nullable":true},"translations":{"type":"string"},"is_active":{"type":"boolean"},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["name","translations"]},"ContactGroup":{"type":"object","description":"Serializer for ContactGroup model supporting both creation and listing.\nHandles multilingual fields through parler TranslatableModelSerializer.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","maxLength":200},"description":{"type":"string","nullable":true},"translations":{"type":"string"},"is_active":{"type":"boolean"},"created_by_name":{"type":"string","nullable":true,"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by_name","name","translations"]}}},"paths":{"/api/v1.0/organisation/{unique_id}/contact-groups/{group_unique_id}/":{"put":{"operationId":"organisation_contact_groups_update","description":"Replace all editable fields of a contact group. Provide the full payload.","summary":"Update contact group (full)","parameters":[{"in":"path","name":"group_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contact Groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ContactGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ContactGroupRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactGroup"}}},"description":""},"400":{"description":"Bad Request - invalid or missing fields"},"401":{"description":"Unauthorized"},"404":{"description":"Not Found"}}}}}}
```

## Delete contact group

> Delete a specific contact group from the organisation.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contact Groups","description":"Organize contacts into groups and categories"}],"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"}}},"paths":{"/api/v1.0/organisation/{unique_id}/contact-groups/{group_unique_id}/":{"delete":{"operationId":"organisation_contact_groups_destroy","description":"Delete a specific contact group from the organisation.","summary":"Delete contact group","parameters":[{"in":"path","name":"group_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contact Groups"],"responses":{"200":{"description":"Contact group deleted"},"401":{"description":"Unauthorized"},"404":{"description":"Not Found"}}}}}}
```

## Update contact group (partial)

> Partially update a contact group. Send only the fields that need changes.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contact Groups","description":"Organize contacts into groups and categories"}],"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":{"PatchedContactGroupRequest":{"type":"object","description":"Serializer for ContactGroup model supporting both creation and listing.\nHandles multilingual fields through parler TranslatableModelSerializer.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","nullable":true},"translations":{"type":"string"},"is_active":{"type":"boolean"},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}}},"ContactGroup":{"type":"object","description":"Serializer for ContactGroup model supporting both creation and listing.\nHandles multilingual fields through parler TranslatableModelSerializer.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"name":{"type":"string","maxLength":200},"description":{"type":"string","nullable":true},"translations":{"type":"string"},"is_active":{"type":"boolean"},"created_by_name":{"type":"string","nullable":true,"readOnly":true},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["created_by_name","name","translations"]}}},"paths":{"/api/v1.0/organisation/{unique_id}/contact-groups/{group_unique_id}/":{"patch":{"operationId":"organisation_contact_groups_partial_update","description":"Partially update a contact group. Send only the fields that need changes.","summary":"Update contact group (partial)","parameters":[{"in":"path","name":"group_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contact Groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedContactGroupRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedContactGroupRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedContactGroupRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactGroup"}}},"description":""},"400":{"description":"Bad Request - invalid fields"},"401":{"description":"Unauthorized"},"404":{"description":"Not Found"}}}}}}
```

## Create contact

> Create a new contact in a contact group. First name, last name, and entity type are required.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contact Groups","description":"Organize contacts into groups and categories"}],"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":{"ContactRequest":{"type":"object","description":"Comprehensive serializer for Contact model.\nHandles contact creation, updates, and group assignment.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"translations":{"type":"string"},"contact_group":{"type":"string","nullable":true,"description":"Contact group unique_id (optional - can be assigned later)"},"entity_type":{"enum":["client","vendor","lead"],"type":"string","description":"Type of entity (client, vendor, lead)\n\n* `client` - Client\n* `vendor` - Vendor\n* `lead` - Lead"},"entity_id":{"type":"string","nullable":true,"description":"ID of the entity this contact belongs to (optional for potential clients/vendors)","maxLength":100},"first_name":{"type":"string","minLength":1,"maxLength":150},"last_name":{"type":"string","minLength":1,"maxLength":150},"email":{"type":"string","format":"email","nullable":true,"maxLength":254},"phone":{"type":"string","nullable":true,"maxLength":17},"mobile":{"type":"string","nullable":true,"maxLength":17},"linkedin_url":{"type":"string","format":"uri","nullable":true,"description":"LinkedIn profile URL","maxLength":200},"job_title":{"type":"string","nullable":true},"department":{"type":"string","nullable":true},"notes":{"type":"string","nullable":true},"is_active":{"type":"boolean"},"primary_contact":{"type":"boolean","description":"Indicates if this is the primary contact for the entity"},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["entity_type","first_name","last_name","translations"]},"Contact":{"type":"object","description":"Comprehensive serializer for Contact model.\nHandles contact creation, updates, and group assignment.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"translations":{"type":"string"},"organisation_name":{"type":"string","readOnly":true},"created_by_name":{"type":"string","nullable":true,"readOnly":true},"contact_group":{"type":"string","nullable":true,"description":"Contact group unique_id (optional - can be assigned later)"},"contact_group_id":{"type":"string","readOnly":true},"contact_group_name":{"type":"string","nullable":true,"readOnly":true},"entity_type":{"enum":["client","vendor","lead"],"type":"string","description":"Type of entity (client, vendor, lead)\n\n* `client` - Client\n* `vendor` - Vendor\n* `lead` - Lead"},"entity_type_display":{"type":"string","readOnly":true},"entity_id":{"type":"string","nullable":true,"description":"ID of the entity this contact belongs to (optional for potential clients/vendors)","maxLength":100},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150},"full_name":{"type":"string","nullable":true,"readOnly":true},"email":{"type":"string","format":"email","nullable":true,"maxLength":254},"phone":{"type":"string","nullable":true,"maxLength":17},"mobile":{"type":"string","nullable":true,"maxLength":17},"linkedin_url":{"type":"string","format":"uri","nullable":true,"description":"LinkedIn profile URL","maxLength":200},"job_title":{"type":"string","nullable":true},"department":{"type":"string","nullable":true},"notes":{"type":"string","nullable":true},"is_active":{"type":"boolean"},"primary_contact":{"type":"boolean","description":"Indicates if this is the primary contact for the entity"},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["contact_group_id","contact_group_name","created_by_name","entity_type","entity_type_display","first_name","full_name","last_name","organisation_name","translations"]}}},"paths":{"/api/v1.0/organisation/{unique_id}/contact-groups/{group_unique_id}/contacts/create/":{"post":{"operationId":"organisation_contact_groups_contacts_create_create","description":"Create a new contact in a contact group. First name, last name, and entity type are required.","summary":"Create contact","parameters":[{"in":"path","name":"group_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contact Groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ContactRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ContactRequest"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}},"description":""},"400":{"description":"Bad Request - Invalid input or missing required fields"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}}}}}}
```

## List contacts

> Get all contacts in a specific contact group with optional filters

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contact Groups","description":"Organize contacts into groups and categories"}],"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":{"Contact":{"type":"object","description":"Comprehensive serializer for Contact model.\nHandles contact creation, updates, and group assignment.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"translations":{"type":"string"},"organisation_name":{"type":"string","readOnly":true},"created_by_name":{"type":"string","nullable":true,"readOnly":true},"contact_group":{"type":"string","nullable":true,"description":"Contact group unique_id (optional - can be assigned later)"},"contact_group_id":{"type":"string","readOnly":true},"contact_group_name":{"type":"string","nullable":true,"readOnly":true},"entity_type":{"enum":["client","vendor","lead"],"type":"string","description":"Type of entity (client, vendor, lead)\n\n* `client` - Client\n* `vendor` - Vendor\n* `lead` - Lead"},"entity_type_display":{"type":"string","readOnly":true},"entity_id":{"type":"string","nullable":true,"description":"ID of the entity this contact belongs to (optional for potential clients/vendors)","maxLength":100},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150},"full_name":{"type":"string","nullable":true,"readOnly":true},"email":{"type":"string","format":"email","nullable":true,"maxLength":254},"phone":{"type":"string","nullable":true,"maxLength":17},"mobile":{"type":"string","nullable":true,"maxLength":17},"linkedin_url":{"type":"string","format":"uri","nullable":true,"description":"LinkedIn profile URL","maxLength":200},"job_title":{"type":"string","nullable":true},"department":{"type":"string","nullable":true},"notes":{"type":"string","nullable":true},"is_active":{"type":"boolean"},"primary_contact":{"type":"boolean","description":"Indicates if this is the primary contact for the entity"},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["contact_group_id","contact_group_name","created_by_name","entity_type","entity_type_display","first_name","full_name","last_name","organisation_name","translations"]}}},"paths":{"/api/v1.0/organisation/{unique_id}/contact-groups/{group_unique_id}/contacts/":{"get":{"operationId":"organisation_contact_groups_contacts_list","description":"Get all contacts in a specific contact group with optional filters","summary":"List contacts","parameters":[{"in":"query","name":"entity_type","schema":{"type":"string","enum":["client","lead","vendor"]},"description":"Filter by entity type"},{"in":"path","name":"group_unique_id","schema":{"type":"string"},"required":true},{"in":"query","name":"is_active","schema":{"type":"string"},"description":"Filter by active status (true/false)"},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search contacts by first name, last name, email, or phone"},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contact Groups"],"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}}}},"description":""},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}}}}}}
```

## Contact details

> Get a specific contact inside a group.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contact Groups","description":"Organize contacts into groups and categories"}],"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":{"Contact":{"type":"object","description":"Comprehensive serializer for Contact model.\nHandles contact creation, updates, and group assignment.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"translations":{"type":"string"},"organisation_name":{"type":"string","readOnly":true},"created_by_name":{"type":"string","nullable":true,"readOnly":true},"contact_group":{"type":"string","nullable":true,"description":"Contact group unique_id (optional - can be assigned later)"},"contact_group_id":{"type":"string","readOnly":true},"contact_group_name":{"type":"string","nullable":true,"readOnly":true},"entity_type":{"enum":["client","vendor","lead"],"type":"string","description":"Type of entity (client, vendor, lead)\n\n* `client` - Client\n* `vendor` - Vendor\n* `lead` - Lead"},"entity_type_display":{"type":"string","readOnly":true},"entity_id":{"type":"string","nullable":true,"description":"ID of the entity this contact belongs to (optional for potential clients/vendors)","maxLength":100},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150},"full_name":{"type":"string","nullable":true,"readOnly":true},"email":{"type":"string","format":"email","nullable":true,"maxLength":254},"phone":{"type":"string","nullable":true,"maxLength":17},"mobile":{"type":"string","nullable":true,"maxLength":17},"linkedin_url":{"type":"string","format":"uri","nullable":true,"description":"LinkedIn profile URL","maxLength":200},"job_title":{"type":"string","nullable":true},"department":{"type":"string","nullable":true},"notes":{"type":"string","nullable":true},"is_active":{"type":"boolean"},"primary_contact":{"type":"boolean","description":"Indicates if this is the primary contact for the entity"},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["contact_group_id","contact_group_name","created_by_name","entity_type","entity_type_display","first_name","full_name","last_name","organisation_name","translations"]}}},"paths":{"/api/v1.0/organisation/{unique_id}/contact-groups/{group_unique_id}/contacts/{contact_unique_id}/":{"get":{"operationId":"organisation_contact_groups_contacts_retrieve","description":"Get a specific contact inside a group.","summary":"Contact details","parameters":[{"in":"path","name":"contact_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"group_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contact Groups"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}},"description":""},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```

## Update contact

> Update a specific contact in a contact group (full or partial update)

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contact Groups","description":"Organize contacts into groups and categories"}],"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":{"ContactRequest":{"type":"object","description":"Comprehensive serializer for Contact model.\nHandles contact creation, updates, and group assignment.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"translations":{"type":"string"},"contact_group":{"type":"string","nullable":true,"description":"Contact group unique_id (optional - can be assigned later)"},"entity_type":{"enum":["client","vendor","lead"],"type":"string","description":"Type of entity (client, vendor, lead)\n\n* `client` - Client\n* `vendor` - Vendor\n* `lead` - Lead"},"entity_id":{"type":"string","nullable":true,"description":"ID of the entity this contact belongs to (optional for potential clients/vendors)","maxLength":100},"first_name":{"type":"string","minLength":1,"maxLength":150},"last_name":{"type":"string","minLength":1,"maxLength":150},"email":{"type":"string","format":"email","nullable":true,"maxLength":254},"phone":{"type":"string","nullable":true,"maxLength":17},"mobile":{"type":"string","nullable":true,"maxLength":17},"linkedin_url":{"type":"string","format":"uri","nullable":true,"description":"LinkedIn profile URL","maxLength":200},"job_title":{"type":"string","nullable":true},"department":{"type":"string","nullable":true},"notes":{"type":"string","nullable":true},"is_active":{"type":"boolean"},"primary_contact":{"type":"boolean","description":"Indicates if this is the primary contact for the entity"},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["entity_type","first_name","last_name","translations"]},"Contact":{"type":"object","description":"Comprehensive serializer for Contact model.\nHandles contact creation, updates, and group assignment.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"translations":{"type":"string"},"organisation_name":{"type":"string","readOnly":true},"created_by_name":{"type":"string","nullable":true,"readOnly":true},"contact_group":{"type":"string","nullable":true,"description":"Contact group unique_id (optional - can be assigned later)"},"contact_group_id":{"type":"string","readOnly":true},"contact_group_name":{"type":"string","nullable":true,"readOnly":true},"entity_type":{"enum":["client","vendor","lead"],"type":"string","description":"Type of entity (client, vendor, lead)\n\n* `client` - Client\n* `vendor` - Vendor\n* `lead` - Lead"},"entity_type_display":{"type":"string","readOnly":true},"entity_id":{"type":"string","nullable":true,"description":"ID of the entity this contact belongs to (optional for potential clients/vendors)","maxLength":100},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150},"full_name":{"type":"string","nullable":true,"readOnly":true},"email":{"type":"string","format":"email","nullable":true,"maxLength":254},"phone":{"type":"string","nullable":true,"maxLength":17},"mobile":{"type":"string","nullable":true,"maxLength":17},"linkedin_url":{"type":"string","format":"uri","nullable":true,"description":"LinkedIn profile URL","maxLength":200},"job_title":{"type":"string","nullable":true},"department":{"type":"string","nullable":true},"notes":{"type":"string","nullable":true},"is_active":{"type":"boolean"},"primary_contact":{"type":"boolean","description":"Indicates if this is the primary contact for the entity"},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["contact_group_id","contact_group_name","created_by_name","entity_type","entity_type_display","first_name","full_name","last_name","organisation_name","translations"]}}},"paths":{"/api/v1.0/organisation/{unique_id}/contact-groups/{group_unique_id}/contacts/{contact_unique_id}/update/":{"put":{"operationId":"organisation_contact_groups_contacts_update_update","description":"Update a specific contact in a contact group (full or partial update)","summary":"Update contact","parameters":[{"in":"path","name":"contact_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"group_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contact Groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/ContactRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ContactRequest"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}},"description":""},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```

## Update contact

> Update a specific contact in a contact group (full or partial update)

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contact Groups","description":"Organize contacts into groups and categories"}],"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":{"PatchedContactRequest":{"type":"object","description":"Comprehensive serializer for Contact model.\nHandles contact creation, updates, and group assignment.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"translations":{"type":"string"},"contact_group":{"type":"string","nullable":true,"description":"Contact group unique_id (optional - can be assigned later)"},"entity_type":{"enum":["client","vendor","lead"],"type":"string","description":"Type of entity (client, vendor, lead)\n\n* `client` - Client\n* `vendor` - Vendor\n* `lead` - Lead"},"entity_id":{"type":"string","nullable":true,"description":"ID of the entity this contact belongs to (optional for potential clients/vendors)","maxLength":100},"first_name":{"type":"string","minLength":1,"maxLength":150},"last_name":{"type":"string","minLength":1,"maxLength":150},"email":{"type":"string","format":"email","nullable":true,"maxLength":254},"phone":{"type":"string","nullable":true,"maxLength":17},"mobile":{"type":"string","nullable":true,"maxLength":17},"linkedin_url":{"type":"string","format":"uri","nullable":true,"description":"LinkedIn profile URL","maxLength":200},"job_title":{"type":"string","nullable":true},"department":{"type":"string","nullable":true},"notes":{"type":"string","nullable":true},"is_active":{"type":"boolean"},"primary_contact":{"type":"boolean","description":"Indicates if this is the primary contact for the entity"},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}}},"Contact":{"type":"object","description":"Comprehensive serializer for Contact model.\nHandles contact creation, updates, and group assignment.","properties":{"unique_id":{"type":"string","nullable":true,"maxLength":100},"translations":{"type":"string"},"organisation_name":{"type":"string","readOnly":true},"created_by_name":{"type":"string","nullable":true,"readOnly":true},"contact_group":{"type":"string","nullable":true,"description":"Contact group unique_id (optional - can be assigned later)"},"contact_group_id":{"type":"string","readOnly":true},"contact_group_name":{"type":"string","nullable":true,"readOnly":true},"entity_type":{"enum":["client","vendor","lead"],"type":"string","description":"Type of entity (client, vendor, lead)\n\n* `client` - Client\n* `vendor` - Vendor\n* `lead` - Lead"},"entity_type_display":{"type":"string","readOnly":true},"entity_id":{"type":"string","nullable":true,"description":"ID of the entity this contact belongs to (optional for potential clients/vendors)","maxLength":100},"first_name":{"type":"string","maxLength":150},"last_name":{"type":"string","maxLength":150},"full_name":{"type":"string","nullable":true,"readOnly":true},"email":{"type":"string","format":"email","nullable":true,"maxLength":254},"phone":{"type":"string","nullable":true,"maxLength":17},"mobile":{"type":"string","nullable":true,"maxLength":17},"linkedin_url":{"type":"string","format":"uri","nullable":true,"description":"LinkedIn profile URL","maxLength":200},"job_title":{"type":"string","nullable":true},"department":{"type":"string","nullable":true},"notes":{"type":"string","nullable":true},"is_active":{"type":"boolean"},"primary_contact":{"type":"boolean","description":"Indicates if this is the primary contact for the entity"},"date_created":{"type":"string","format":"date-time","nullable":true},"last_updated":{"type":"string","format":"date-time","nullable":true}},"required":["contact_group_id","contact_group_name","created_by_name","entity_type","entity_type_display","first_name","full_name","last_name","organisation_name","translations"]}}},"paths":{"/api/v1.0/organisation/{unique_id}/contact-groups/{group_unique_id}/contacts/{contact_unique_id}/update/":{"patch":{"operationId":"organisation_contact_groups_contacts_update_partial_update","description":"Update a specific contact in a contact group (full or partial update)","summary":"Update contact","parameters":[{"in":"path","name":"contact_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"group_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contact Groups"],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchedContactRequest"}},"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/PatchedContactRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/PatchedContactRequest"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}},"description":""},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```

## Delete contact

> Delete a specific contact from a contact group

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contact Groups","description":"Organize contacts into groups and categories"}],"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"}}},"paths":{"/api/v1.0/organisation/{unique_id}/contact-groups/{group_unique_id}/contacts/{contact_unique_id}/delete/":{"delete":{"operationId":"organisation_contact_groups_contacts_delete_destroy","description":"Delete a specific contact from a contact group","summary":"Delete contact","parameters":[{"in":"path","name":"contact_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"group_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contact Groups"],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```
