{
  "opencollection": "1.0.0",
  "info": {
    "name": "Launch27 API",
    "version": "2.1"
  },
  "request": {
    "auth": {
      "type": "bearer",
      "token": "{{bearerToken}}"
    }
  },
  "items": [
    {
      "info": { "name": "Authentication", "type": "folder" },
      "items": [
        {
          "info": { "name": "Login.", "type": "http" },
          "http": {
            "method": "POST",
            "url": "https://{{tenant}}.launch27.com/v1/login",
            "body": { "type": "json", "data": "{ \"email\": \"user@email.com\", \"password\": \"trustno1\" }" }
          },
          "docs": "Authenticate and return a JWT bearer token used for subsequent authenticated requests."
        }
      ]
    },
    {
      "info": { "name": "Account", "type": "folder" },
      "items": [
        {
          "info": { "name": "Get settings.", "type": "http" },
          "http": { "method": "GET", "url": "https://{{tenant}}.launch27.com/v1/settings" },
          "docs": "Returns account settings; response varies by authentication state, user type, and feature availability."
        }
      ]
    },
    {
      "info": { "name": "Booking Helpers", "type": "folder" },
      "items": [
        {
          "info": { "name": "Get booking form setup.", "type": "http" },
          "http": { "method": "GET", "url": "https://{{tenant}}.launch27.com/v1/booking/form" },
          "docs": "Returns booking form headings, system fields, paragraphs, and appearance settings."
        },
        {
          "info": { "name": "Get services for booking.", "type": "http" },
          "http": {
            "method": "GET",
            "url": "https://{{tenant}}.launch27.com/v1/booking/services",
            "params": [
              { "name": "booking_uuid", "value": "", "type": "query", "description": "Booking digest; required (and requires auth) for an existing booking." },
              { "name": "location_id", "value": "", "type": "query", "description": "Unique ID of location; default location used if omitted." }
            ]
          },
          "docs": "Returns list of services, extras, and pricing parameters available for booking."
        },
        {
          "info": { "name": "Get spots for booking.", "type": "http" },
          "http": {
            "method": "POST",
            "url": "https://{{tenant}}.launch27.com/v1/booking/spots",
            "body": { "type": "json", "data": "{ \"date\": \"2026-08-15\", \"days\": 5, \"mode\": \"new\" }" }
          },
          "docs": "Returns spots available for booking on given date, mode (new or reschedule), and number of days."
        },
        {
          "info": { "name": "Get location for booking address.", "type": "http" },
          "http": {
            "method": "POST",
            "url": "https://{{tenant}}.launch27.com/v1/booking/location",
            "body": { "type": "json", "data": "{ \"zip\": \"94105\" }" }
          },
          "docs": "Returns location based on provided address details."
        },
        {
          "info": { "name": "Get frequencies for booking.", "type": "http" },
          "http": {
            "method": "GET",
            "url": "https://{{tenant}}.launch27.com/v1/booking/frequencies",
            "params": [
              { "name": "booking_uuid", "value": "", "type": "query", "description": "Booking digest; required (and requires auth) for an existing booking." },
              { "name": "location_id", "value": "", "type": "query", "description": "Unique ID of location; default location used if omitted." }
            ]
          },
          "docs": "Returns list of configured booking frequencies for new or existing booking."
        },
        {
          "info": { "name": "Get next booking date for frequency.", "type": "http" },
          "http": {
            "method": "POST",
            "url": "https://{{tenant}}.launch27.com/v1/booking/frequencies/:id/next",
            "params": [
              { "name": "id", "value": "", "type": "path", "description": "Frequency unique ID." }
            ],
            "body": { "type": "json", "data": "{ \"date\": \"2026-08-06T13:30:00\" }" }
          },
          "docs": "Returns next booking date for a recurring frequency and given date."
        },
        {
          "info": { "name": "Get custom fields for booking.", "type": "http" },
          "http": {
            "method": "GET",
            "url": "https://{{tenant}}.launch27.com/v1/booking/custom_fields",
            "params": [
              { "name": "booking_uuid", "value": "", "type": "query", "description": "Booking digest; required (and requires auth) for an existing booking." }
            ]
          },
          "docs": "Returns list of booking custom fields."
        },
        {
          "info": { "name": "Estimate booking price.", "type": "http" },
          "http": {
            "method": "POST",
            "url": "https://{{tenant}}.launch27.com/v1/booking/estimate_price",
            "body": { "type": "json", "data": "{ \"service_date\": \"2026-08-15T10:00:00\", \"frequency_id\": 1, \"services\": [{ \"id\": 1 }] }" }
          },
          "docs": "Estimates price for a booking and returns a detailed price/discount/tax breakdown."
        }
      ]
    },
    {
      "info": { "name": "Policy", "type": "folder" },
      "items": [
        {
          "info": { "name": "Get new booking policy.", "type": "http" },
          "http": { "method": "GET", "url": "https://{{tenant}}.launch27.com/v1/policy/booking" },
          "docs": "Returns the new-booking lead-time policy details."
        },
        {
          "info": { "name": "Get reschedule policy.", "type": "http" },
          "http": { "method": "GET", "url": "https://{{tenant}}.launch27.com/v1/policy/reschedule" },
          "docs": "Returns the reschedule lead-time policy details."
        },
        {
          "info": { "name": "Get cancellation policy.", "type": "http" },
          "http": { "method": "GET", "url": "https://{{tenant}}.launch27.com/v1/policy/cancellation" },
          "docs": "Returns the late-cancellation fee/percentage and reason-required policy."
        },
        {
          "info": { "name": "Get location policy.", "type": "http" },
          "http": { "method": "GET", "url": "https://{{tenant}}.launch27.com/v1/policy/location" },
          "docs": "Returns the prevent-booking-if-location-not-found policy for multi-location accounts."
        }
      ]
    },
    {
      "info": { "name": "Guest Booking", "type": "folder" },
      "items": [
        {
          "info": { "name": "Create booking as non-logged-in.", "type": "http" },
          "http": {
            "method": "POST",
            "url": "https://{{tenant}}.launch27.com/v1/booking",
            "body": { "type": "json", "data": "{ \"user\": { \"email\": \"user@email.com\", \"first_name\": \"First\", \"last_name\": \"Last\" }, \"address\": \"595 Market St\", \"city\": \"San Francisco\", \"state\": \"CA\", \"zip\": \"94105\", \"phone\": \"462-485-0790\", \"frequency_id\": 1, \"service_date\": \"2026-08-15T09:30:00\", \"arrival_window\": 0, \"services\": [{ \"id\": 1 }], \"payment_method\": \"cash\" }" }
          },
          "docs": "Creates a new booking as a first-time, non-logged-in customer."
        }
      ]
    },
    {
      "info": { "name": "Customer Bookings", "type": "folder" },
      "items": [
        {
          "info": { "name": "List bookings for customer.", "type": "http" },
          "http": {
            "method": "GET",
            "url": "https://{{tenant}}.launch27.com/v1/customer/bookings",
            "params": [
              { "name": "from", "value": "", "type": "query", "description": "Start of date range." },
              { "name": "to", "value": "", "type": "query", "description": "End of date range." },
              { "name": "query", "value": "", "type": "query", "description": "Free-text search across address, city, phone." },
              { "name": "options", "value": "", "type": "query", "description": "Comma-separated: completed, not_completed, with_feedback, without_feedback." },
              { "name": "limit", "value": "", "type": "query", "description": "Page size." },
              { "name": "offset", "value": "", "type": "query", "description": "Page offset." },
              { "name": "sort", "value": "", "type": "query", "description": "asc or desc (default desc)." }
            ]
          },
          "docs": "Returns active bookings for the logged-in customer."
        },
        {
          "info": { "name": "Count bookings for customer.", "type": "http" },
          "http": { "method": "GET", "url": "https://{{tenant}}.launch27.com/v1/customer/bookings/count" },
          "docs": "Returns count of active bookings for the current customer user."
        },
        {
          "info": { "name": "Create booking for customer.", "type": "http" },
          "http": {
            "method": "POST",
            "url": "https://{{tenant}}.launch27.com/v1/customer/bookings",
            "body": { "type": "json", "data": "{ \"address\": \"595 Market St\", \"city\": \"San Francisco\", \"state\": \"CA\", \"zip\": \"94105\", \"phone\": \"462-485-0790\", \"frequency_id\": 2, \"service_date\": \"2026-08-20T09:30:00\", \"arrival_window\": 0, \"services\": [{ \"id\": 1 }], \"payment_method\": \"cash\" }" }
          },
          "docs": "Creates a new booking as the logged-in customer, including 'Book This Again' via original_booking_id."
        },
        {
          "info": { "name": "Get booking for customer.", "type": "http" },
          "http": {
            "method": "GET",
            "url": "https://{{tenant}}.launch27.com/v1/customer/bookings/:id",
            "params": [
              { "name": "id", "value": "", "type": "path", "description": "Booking unique ID." }
            ]
          },
          "docs": "Returns a single booking's full detail."
        },
        {
          "info": { "name": "Update booking for customer.", "type": "http" },
          "http": {
            "method": "PUT",
            "url": "https://{{tenant}}.launch27.com/v1/customer/bookings/:id",
            "params": [
              { "name": "id", "value": "", "type": "path", "description": "Booking unique ID." }
            ],
            "body": { "type": "json", "data": "{}" }
          },
          "docs": "Updates or reschedules an existing booking."
        },
        {
          "info": { "name": "Cancel booking for customer.", "type": "http" },
          "http": {
            "method": "POST",
            "url": "https://{{tenant}}.launch27.com/v1/customer/bookings/:id/cancel",
            "params": [
              { "name": "id", "value": "", "type": "path", "description": "Booking unique ID." }
            ],
            "body": { "type": "json", "data": "{ \"confirmed_late\": false, \"reason\": \"booked by mistake\" }" }
          },
          "docs": "Cancels an existing booking and creates the next recurring booking if applicable."
        }
      ]
    }
  ]
}
