---
title: "Mark a meeting as booked on a lead"
method: POST
path: "/leads/{id}/meeting"
tags: ["Meetings"]
---

# Mark a meeting as booked on a lead

`POST /leads/{id}/meeting`

## Request

- Base URL: `https://api.emailchaser.com/r`
- URL: `https://api.emailchaser.com/r/leads/{id}/meeting`
- Auth: HTTP bearer

Records that a meeting was booked with this lead. A meeting is an explicit mark set by you or your agent when a call actually gets scheduled - Emailchaser never infers one from reply text or calendars, so this call (or PUT /leads/{id}/category with meeting_booked, which behaves identically) is the only way a meeting is recorded. Sets meetingBookedAt to now, sets the lead's category to meeting_booked, and fires the LeadCategoryUpdate webhook on the category change. Idempotent: repeating the call keeps the original meetingBookedAt and fires no second webhook. Marked meetings are counted in GET /campaigns/{id}/stats totals.meetings and GET /reports/outcomes.

## Path parameters

- `id` integer, required

## Response `200`

Meeting marked as booked

- ModelsLeadMeetingResponse
  - `lead` ModelsLeadCategoryState
    - `id` integer
    - `meetingBookedAt` string: MeetingBookedAt is when the meeting was marked as booked and null while no meeting is marked.
    - `tag` string: Tag is the lead's engagement category and null while the lead has never been categorized.
  - `message` string

## Other responses

- `400`: Invalid lead ID
- `401`: Unauthorized - invalid or missing API key
- `404`: Lead not found
- `500`: Failed to mark meeting

---

[API](https://skmtc.dev/emailchaser/apis/emailchaser-api.md) · [All operations](https://skmtc.dev/emailchaser/apis/emailchaser-api/llms.txt) · [OpenAPI document](https://skmtc.dev/emailchaser/apis/emailchaser-api/revisions/8b114990abb7?raw)
