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
| Function | What it does |
|---|---|
searchModels | Lists every current Barletta floorplan from the public "Build Your Pontoon Boat" gallery — model id, name and its builder URL. |
getConfigurator | Reads 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… |
priceConfiguration | Prices 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) };