Docs Call Manager Business Hours

Business Hours

Business hours are stored as a company schedule with aggregated opening_hours entries. One schedule per company. Requires call2lead permission.

Endpoints

GET /v2/company_business_hours/ List schedules — ?q= searches company reference; ?reference= filters by company reference
POST /v2/company_business_hours/ Create schedule for a company
GET /v2/company_business_hours/{{reference}}/ Retrieve schedule by schedule reference
PUT /v2/company_business_hours/{{reference}}/ Full update — replace schedule and opening hours

PUT requires the full schedule body (reference, company, integration_active, opening_hours). The complete opening_hours array replaces all slots — omitted entries are deleted.

Setting "integration_active": false via PUT may not deactivate the schedule — the API only applies the field when truthy. Contact Logimeter support if you need to deactivate a schedule.

Request examples

GET — retrieve schedule

curl -s "https://next.logimeter.com/v2/company_business_hours/trask-hours/" -H "Authorization: Token xxxxxxx_your_token_xxxxx"
await fetch('https://next.logimeter.com/v2/company_business_hours/trask-hours/', { headers: { Authorization: 'Token xxxxxxx_your_token_xxxxx' } });
requests.get('https://next.logimeter.com/v2/company_business_hours/trask-hours/', headers={'Authorization': 'Token xxxxxxx_your_token_xxxxx'})

POST — create schedule (split-day slots on Monday)

curl -sX POST "https://next.logimeter.com/v2/company_business_hours/" \
  -H "Authorization: Token xxxxxxx_your_token_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
  "reference": "trask-hours",
  "callback_url": "https://your-server.com/hours-callbacks/",
  "integration_active": true,
  "company": {"reference": "6e7d1f48-2ca1-4ef4-a433-a3fa765ff190"},
  "opening_hours": [
    {"day": 2, "from_hour": "08:00:00", "to_hour": "12:00:00"},
    {"day": 2, "from_hour": "13:00:00", "to_hour": "17:00:00"},
    {"day": 3, "from_hour": "08:00:00", "to_hour": "17:00:00"}
  ]
}'
await fetch('https://next.logimeter.com/v2/company_business_hours/', {
  method: 'POST',
  headers: { Authorization: 'Token xxxxxxx_your_token_xxxxx', 'Content-Type': 'application/json' },
  body: JSON.stringify({
    reference: 'trask-hours',
    callback_url: 'https://your-server.com/hours-callbacks/',
    integration_active: true,
    company: { reference: '6e7d1f48-2ca1-4ef4-a433-a3fa765ff190' },
    opening_hours: [
      { day: 2, from_hour: '08:00:00', to_hour: '12:00:00' },
      { day: 2, from_hour: '13:00:00', to_hour: '17:00:00' },
    ],
  }),
});
requests.post(
    'https://next.logimeter.com/v2/company_business_hours/',
    headers={'Authorization': 'Token xxxxxxx_your_token_xxxxx', 'Content-Type': 'application/json'},
    json={
        'reference': 'trask-hours',
        'callback_url': 'https://your-server.com/hours-callbacks/',
        'integration_active': True,
        'company': {'reference': '6e7d1f48-2ca1-4ef4-a433-a3fa765ff190'},
        'opening_hours': [
            {'day': 2, 'from_hour': '08:00:00', 'to_hour': '12:00:00'},
            {'day': 2, 'from_hour': '13:00:00', 'to_hour': '17:00:00'},
        ],
    },
)

PUT — full update

curl -sX PUT "https://next.logimeter.com/v2/company_business_hours/trask-hours/" \
  -H "Authorization: Token xxxxxxx_your_token_xxxxx" \
  -H "Content-Type: application/json" \
  -d '{
  "reference": "trask-hours",
  "callback_url": "https://your-server.com/hours-callbacks/",
  "integration_active": true,
  "company": {"reference": "6e7d1f48-2ca1-4ef4-a433-a3fa765ff190"},
  "opening_hours": [
    {"day": 2, "from_hour": "09:00:00", "to_hour": "18:00:00"}
  ]
}'
await fetch('https://next.logimeter.com/v2/company_business_hours/trask-hours/', {
  method: 'PUT',
  headers: { Authorization: 'Token xxxxxxx_your_token_xxxxx', 'Content-Type': 'application/json' },
  body: JSON.stringify({
    reference: 'trask-hours',
    callback_url: 'https://your-server.com/hours-callbacks/',
    integration_active: true,
    company: { reference: '6e7d1f48-2ca1-4ef4-a433-a3fa765ff190' },
    opening_hours: [{ day: 2, from_hour: '09:00:00', to_hour: '18:00:00' }],
  }),
});
requests.put(
    'https://next.logimeter.com/v2/company_business_hours/trask-hours/',
    headers={'Authorization': 'Token xxxxxxx_your_token_xxxxx', 'Content-Type': 'application/json'},
    json={
        'reference': 'trask-hours',
        'callback_url': 'https://your-server.com/hours-callbacks/',
        'integration_active': True,
        'company': {'reference': '6e7d1f48-2ca1-4ef4-a433-a3fa765ff190'},
        'opening_hours': [{'day': 2, 'from_hour': '09:00:00', 'to_hour': '18:00:00'}],
    },
)

Responses

200 OK / 201 Created
{
  "id": 3,
  "reference": "trask-hours",
  "callback_url": "https://your-server.com/hours-callbacks/",
  "integration_active": true,
  "company": {"name": "Trask Industries", "reference": "6e7d1f48-2ca1-4ef4-a433-a3fa765ff190"},
  "opening_hours": [
    {"id": 10, "day": 2, "display_day": "Monday", "from_hour": "08:00:00", "to_hour": "12:00:00"},
    {"id": 11, "day": 2, "display_day": "Monday", "from_hour": "13:00:00", "to_hour": "17:00:00"}
  ]
}

Validation errors (400)

Business hours validation errors are returned as JSON objects with an Error key:

400 Bad Request
{"Error": "Invalid Weekday specified: 9."}
400 Bad Request
{"Error:": "Overlapping Business Hours"}
ScenarioError key / message
No call2lead permissionYou do not have permission to use Call2Lead. (string detail)
Duplicate scheduleThis Company Schedule already exists
Missing weekday{"Error": "No Weekday Specified."}
Invalid weekday{"Error": "Invalid Weekday specified: N."} — use 1–7
Missing from/to hour{"Error": "No From Hour Specified."} / No To Hour Specified.
Overlapping hours (same day){"Error:": "Overlapping Business Hours"}
from_hour > to_hour{"Error": "From Hour cannot be greater than To Hour."}

Schedule fields

FieldTypeRequiredDescription
referencestringyesYour schedule identifier (URL lookup key).
companyobjectyes{reference} — one schedule per company.
callback_urlstringoptionalHTTPS callback URL (nullable).
integration_activebooleanyesWhether schedule is active. See PUT limitation above.
opening_hours[]arrayyesMay be empty. Multiple non-overlapping entries per day are allowed (e.g. split lunch). PUT replaces all slots.

opening_hours[] fields

FieldTypeRequiredDescription
idintegerread-onlyPresent on GET responses only; not used on PUT (matching is by day + from_hour + to_hour).
dayintegeryesWeekday 1=Sunday … 7=Saturday (e.g. 2 = Monday).
display_daystringread-onlye.g. Monday.
from_hourtimeyesHH:MM:SS or H:MM.
to_hourtimeyesMust be >= from_hour. Same-day ranges only.

Exception/holiday hours are only available on the legacy v1 API (/v1/call2lead/exceptionbusinesshours/).