Skip to content

Meetings

MC0RE edited this page Jul 20, 2026 · 4 revisions

Meetings

Manage meetings in Teamleader Focus.

Overview

The Meetings resource manages meeting activities linked to customers and employees. Creation uses schedule() β€” there is no create() method. Meetings support time tracking, completion status, and post-meeting reports.

Access via Teamleader::meetings().

Includes key: When passing includes via options, use options['include']. The SDK sends this to the API as includes (plural). The fluent ->with() / ->withTrackedTime() methods handle this automatically.

Project linkage (v1.2.8): A meeting can be linked to a legacy milestone (milestone_id) or, on new-projects accounts, to a project (project_id) and/or project group (group_id).

Endpoint

meetings

Capabilities

Capability Supported
Pagination βœ… Supported
Filtering βœ… Supported
Sorting βœ… Supported (scheduled_at)
Sideloading βœ… Supported (tracked_time, estimated_time)
Creation βœ… Supported (via schedule())
Update βœ… Supported
Deletion βœ… Supported

Methods

list(array $filters = [], array $options = [])

group_id cannot be combined with milestone_id (v1.2.8) β€” passing both throws InvalidArgumentException.

use McoreServices\TeamleaderSDK\Facades\Teamleader;

$meetings = Teamleader::meetings()->list([
    'employee_id' => 'user-uuid',
    'start_date'  => '2025-04-01',
    'end_date'    => '2025-04-30',
]);

// Filter by nextgen project group
$meetings = Teamleader::meetings()->list(['group_id' => 'group-uuid']);

$meetings = Teamleader::meetings()->list([], [
    'page_size' => 50,
    'sort'      => [['field' => 'scheduled_at', 'order' => 'asc']],
]);

info(mixed $id, mixed $includes = null)

$meeting = Teamleader::meetings()->info('meeting-uuid');
$meeting = Teamleader::meetings()->withTrackedTime()->info('meeting-uuid');

schedule(array $data)

Creates a new meeting. Posts to meetings.schedule. Required fields are validated before the request.

Required: title, starts_at, ends_at, attendees (must include at least one type: user), customer (type + id).

Optional (pass-through): description, location (supports the inline address location type), activity_type_id, and project linkage β€” project_id, group_id, milestone_id.

$meeting = Teamleader::meetings()->schedule([
    'title'      => 'Quarterly Review',
    'starts_at'  => '2025-04-15T09:00:00+02:00',
    'ends_at'    => '2025-04-15T10:30:00+02:00',
    'attendees'  => [
        ['type' => 'user',    'id' => 'user-uuid'],
        ['type' => 'contact', 'id' => 'contact-uuid'],
    ],
    'customer'   => ['type' => 'company', 'id' => 'company-uuid'],
    'project_id' => 'project-uuid',   // new-projects linkage (v1.2.8)
]);

update(mixed $id, array $data)

The id is injected into the request body. Accepts the same optional pass-through params as schedule() (including project_id, group_id, milestone_id, and the inline address location type). If attendees is provided it must still include at least one user attendee.

Teamleader::meetings()->update('meeting-uuid', [
    'title'    => 'Quarterly Review (rescheduled)',
    'starts_at' => '2025-04-16T09:00:00+02:00',
    'ends_at'   => '2025-04-16T10:30:00+02:00',
]);

complete(mixed $id) / delete(mixed $id)

Teamleader::meetings()->complete('meeting-uuid');
Teamleader::meetings()->delete('meeting-uuid');

createReport(mixed $meetingId, array $reportData)

Creates a post-meeting report attached to a related entity. attach_to.type must be contact, company, or deal.

Teamleader::meetings()->createReport('meeting-uuid', [
    'attach_to'   => ['type' => 'deal', 'id' => 'deal-uuid'],
    'description' => 'Client confirmed budget. Sending contract next week.',
]);

Helper Methods

Method Filter applied
forEmployee(string $id) employee_id
inDateRange(string $start, string $end) start_date + end_date
today() today's meetings
search(string $term) term (title and description)

Fluent include methods

Method Include
withTrackedTime() tracked_time
withEstimatedTime() estimated_time

Filters

Filter Type Description
ids array Filter by meeting UUIDs
employee_id string Filter by assigned employee UUID
start_date string From date (YYYY-MM-DD)
end_date string To date (YYYY-MM-DD)
milestone_id string Legacy project milestone UUID (cannot be combined with group_id)
group_id string Nextgen project group UUID (cannot be combined with milestone_id) (v1.2.8)
term string Search in title and description
recurrence_id string Recurring series UUID

Sideloading

Include Description
tracked_time Time tracked against this meeting
estimated_time Estimated time for this meeting

Response Notes

  • info() returns customer_meeting_room (this was previously mis-documented as online_meeting_room; the API field is customer_meeting_room).
  • info() / list() responses include created_by (the user who created the meeting).

Related Resources

Clone this wiki locally