Contacts
Manage sales contacts — phone numbers, availability, and company employments.
Endpoints
Contact
GET
/v2/contact/
List contacts (paginated)
POST
/v2/contact/
Create a contact
GET
/v2/contact/{{reference}}/
Retrieve one contact
PUT
/v2/contact/{{reference}}/
Full update — all core fields required
Contact availability
GET
/v2/contact-available/
List contacts — filter with
?reference=
PUT
/v2/contact-available/{{reference}}/
Update
available only (recommended for availability changes)
Use PUT /v2/contact-available/{reference}/ for availability-only updates instead of partial contact PUT.
Request examples
GET — retrieve contact
curl -s "https://next.logimeter.com/v2/contact/agent123/" -H "Authorization: Token xxxxxxx_your_token_xxxxx"
const response = await fetch('https://next.logimeter.com/v2/contact/agent123/', {
headers: { Authorization: 'Token xxxxxxx_your_token_xxxxx' },
});
const contact = await response.json();
requests.get(
'https://next.logimeter.com/v2/contact/agent123/',
headers={'Authorization': 'Token xxxxxxx_your_token_xxxxx'},
).json()
POST — create contact
curl -sX POST "https://next.logimeter.com/v2/contact/" \
-H "Authorization: Token xxxxxxx_your_token_xxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Jane Smith",
"reference": "agent123",
"phone_number_selection": "mobile_number",
"phone_number": "27216714444",
"mobile_number": "27821234567",
"available": true,
"integration_active": true,
"employed_by": [
{"reference": "6e7d1f48-2ca1-4ef4-a433-a3fa765ff190", "job_title": "Sales Executive"}
]
}'
const response = await fetch('https://next.logimeter.com/v2/contact/', {
method: 'POST',
headers: { Authorization: 'Token xxxxxxx_your_token_xxxxx', 'Content-Type': 'application/json' },
body: JSON.stringify({
name: 'Jane Smith',
reference: 'agent123',
phone_number_selection: 'mobile_number',
phone_number: '27216714444',
mobile_number: '27821234567',
available: true,
integration_active: true,
employed_by: [{ reference: '6e7d1f48-2ca1-4ef4-a433-a3fa765ff190', job_title: 'Sales Executive' }],
}),
});
import requests
resp = requests.post(
'https://next.logimeter.com/v2/contact/',
headers={'Authorization': 'Token xxxxxxx_your_token_xxxxx', 'Content-Type': 'application/json'},
json={
'name': 'Jane Smith',
'reference': 'agent123',
'phone_number_selection': 'mobile_number',
'phone_number': '27216714444',
'mobile_number': '27821234567',
'available': True,
'integration_active': True,
'employed_by': [{'reference': '6e7d1f48-2ca1-4ef4-a433-a3fa765ff190', 'job_title': 'Sales Executive'}],
},
)
resp.raise_for_status()
PUT — full update
curl -sX PUT "https://next.logimeter.com/v2/contact/agent123/" \
-H "Authorization: Token xxxxxxx_your_token_xxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Jane Smith",
"reference": "agent123",
"phone_number_selection": "mobile_number",
"phone_number": "27216714444",
"mobile_number": "27821234567",
"available": false,
"integration_active": true,
"employed_by": []
}'
await fetch('https://next.logimeter.com/v2/contact/agent123/', {
method: 'PUT',
headers: { Authorization: 'Token xxxxxxx_your_token_xxxxx', 'Content-Type': 'application/json' },
body: JSON.stringify({
name: 'Jane Smith',
reference: 'agent123',
phone_number_selection: 'mobile_number',
phone_number: '27216714444',
mobile_number: '27821234567',
available: false,
integration_active: true,
employed_by: [],
}),
});
requests.put(
'https://next.logimeter.com/v2/contact/agent123/',
headers={'Authorization': 'Token xxxxxxx_your_token_xxxxx', 'Content-Type': 'application/json'},
json={
'name': 'Jane Smith',
'reference': 'agent123',
'phone_number_selection': 'mobile_number',
'phone_number': '27216714444',
'mobile_number': '27821234567',
'available': False,
'integration_active': True,
'employed_by': [],
},
)
PUT — set unavailable (contact-available)
curl -sX PUT "https://next.logimeter.com/v2/contact-available/agent123/" \
-H "Authorization: Token xxxxxxx_your_token_xxxxx" \
-H "Content-Type: application/json" \
-d '{"available": false}'
await fetch('https://next.logimeter.com/v2/contact-available/agent123/', {
method: 'PUT',
headers: { Authorization: 'Token xxxxxxx_your_token_xxxxx', 'Content-Type': 'application/json' },
body: JSON.stringify({ available: false }),
});
requests.put(
'https://next.logimeter.com/v2/contact-available/agent123/',
headers={'Authorization': 'Token xxxxxxx_your_token_xxxxx', 'Content-Type': 'application/json'},
json={'available': False},
)
Responses
200 OK / 201 Created
Contact object (callback_url is not currently included in responses).
{
"id": 99,
"name": "Jane Smith",
"reference": "agent123",
"phone_number": "27216714444",
"mobile_number": "27821234567",
"phone_number_selection": "mobile_number",
"is_live": false,
"integration_active": true,
"available": true,
"employed_by": [
{"id": 1, "name": "Trask Industries", "reference": "6e7d1f48-2ca1-4ef4-a433-a3fa765ff190", "job_title": "Sales Executive"}
]
}
200 OK
contact-available response:
{"id": 99, "name": "Jane Smith", "reference": "agent123", "available": false}
Validation errors (400)
| Scenario | Error |
|---|---|
| Duplicate reference | Duplicate Partner contact reference |
| Invalid phone_number_selection | Invalid phone_number_selection: … — must be phone_number or mobile_number |
| Blank selected number | Selected phone/mobile number cannot be blank |
| Invalid E.164 | Field error on phone_number / mobile_number |
Contact fields
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | yes | Full name; split into first/last on create. |
| reference | string | yes | Your unique contact ID (case-insensitive unique per partner). |
| phone_number_selection | string | yes | phone_number or mobile_number — which number Call Manager dials. |
| phone_number | string | conditional | ZA E.164 digits. Required when selected. |
| mobile_number | string | conditional | ZA E.164 digits. Required when selected. |
| available | boolean | optional | Whether contact can receive calls (default false on create). |
| integration_active | boolean | optional | Partner-managed flag; changes may trigger emails. |
| is_live | boolean | read-only | Contact is in use. |
| employed_by[] | array | optional | Company employments — write with {reference, job_title}; name is read-only in responses. |
contact-available fields
| Field | Type | Required | Description |
|---|---|---|---|
| id, name, reference | — | read-only | Contact identifiers. |
| available | boolean | yes | Must always be sent as true or false. Omission causes a server error. |
List filter note: ?available=True / ?available=False may not filter correctly
(the API compares string values against a boolean field). Prefer filtering client-side or use
?reference= to look up a specific contact.