---
title: "Book a lesson at a free start (accepted students only)"
method: POST
path: "/api/v1/coaches/{handle}/lessons"
tags: ["coaches"]
---

# Book a lesson at a free start (accepted students only)

`POST /api/v1/coaches/{handle}/lessons`

## Request

- Base URL: `https://kicksma.sh`
- URL: `https://kicksma.sh/api/v1/coaches/{handle}/lessons`
- Auth: one of:
  - none
  - HTTP bearer

## Path parameters

- `handle` string, required

## Request body

- object
  - `token` string, required
  - `startsAt` string, date-time, required

## Response `201`

Booked

- LessonBooking
  - `lesson` object
    - `id` string
    - `startsAt` string, date-time
    - `minutes` integer
    - `coach` string
    - `url` string
  - `package` object, nullable
    - `left` integer
    - `size` integer
    - `expiresAt` string, nullable
  - `rules` object
  - `next` string

## Other responses

- `403`: Not accepted yet
- `404`: No listed coach or unknown token
- `409`: Slot taken
- `422`: Invalid request; the message names the field
- `429`: Rate limited; the hint says how to get more room

---

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