Charter Captain Marketplace API

The Marketplace API from Charter Captain — 15 operation(s) for marketplace.

Operations 15

GET /api/v1/marketplace/harbors List marketplace harbors #
GET /api/v1/marketplace/featured Get featured marketplace listings #
GET /api/v1/marketplace/captains Search marketplace captains #
GET /api/v1/marketplace/captains/{slug} Get captain profile #
GET /api/v1/marketplace/captains/{slug}/availability Get captain availability #
GET /api/v1/marketplace/captains/{slug}/pricing Get captain pricing #
GET /api/v1/marketplace/captains/{slug}/reviews Get captain reviews #
GET /api/v1/marketplace/boats Search marketplace boats #
GET /api/v1/marketplace/boats/{boatId} Get boat profile #
GET /api/v1/marketplace/boats/{boatId}/availability Get boat availability #
GET /api/v1/marketplace/boats/{boatId}/reviews Get boat reviews #
POST /api/v1/marketplace/bookings Create charter booking #
POST /api/v1/marketplace/rentals/{rentalId}/review Submit rental review #
POST /api/v1/marketplace/bookings/{bookingId}/deposit-payment-intent Create Stripe PaymentIntent for booking deposit #
POST /api/v1/marketplace/rentals/{rentalId}/deposit-payment-intent Create Stripe PaymentIntent for rental deposit #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/chartercaptain-com:chartercaptain-com-marketplace-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

chartercaptain-com-marketplace-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Charter Captain Marketplace API
  version: 1.0.0
  description: REST API for the Charter Captain iOS apps
servers:
- url: http://localhost:3002
  description: Development
security:
- bearerAuth: []
tags:
- name: Marketplace
paths:
  /api/v1/marketplace/harbors:
    get:
      summary: List marketplace harbors
      description: Returns all active harbors available in the marketplace.
      operationId: getMarketplaceHarbors
      tags:
      - Marketplace
      security: []
      responses:
        '200':
          description: List of harbors
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Harbor'
  /api/v1/marketplace/featured:
    get:
      summary: Get featured marketplace listings
      description: Returns featured captains and boats for the marketplace homepage.
      operationId: getMarketplaceFeatured
      tags:
      - Marketplace
      security: []
      responses:
        '200':
          description: Featured captains and boats
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      captains:
                        type: array
                        items:
                          $ref: '#/components/schemas/MarketplaceCaptain'
                      boats:
                        type: array
                        items:
                          $ref: '#/components/schemas/MarketplaceBoat'
  /api/v1/marketplace/captains:
    get:
      summary: Search marketplace captains
      description: Returns a paginated list of captains matching search criteria.
      operationId: getMarketplaceCaptains
      tags:
      - Marketplace
      security: []
      parameters:
      - name: harbor
        in: query
        description: Filter by harbor ID or name
        required: false
        schema:
          type: string
      - name: date
        in: query
        description: Filter by available date (YYYY-MM-DD)
        required: false
        schema:
          type: string
          format: date
      - name: duration
        in: query
        description: Filter by charter duration in hours
        required: false
        schema:
          type: integer
      - name: page
        in: query
        required: false
        schema:
          type: integer
          default: 1
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 20
          maximum: 100
      responses:
        '200':
          description: Paginated list of captains
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/MarketplaceCaptain'
                  meta:
                    $ref: '#/components/schemas/PaginationMeta'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/marketplace/captains/{slug}:
    get:
      summary: Get captain profile
      description: Returns the full public profile for a captain by slug.
      operationId: getMarketplaceCaptainBySlug
      tags:
      - Marketplace
      security: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Captain profile
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CaptainProfile'
        '404':
          description: Captain not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/marketplace/captains/{slug}/availability:
    get:
      summary: Get captain availability
      description: Returns available dates and time slots for a marketplace captain.
      operationId: getMarketplaceCaptainAvailability
      tags:
      - Marketplace
      security: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
      - name: daysAhead
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 365
          default: 90
      responses:
        '200':
          description: Available dates
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      required:
                      - date
                      - pricingCategory
                      - minRateDollars
                      properties:
                        date:
                          type: string
                          format: date
                        pricingCategory:
                          type: string
                          enum:
                          - weekday
                          - weekend
                          - peak
                          - holiday
                        minRateDollars:
                          type: integer
                          nullable: true
                          description: Minimum hourly rate in whole dollars for the date, or null if no active pricing tier applies.
        '404':
          description: Captain not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/marketplace/captains/{slug}/pricing:
    get:
      summary: Get captain pricing
      description: Returns pricing tiers and rates for a marketplace captain.
      operationId: getMarketplaceCaptainPricing
      tags:
      - Marketplace
      security: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Captain pricing
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PricingTier'
        '404':
          description: Captain not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/marketplace/captains/{slug}/reviews:
    get:
      summary: Get captain reviews
      description: Returns paginated reviews for a marketplace captain.
      operationId: getMarketplaceCaptainReviews
      tags:
      - Marketplace
      security: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
      - name: page
        in: query
        required: false
        schema:
          type: integer
          default: 1
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 20
          maximum: 100
      responses:
        '200':
          description: Paginated reviews
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PublicReview'
                  meta:
                    $ref: '#/components/schemas/PaginationMeta'
        '404':
          description: Captain not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/marketplace/boats:
    get:
      summary: Search marketplace boats
      description: Returns a paginated list of rental boats matching search criteria.
      operationId: getMarketplaceBoats
      tags:
      - Marketplace
      security: []
      parameters:
      - name: harbor
        in: query
        description: Filter by harbor ID or name
        required: false
        schema:
          type: string
      - name: date
        in: query
        description: Filter by available date (YYYY-MM-DD)
        required: false
        schema:
          type: string
          format: date
      - name: capacity
        in: query
        description: Minimum passenger capacity
        required: false
        schema:
          type: integer
      - name: page
        in: query
        required: false
        schema:
          type: integer
          default: 1
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 20
          maximum: 100
      responses:
        '200':
          description: Paginated list of boats
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/MarketplaceBoat'
                  meta:
                    $ref: '#/components/schemas/PaginationMeta'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/marketplace/boats/{boatId}:
    get:
      summary: Get boat profile
      description: Returns the full public profile for a rental boat.
      operationId: getMarketplaceBoatById
      tags:
      - Marketplace
      security: []
      parameters:
      - name: boatId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Boat profile
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/BoatProfile'
        '404':
          description: Boat not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/marketplace/boats/{boatId}/availability:
    get:
      summary: Get boat availability
      description: Returns available dates for a marketplace boat.
      operationId: getMarketplaceBoatAvailability
      tags:
      - Marketplace
      security: []
      parameters:
      - name: boatId
        in: path
        required: true
        schema:
          type: string
      - name: daysAhead
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 365
          default: 90
      responses:
        '200':
          description: Available dates
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: string
                      format: date
        '404':
          description: Boat not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/marketplace/boats/{boatId}/reviews:
    get:
      summary: Get boat reviews
      description: Returns paginated reviews for a marketplace boat.
      operationId: getMarketplaceBoatReviews
      tags:
      - Marketplace
      security: []
      parameters:
      - name: boatId
        in: path
        required: true
        schema:
          type: string
      - name: page
        in: query
        required: false
        schema:
          type: integer
          default: 1
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 20
          maximum: 100
      responses:
        '200':
          description: Paginated reviews
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/PublicReview'
                  meta:
                    $ref: '#/components/schemas/PaginationMeta'
        '404':
          description: Boat not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/marketplace/bookings:
    post:
      summary: Create charter booking
      description: Creates a new charter booking through the marketplace. Public endpoint — no authentication required.
      operationId: postMarketplaceBooking
      tags:
      - Marketplace
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - captainSlug
              - date
              - durationHours
              - harborId
              - customer
              properties:
                captainSlug:
                  type: string
                date:
                  type: string
                  format: date
                startTime:
                  type: string
                  example: 08:00
                  nullable: true
                durationHours:
                  type: integer
                  minimum: 1
                harborId:
                  type: string
                customer:
                  type: object
                  required:
                  - firstName
                  - lastName
                  - email
                  properties:
                    firstName:
                      type: string
                    lastName:
                      type: string
                    email:
                      type: string
                      format: email
                    phone:
                      type: string
                      nullable: true
                notes:
                  type: string
                  nullable: true
      responses:
        '201':
          description: Booking created
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Booking'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Captain or harbor not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/marketplace/rentals/{rentalId}/review:
    post:
      summary: Submit rental review
      description: Submits a review for a completed rental. Public endpoint — no authentication required.
      operationId: postMarketplaceRentalReview
      tags:
      - Marketplace
      security: []
      parameters:
      - name: rentalId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - rating
              - authorName
              properties:
                rating:
                  type: integer
                  minimum: 1
                  maximum: 5
                comment:
                  type: string
                  nullable: true
                authorName:
                  type: string
      responses:
        '201':
          description: Review submitted
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/Review'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Rental not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /api/v1/marketplace/bookings/{bookingId}/deposit-payment-intent:
    post:
      operationId: postMarketplaceBookingDepositPaymentIntent
      summary: Create Stripe PaymentIntent for booking deposit
      description: Creates a Stripe PaymentIntent on the captain's Connect account for an existing marketplace booking in PENDING_DEPOSIT status. Public endpoint — no authentication required.
      tags:
      - Marketplace
      security: []
      parameters:
      - schema:
          type: string
        required: true
        name: bookingId
        in: path
      responses:
        '201':
          description: PaymentIntent created
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      clientSecret:
                        type: string
                      stripeAccountId:
                        type: string
                    required:
                    - clientSecret
                    - stripeAccountId
                required:
                - data
        '400':
          $ref: '#/components/responses/ValidationError'
        '404':
          $ref: '#/components/responses/NotFound'
  /api/v1/marketplace/rentals/{rentalId}/deposit-payment-intent:
    post:
      operationId: postMarketplaceRentalDepositPaymentIntent
      summary: Create Stripe PaymentIntent for rental deposit
      description: Creates a Stripe PaymentIntent on the boat owner's Connect account for an existing marketplace rental in PENDING_DEPOSIT status. Public endpoint — no authentication required.
      tags:
      - Marketplace
      security: []
      parameters:
      - schema:
          type: string
        required: true
        name: rentalId
        in: path
      responses:
        '201':
          description: PaymentIntent created
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      clientSecret:
                        type: string
                      stripeAccountId:
                        type: string
                    required:
                    - clientSecret
                    - stripeAccountId
                required:
                - data
        '400':
          $ref: '#/components/responses/ValidationError'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  schemas:
    BoatProfile:
      type: object
      required:
      - id
      - name
      - type
      - photos
      - capacity
      - harbor
      - ownerName
      - rating
      - reviewCount
      properties:
        id:
          type: string
        name:
          type: string
        type:
          type: string
        photos:
          type: array
          items:
            type: string
        capacity:
          type: integer
        pricingTiers:
          type: array
          items:
            $ref: '#/components/schemas/BoatPricingTier'
        durations:
          type: array
          description: Bookable trip lengths for the boat's owner tenant. `id` is the durationId required when creating a rental.
          items:
            type: object
            required:
            - id
            - hours
            - label
            - sortOrder
            properties:
              id:
                type: string
              hours:
                type: integer
              label:
                type: string
              sortOrder:
                type: integer
        harbor:
          type: string
        ownerName:
          type: string
        rating:
          type: number
        reviewCount:
          type: integer
        features:
          type: array
          items:
            type: string
          nullable: true
        rules:
          type: string
          nullable: true
        depositType:
          type: string
          enum:
          - FIXED
          - PERCENTAGE
          nullable: true
        depositValue:
          type: integer
          nullable: true
        cancellationWindowDays:
          type: integer
          nullable: true
    Booking:
      type: object
      required:
      - id
      - captainId
      - date
      - status
      properties:
        id:
          type: string
        captainId:
          type: string
        date:
          type: string
          format: date-time
        startTime:
          type: string
          nullable: true
        endTime:
          type: string
          nullable: true
        status:
          type: string
          enum:
          - PENDING_DEPOSIT
          - DEPOSIT_PAID
          - CONFIRMED
          - COMPLETED
          - CANCELLED
          - WEATHER_CANCELLED
        totalPrice:
          type: number
          nullable: true
        notes:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
        customer:
          $ref: '#/components/schemas/Customer'
        harbor:
          $ref: '#/components/schemas/Harbor'
        duration:
          $ref: '#/components/schemas/Duration'
        payments:
          type: array
          items:
            $ref: '#/components/schemas/Payment'
        weatherChecks:
          type: array
          items:
            $ref: '#/components/schemas/WeatherCheck'
        notifications:
          type: array
          items:
            $ref: '#/components/schemas/Notification'
    Harbor:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        city:
          type:
          - string
          - 'null'
        state:
          type:
          - string
          - 'null'
        lat:
          type:
          - number
          - 'null'
        lng:
          type:
          - number
          - 'null'
        sortOrder:
          type: integer
        isActive:
          type: boolean
      required:
      - id
      - name
      - isActive
    PublicReview:
      type: object
      required:
      - id
      - rating
      - authorName
      - createdAt
      properties:
        id:
          type: string
        rating:
          type: integer
          minimum: 1
          maximum: 5
        comment:
          type: string
          nullable: true
        authorName:
          type: string
        createdAt:
          type: string
          format: date-time
    Notification:
      type: object
      properties:
        id:
          type: string
        bookingId:
          type: string
        type:
          type: string
        sentAt:
          type: string
          format: date-time
        status:
          type: string
    Customer:
      type: object
      required:
      - id
      - firstName
      - lastName
      - email
      properties:
        id:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
          nullable: true
        notes:
          type: string
          nullable: true
        createdAt:
          type: string
          format: date-time
    WeatherCheck:
      type: object
      properties:
        id:
          type: string
        bookingId:
          type: string
        checkedAt:
          type: string
          format: date-time
        hasAdvisory:
          type: boolean
        advisoryType:
          type: string
          nullable: true
        windSpeed:
          type: number
          nullable: true
        waveHeight:
          type: number
          nullable: true
        forecast:
          type: string
          nullable: true
    PricingTier:
      type: object
      properties:
        id:
          type: string
        captainId:
          type: string
        name:
          type: string
        ratePerHour:
          type:
          - number
          - 'null'
        isActive:
          type: boolean
      required:
      - id
      - captainId
      - name
    PaginationMeta:
      type: object
      properties:
        page:
          type: integer
        limit:
          type: integer
        total:
          type: integer
      required:
      - page
      - limit
      - total
    BoatPricingTier:
      type: object
      required:
      - id
      - name
      - ratePerHour
      - daysOfWeek
      - isSpecialRate
      properties:
        id:
          type: string
        name:
          type: string
        ratePerHour:
          type: number
        daysOfWeek:
          type: array
          items:
            type: integer
            minimum: 0
            maximum: 6
        isSpecialRate:
          type: boolean
    Duration:
      type: object
      properties:
        id:
          type: string
        hours:
          type: integer
        label:
          type: string
        isActive:
          type: boolean
        sortOrder:
          type: integer
      required:
      - id
      - hours
      - label
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            message:
              type: string
            code:
              type: string
          required:
          - message
          - code
      required:
      - error
    CaptainProfile:
      type: object
      required:
      - slug
      - name
      - defaultHarbor
      - rating
      - reviewCount
      - startingPrice
      properties:
        slug:
          type: string
        name:
          type: string
        bio:
          type: string
          nullable: true
        profileImageUrl:
          type: string
          nullable: true
        defaultHarbor:
          type: string
          nullable: true
          deprecated: true
          description: 'Deprecated: use harbors[]. This field returns the home harbor name. Removed in a future release.'
        harbors:
          type: array
          items:
            type: object
            properties:
              harborId:
                type: string
              isHome:
                type: boolean
              name:
                type: string
            required:
            - harborId
            - isHome
            - name
        rating:
          type: number
        reviewCount:
          type: integer
        startingPrice:
          type: number
        depositType:
          type: string
          enum:
          - FIXED
          - PERCENTAGE
          nullable: true
        depositValue:
          type: integer
          nullable: true
        windowDays:
          type: integer
          nullable: true
        depositRefundable:
          type: boolean
          nullable: true
        weatherCancellationPolicy:
          type: string
          nullable: true
        availableDurations:
          type: array
          items:
            $ref: '#/components/schemas/Duration'
        pricingTiers:
          type: array
          items:
            $ref: '#/components/schemas/PricingTier'
    MarketplaceBoat:
      type: object
      required:
      - id
      - name
      - type
      - photos
      - capacity
      - harbor
      - ownerName
      - rating
      - reviewCount
      properties:
        id:
          type: string
        name:
          type: string
        type:
          type: string
        photos:
          type: array
          items:
            type: string
        capacity:
          type: integer
        minRatePerHour:
          type: number
          nullable: true
        maxRatePerHour:
          type: number
          nullable: true
        harbor:
          type: string
        ownerName:
          type: string
        rating:
          type: number
        reviewCount:
          type: integer
    MarketplaceCaptain:
      type: object
      required:
      - slug
      - name
      - defaultHarbor
      - rating
      - reviewCount
      - startingPrice
      properties:
        slug:
          type: string
        name:
          type: string
        bio:
          type: string
          nullable: true
        profileImageUrl:
          type: string
          nullable: true
        defaultHarbor:
          type: string
          nullable: true
          deprecated: true
          description: 'Deprecated: use harbors[]. This field returns the home harbor name. Removed in a future release.'
        harbors:
          type: array
          items:
            type: object
            properties:
              harborId:
                type: string
              isHome:
                type: boolean
              name:
                type: string
            required:
            - harborId
            - isHome
            - name
        rating:
          type: number
        reviewCount:
          type: integer
        startingPrice:
          type: number
    Review:
      type: object
      required:
      - id
      - rentalId
      - rating
      - authorName
      - createdAt
      - updatedAt
      properties:
        id:
          type: string
        rentalId:
          type: string
        captainId:
          type: string
          nullable: true
        boatId:
          type: string
          nullable: true
        rating:
          type: integer
          minimum: 1
          maximum: 5
        comment:
          type: string
          nullable: true
        authorName:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    Payment:
      type: object
      required:
      - id
      - amount
      - type
      - status
      properties:
        id:
          type: string
        bookingId:
          type: string
        amount:
          type: number
        type:
          type: string
          enum:
          - DEPOSIT
          - BALANCE
          - TIP
          - REFUND
        status:
          type: string
          enum:
          - PENDING
          - SUCCEEDED
          - FAILED
          - REFUNDED
        createdAt:
          type: string
          format: date-time
  responses:
    NotFound:
      description: The requested resource does not exist (existence is not leaked).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ValidationError:
      description: Request body or query parameters failed validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Clerk JWT token