Skip to main content
The meetings endpoints provide post-meeting cost summaries computed from actual attendance and duration — not the scheduled figures. A meeting booked for an hour that ran 25 minutes with three no-shows is reported as what it was: 25 minutes of actual cost for however many people stayed. MeetCost applies the same disclosure policy redaction here as on estimates, so what a caller can see depends on their role and their relationship to the meeting.

GET /api/v1/meetings//summary

Returns the post-meeting cost summary for a single meeting, identified by MeetCost’s internal meeting ID. The response is redacted according to the caller’s role and the org’s disclosure policy. Access control: Callers who attended or organised the meeting see it at their normal role. A caller who was neither an attendee nor the organiser must have at least the team_lead role to retrieve the summary — otherwise the server returns 403 Forbidden.

Path parameters

string
required
MeetCost’s internal meeting ID (returned as meeting_id in all meeting summary responses).

Response body

string
MeetCost’s internal meeting ID.
string
The platform that hosted the meeting: google, microsoft, or zoom.
string | null
Meeting title from the calendar event, if available.
string | null
Email address of the meeting organiser.
string | null
ISO 8601 datetime of actual start (not scheduled start).
number | null
Actual meeting duration in minutes (not scheduled duration).
object
Cost result, subject to disclosure policy. Same structure as the cost object in estimate responses — see POST /api/v1/estimate for field descriptions.
string | null
The scheduling-time estimate total, if one was captured. Allows comparison of what the organiser expected versus what the meeting actually cost.
string | null
Difference between cost.total and estimated_total, as a signed decimal string. Positive means the meeting cost more than estimated; negative means it cost less.
number | null
Aggregate minutes of late joins across all participants. Only present when cost.visible is true.
string | null
Annual run-rate for recurring meetings, or null for one-off meetings.
string | null
Explanation when some participants were priced at the fallback rate. Same semantics as on estimate responses.

Response example


GET /api/v1/meetings/by-provider///summary

Same as the endpoint above, but addressed by the provider’s own meeting ID rather than MeetCost’s internal ID. This is typically more convenient for add-in clients, which receive the provider’s ID from the calendar event directly.

Path parameters

string
required
The meeting platform: google, microsoft, or zoom.
string
required
The provider’s meeting identifier — the UUID or numeric ID from the calendar event or meeting object. Maximum 200 characters.
A 404 from this endpoint is normal during and shortly after a meeting. Providers publish attendance data minutes to hours after the meeting ends. If you call this endpoint while a meeting is ongoing, or shortly after it finishes, you will get 404 Not Found. Show the user “summary not yet available” — not “no cost” or “zero”. Check back later.

Request example


GET /api/v1/meetings/mine

Returns a list of meetings the authenticated caller organised, ordered most-recent first. Applies the organiser disclosure rules (the caller always sees their own meeting totals, subject to org policy).

Query parameters

integer
default:"20"
Maximum number of meetings to return. Capped at 100.

Response

An array of meeting summary objects, each with the same structure as the GET /api/v1/meetings/{meeting_id}/summary response.

Request example


POST /api/v1/meetings/ingest

Manually record a completed meeting from a platform that MeetCost has no built-in collector for. Requires admin role or a service token. Idempotent on (provider, provider_meeting_id): Submitting the same meeting twice writes it only once. This is intentional — provider webhook systems and polling collectors retry on failure, and a retry must not double-count a meeting in the monthly report.
Webhook deliveries from Zoom and Microsoft Graph go through the /webhooks/... endpoints instead, where the provider’s signature is verified first. Use /meetings/ingest for platforms without a webhook, or for one-off manual imports.

Request body

string
required
Platform identifier for this meeting, e.g. "webex", "bluejeans", "custom". Maximum 20 characters.
string
required
The provider’s own meeting identifier. Used for idempotency checks. Maximum 200 characters.
array
required
List of attendees and their participation details.
string
Meeting title. Optional.
string
Email address of the meeting organiser. Optional.
string
Recurring series identifier from the provider, if applicable. Used to group meetings in reports.
string
default:"one_off"
Meeting cadence. Same values as the estimate endpoint: one_off, daily, weekdaily, weekly, biweekly, monthly, quarterly.
string
ISO 8601 datetime of the actual meeting start.
string
ISO 8601 datetime of the actual meeting end.
number
Scheduled duration in minutes. Stored for comparison against actual duration.

Request example

Response

Returns a full meeting summary response object (same structure as GET /api/v1/meetings/{meeting_id}/summary). After ingestion, the meeting is costed immediately and the summary is dispatched to any configured notification channels.