FleetbaseFleetbase

Products

Products are the items and services customers can browse and add to carts. Use product endpoints to list, retrieve, create, or update catalog items with pricing, media, variants, addons, and availability.

The Product object

A product is an item or service sold through a storefront, including pricing, availability, media, variants, addons, and tags.
Attributes
idstringoptional

Public identifier of the product.

namestringoptional

Product name.

descriptionstringoptional

Product description.

skustringoptional

Stock keeping unit.

primary_image_urlstringoptional

Primary product image URL.

priceintegeroptional

Product price.

sale_priceintegeroptional

Sale price when the product is on sale.

currencycurrencyoptional

Product currency code.

is_availablebooleanoptional

Whether the product is available for purchase.

track_inventorybooleanoptional

Whether the store tracks stock for this product. Off by default; products that don't track stock are never limited by it.

inventoryobjectoptional

Stock as clients show it: \{ tracked, in_stock, available_total, low, locations \}. Untracked products return \{ "tracked": false, "in_stock": true, "available_total": null, "low": false, "locations": [] \}. Each location is \{ id, location, location_type, quantity, reserved, available, low_stock_threshold, allow_backorder, low \}: location is the store location or food truck public ID and location_type is store_location or food_truck; quantity is on hand, reserved is held by checkouts in progress (for 15 minutes), available is what can still be sold, and low is true while some stock is available but no more than low_stock_threshold. in_stock is true when any location has stock available or allows backorders.

in_stockbooleanoptional

Whether the product can be sold now: false when is_available is false, or when it tracks stock and no location has any available (or allows backorders). Use it for out of stock labels; inventory.available_total for "only N left".

tagsarray of stringsoptional

Product tags.

statusstringoptional

Product status.

metaobjectoptional

Arbitrary metadata stored with the product.

addon_categoriesarray of objectsoptional

Addon categories available for the product: id, name, description, is_required (the customer must choose at least one), max_selectable (most add-ons that can be chosen, or null for no limit), excluded_addons and addons.

variantsarray of objectsoptional

Product variants and options.

imagesarray of stringsoptional

Product image URLs.

videosarray of stringsoptional

Product video URLs.

hoursarray of objectsoptional

Product availability hours.

created_attimestampoptional

Time the product was created.

updated_attimestampoptional

Time the product was last updated.

The Product object
{
  "id": "product_9Lb2mQ1",
  "name": "Cold Brew",
  "description": "Bottled cold brew coffee.",
  "sku": "CB-12",
  "primary_image_url": "https://files.example.com/cold-brew.png",
  "price": 450,
  "sale_price": null,
  "currency": "USD",
  "is_on_sale": false,
  "is_recommended": true,
  "is_service": false,
  "is_bookable": false,
  "is_available": true,
  "track_inventory": true,
  "inventory": {
    "tracked": true,
    "in_stock": true,
    "available_total": 3,
    "low": true,
    "locations": [
      {
        "id": "inventory_4Kd9wP2",
        "location": "store_location_7Nx2bQ5",
        "location_type": "store_location",
        "quantity": 5,
        "reserved": 2,
        "available": 3,
        "low_stock_threshold": 5,
        "allow_backorder": false,
        "low": true
      }
    ]
  },
  "in_stock": true,
  "tags": [
    "coffee"
  ],
  "status": "published",
  "meta": {},
  "slug": "cold-brew",
  "translations": [],
  "addon_categories": [
    {
      "id": "category_2Fd8kL1",
      "name": "Extras",
      "description": null,
      "is_required": false,
      "max_selectable": 2,
      "excluded_addons": [],
      "addons": [
        {
          "id": "product_addon_5Gh7jK2",
          "name": "Oat milk",
          "description": null,
          "price": 80,
          "sale_price": null,
          "is_on_sale": false
        }
      ]
    }
  ],
  "variants": [],
  "images": [],
  "videos": [],
  "hours": [],
  "youtube_urls": [],
  "created_at": "2026-05-07T09:30:00Z",
  "updated_at": "2026-05-07T09:30:00Z"
}
GET/v1/products

Query Products

Returns published, available products for the authenticated store or network. With a network key, products are restricted to active network members and can be scoped to a member store or one of that store's categories.

Query parameters
querystringoptional

Search published products available through the current store or network.

storestringoptional

Network member store public ID. Ignored for store-scoped keys.

categorystringoptional

Product category public ID belonging to the selected store scope.

with_storebooleanoptional

Include the product's hydrated member store and media.

limitintegeroptional

Maximum number of products to return.

offsetintegeroptional

Number of matching products to skip.

GET/v1/products
curl https://api.fleetbase.io/v1/products?query=&store=&category=&with_store=true&limit=&offset= \
  -H "Authorization: Bearer flb_live_…"
POST/v1/products

Create Product

Create Product

Body parameters
namestringrequired

Display name for the resource.

descriptionstringoptional

Human-readable description of the resource.

priceintegeroptional

Price for the item or entity.

POST/v1/products
curl -X POST https://api.fleetbase.io/v1/products \
  -H "Authorization: Bearer flb_live_…" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Example Product",
  "description": "Example storefront product",
  "price": 1000
}'
GET/v1/products

Retrieve a Product

Retrieves a single storefront product by ID, with its details, pricing, variants and add-on categories (is_required, max_selectable). With a network key, only published, available products of active member stores are found. A product outside the storefront returns 404.

GET/v1/products
curl https://api.fleetbase.io/v1/products \
  -H "Authorization: Bearer flb_live_…"
GET/v1/products/slots

List Product Booking Slots

Returns the times a bookable service can be booked on a day. Slots are the service's hours for that weekday (else the store's first location's hours), cut into slots of the service's length, each with how many places are left. Times are in the store's time zone (else the company's, else the server's). Bookings of the service take quantity places in their slot; canceled, expired and failed orders give their places back.

Response: { date, service: { duration_minutes, capacity, deposit_percent, travel_fee, provider_tag }, slots: [{ start, end, time, past, available, remaining, providers, capacity }] }. start and end are ISO 8601 with the store's offset and time is the store's local HH:mm. past is true once the slot has started; available is true when the slot is still ahead and has places left; remaining (also reported as providers) is the places left out of capacity. duration_minutes defaults to 60 and capacity to 1. deposit_percent and travel_fee are reported as configured on the service but are not charged at checkout.

Book a slot by adding the service to the cart with its start as the line's scheduled_at. If a slot the service's hours define fills up before checkout, initializing the checkout returns 422 with "code": "booking_slot_unavailable".

Errors: 404 (Bookable service not found.) when the product isn't bookable or isn't in this store or network; 422 when date is missing or not YYYY-MM-DD.

In a contract run this addresses {{service_product_id}} when the environment sets one (a bookable service with hours). Otherwise it addresses the run's product, which isn't bookable, and asserts the 404.

Query parameters
datestringrequired

The day to list, YYYY-MM-DD, in the store's time zone.

GET/v1/products/slots
curl https://api.fleetbase.io/v1/products/slots?date={{slot_date}} \
  -H "Authorization: Bearer flb_live_…"
PUT/v1/products

Update Product

Update Product

Body parameters
namestringoptional

Display name for the resource.

descriptionstringoptional

Human-readable description of the resource.

priceintegeroptional

Price for the item or entity.

PUT/v1/products
curl -X PUT https://api.fleetbase.io/v1/products \
  -H "Authorization: Bearer flb_live_…" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Updated Product",
  "description": "Updated storefront product",
  "price": 1000
}'
Products | Fleetbase