# 📁 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"}}}}}}
```


---

# 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/organization/contact-groups.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.
