---
title: "Create charter booking"
method: POST
path: "/api/v1/marketplace/bookings"
tags: ["Marketplace"]
---

# Create charter booking

`POST /api/v1/marketplace/bookings`

## Request

- Base URL: `http://localhost:3002`
- URL: `http://localhost:3002/api/v1/marketplace/bookings`
- Auth: none required

Creates a new charter booking through the marketplace. Public endpoint — no authentication required.

## Request body

- object
  - `captainSlug` string, required
  - `date` string, date, required
  - `startTime` string, nullable
  - `durationHours` integer, required
  - `harborId` string, required
  - `customer` object, required
    - `firstName` string, required
    - `lastName` string, required
    - `email` string, email, required
    - `phone` string, nullable
  - `notes` string, nullable

## Response `201`

Booking created

- object
  - `data` Booking
    - `id` string, required
    - `captainId` string, required
    - `date` string, date-time, required
    - `startTime` string, nullable
    - `endTime` string, nullable
    - `status` 'PENDING_DEPOSIT' | 'DEPOSIT_PAID' | 'CONFIRMED' | 'COMPLETED' | 'CANCELLED' | 'WEATHER_CANCELLED', required
    - `totalPrice` number, nullable
    - `notes` string, nullable
    - `createdAt` string, date-time
    - `customer` Customer
      - `id` string, required
      - `firstName` string, required
      - `lastName` string, required
      - `email` string, email, required
      - `phone` string, nullable
      - `notes` string, nullable
      - `createdAt` string, date-time
    - `harbor` Harbor
      - `id` string, required
      - `name` string, required
      - `city` string, nullable
      - `state` string, nullable
      - `lat` number, nullable
      - `lng` number, nullable
      - `sortOrder` integer
      - `isActive` boolean, required
    - `duration` Duration
      - `id` string, required
      - `hours` integer, required
      - `label` string, required
      - `isActive` boolean
      - `sortOrder` integer
    - `payments` Payment[]
      - `id` string, required
      - `bookingId` string
      - `amount` number, required
      - `type` 'DEPOSIT' | 'BALANCE' | 'TIP' | 'REFUND', required
      - `status` 'PENDING' | 'SUCCEEDED' | 'FAILED' | 'REFUNDED', required
      - `createdAt` string, date-time
    - `weatherChecks` WeatherCheck[]
      - `id` string
      - `bookingId` string
      - `checkedAt` string, date-time
      - `hasAdvisory` boolean
      - `advisoryType` string, nullable
      - `windSpeed` number, nullable
      - `waveHeight` number, nullable
      - `forecast` string, nullable
    - `notifications` Notification[]
      - `id` string
      - `bookingId` string
      - `type` string
      - `sentAt` string, date-time
      - `status` string

## Other responses

- `400`: Validation error
- `404`: Captain or harbor not found

---

[API](https://skmtc.dev/chartercaptain/apis/charter-captain-api.md) · [All operations](https://skmtc.dev/chartercaptain/apis/charter-captain-api/llms.txt) · [OpenAPI document](https://skmtc.dev/chartercaptain/apis/charter-captain-api/revisions/1ffea1113adb?raw)
