Bowmark AIdocs

Barletta Boats

Barletta's pontoon-boat 'Build Your Boat' configurator — list every current floorplan, read one model's full option builder (railskin color, furniture,…

Barletta's pontoon-boat 'Build Your Boat' configurator — list every current floorplan, read one model's full option builder (railskin color, furniture, flooring, engine, rigging, helm and more, each choice's exact price), and price a specific build against the site's own live pricing table rather than a researched estimate.

Domain: barlettapontoonboats.com

Also known as: Barletta, Barletta Boats, barlettapontoonboats.com, Barletta Pontoon Boats

Call it directly

bowmark.providers.barletta.searchModels(query?: string): Promise<BarlettaModelSummary[]>
bowmark.providers.barletta.getConfigurator(modelId: string): Promise<BarlettaConfigurator>
bowmark.providers.barletta.priceConfiguration(modelId: string, selections: Record<string, string>): Promise<BarlettaPriceResult>

Functions

FunctionWhat it does
searchModelsLists every current Barletta floorplan from the public "Build Your Pontoon Boat" gallery — model id, name and its builder URL.
getConfiguratorReads one model's whole builder: every option group (Railskin Color, Furniture, Flooring, an engine brand group like Mercury, Rigging, Helm and more — the exact set varies by model) with…
priceConfigurationPrices ONE specific build — selections keyed by option group (case-insensitive), e.g. { "Railskin Color": "Black Diamond", "Helm": "Eagle 5 GPS" } — against the model's live builder and…

Types

// Barletta's OWN shapes — not a capability contract.

interface BarlettaModelSummary { modelId: string; name: string; url: string }

interface BarlettaOptionChoice {
  id: number;
  ref: string;             // the site's part-number-like ref, often blank
  label: string;
  priceDelta: number;
  priceDeltaFormatted: string;
  isDefault: boolean;       // true if the page loads with this choice already picked
}

interface BarlettaOptionGroup {
  category: string;         // top-level section, e.g. "Engine", "Styling"
  group: string;            // the key priceConfiguration's selections are matched against, e.g. "Railskin Color", "Mercury", "Helm"
  choices: BarlettaOptionChoice[];
}

interface BarlettaConfigurator {
  modelId: string;
  name: string;
  url: string;
  basePrice: number;
  basePriceFormatted: string;
  groups: BarlettaOptionGroup[];
}

interface BarlettaPriceLine { group: string; choice: string; priceDelta: number }

interface BarlettaPriceResult {
  modelId: string;
  total: number;
  totalFormatted: string;
  breakdown: BarlettaPriceLine[];   // one line per group — the caller's pick, or the site's own default
  unmatched: string[];              // a caller selection that matched no real group/choice
  unresolvedGroups: string[];       // a group with no caller pick AND no site default (e.g. Engine) — total is a FLOOR until these are picked
  handoffUrl: string;               // the model's own builder page — no shareable configured-state URL exists to build
}

Examples

// Price a build on the current builder's own first Aria floorplan — model
// ids roll over with Barletta's model year, so look one up rather than
// pinning a number that next year's lineup will have retired.
const [model] = await bowmark.providers.barletta.searchModels("aria");
const priced = await bowmark.providers.barletta.priceConfiguration(model.modelId, {
  "Railskin Color": "Black Diamond",
  "Rigging": "Make Water Ready w/ Stainless Steel Prop",
  "Helm": "Eagle 5 GPS",
});
return { total: priced.totalFormatted, stillToPick: priced.unresolvedGroups, buildThisOn: priced.handoffUrl };
// What floorplans exist, and what does one's builder actually offer?
const models = await bowmark.providers.barletta.searchModels("aria");
const cat = await bowmark.providers.barletta.getConfigurator(models[0].modelId);
const engines = cat.groups.filter((g) => g.category === "Engine");
return { model: cat.name, base: cat.basePriceFormatted, engineBrands: engines.map((g) => g.group) };