> 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/contacts.md).

# 👥 Contacts

Individual contact management and information

## Create contact (no group)

> Create a new contact without requiring a contact group. First name, last name, and entity type are required. The contact\_group field is optional.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contacts","description":"Individual contact management and information"}],"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}/contacts/create/":{"post":{"operationId":"organisation_contacts_create_create","description":"Create a new contact without requiring a contact group. First name, last name, and entity type are required. The contact_group field is optional.","summary":"Create contact (no group)","parameters":[{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contacts"],"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 all contacts

> Get all contacts for an organisation with optional filters

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contacts","description":"Individual contact management and information"}],"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}/contacts/":{"get":{"operationId":"organisation_contacts_list","description":"Get all contacts for an organisation with optional filters","summary":"List all contacts","parameters":[{"in":"query","name":"contact_group","schema":{"type":"string"},"description":"Filter by contact group name or unique_id"},{"in":"query","name":"entity_type","schema":{"type":"string","enum":["client","lead","vendor"]},"description":"Filter by entity type"},{"in":"query","name":"is_active","schema":{"type":"string"},"description":"Filter by active status (true/false)"},{"in":"query","name":"no_group","schema":{"type":"string"},"description":"Show only contacts without a group (true/false)"},{"in":"query","name":"search","schema":{"type":"string"},"description":"Search contacts by first name or last name"},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contacts"],"responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Contact"}}}},"description":""},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}}}}}}
```

## Contact details (org level)

> Get a specific contact by unique\_id. Works for contacts with or without groups.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contacts","description":"Individual contact management and information"}],"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}/contacts/{contact_unique_id}/":{"get":{"operationId":"organisation_contacts_retrieve","description":"Get a specific contact by unique_id. Works for contacts with or without groups.","summary":"Contact details (org level)","parameters":[{"in":"path","name":"contact_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contacts"],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Contact"}}},"description":""},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```

## Update contact (org level)

> Update a specific contact by unique\_id (full or partial update). Works for contacts with or without groups.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contacts","description":"Individual contact management and information"}],"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}/contacts/{contact_unique_id}/update/":{"put":{"operationId":"organisation_contacts_update_update","description":"Update a specific contact by unique_id (full or partial update). Works for contacts with or without groups.","summary":"Update contact (org level)","parameters":[{"in":"path","name":"contact_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contacts"],"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 (org level)

> Update a specific contact by unique\_id (full or partial update). Works for contacts with or without groups.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contacts","description":"Individual contact management and information"}],"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}/contacts/{contact_unique_id}/update/":{"patch":{"operationId":"organisation_contacts_update_partial_update","description":"Update a specific contact by unique_id (full or partial update). Works for contacts with or without groups.","summary":"Update contact (org level)","parameters":[{"in":"path","name":"contact_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contacts"],"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 (org level)

> Delete a specific contact by unique\_id. Works for contacts with or without groups.

```json
{"openapi":"3.0.3","info":{"title":"Skhokho API","version":"v1.0"},"tags":[{"name":"Contacts","description":"Individual contact management and information"}],"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}/contacts/{contact_unique_id}/delete/":{"delete":{"operationId":"organisation_contacts_delete_destroy","description":"Delete a specific contact by unique_id. Works for contacts with or without groups.","summary":"Delete contact (org level)","parameters":[{"in":"path","name":"contact_unique_id","schema":{"type":"string"},"required":true},{"in":"path","name":"unique_id","schema":{"type":"string"},"required":true}],"tags":["Contacts"],"responses":{"204":{"description":"No Content"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}}}}}}
```
