Framebridge
Framebridge's real custom picture-framing catalog and CPQ pricing engine — search real frame styles, read a style's real sizes and the site's live mat…
Framebridge's real custom picture-framing catalog and CPQ pricing engine — search real frame styles, read a style's real sizes and the site's live mat catalog, and price an exact frame + size + mat build against Framebridge's own pricing engine rather than a researched estimate.
Domain: framebridge.com
Also known as: Framebridge, framebridge, Framebridge Inc, framebridge.com
Call it directly
bowmark.providers.framebridge.listFrameStyles(query?: string): Promise<FramebridgeFrameStyle[]>
bowmark.providers.framebridge.getConfigurator(productId: string): Promise<FramebridgeConfigurator>
bowmark.providers.framebridge.priceConfiguration(productId: string, selections: { size: string, conveyance?: "Digital" | "Physical", mats?: string[] }): Promise<FramebridgePriceResult>Functions
| Function | What it does |
|---|---|
listFrameStyles | Searches Framebridge's real custom-framing catalog via the site's own Shopify Storefront MCP, filtered to genuine build-your-own frame styles (never gift bundles or readymade tabletop… |
getConfigurator | Reads one frame style's real live configurator: every Size x Conveyance variant with its own real price, plus the site's current global mat catalog (color, style, standard-vs-premium).… |
priceConfiguration | Prices ONE specific build (frame style + size + conveyance + up to a primary and accent mat) against Framebridge's own live CPQ engine and returns the real itemized total plus a handoffUrl… |
Types
// Framebridge's OWN shapes — not a capability contract.
interface FramebridgeFrameStyle {
productId: string; // the key getConfigurator/priceConfiguration take
handle: string; // the site's own product/moulding permalink
title: string;
url: string;
priceRangeMin: number; // dollars — the cheapest size x conveyance combo
priceRangeMax: number;
}
interface FramebridgeSizeOption {
size: string; // "XS" | "S" | "M" | "L" | "XL" | "GR" | "XG" | "MG"
conveyance: "Digital" | "Physical";
price: number; // this exact combination's own real price
variantId: string;
}
interface FramebridgeMatOption {
code: string; // the value priceConfiguration's mats[] takes, e.g. "WH02"
presentation: string; // e.g. "White"
hexColor: string;
style: string; // "" | "linen" | "silk" | "metallic" | "8-ply" | "pattern" | "gingham" | "art-deco" | "farrow-and-ball"
standard: boolean; // true = free-tier solid color
}
interface FramebridgeConfigurator {
productId: string;
handle: string;
title: string;
sizes: FramebridgeSizeOption[];
mats: FramebridgeMatOption[];
}
interface FramebridgePriceLine { key: string; amount: number; presentation: string }
interface FramebridgePriceResult {
productId: string;
handle: string;
size: string;
conveyance: "Digital" | "Physical";
totalPrice: number; // the real, itemized total
breakdown: FramebridgePriceLine[];
readyForCheckout: boolean; // false until a real photo is uploaded on the site itself
issues: string[]; // the site's own validation messages, e.g. "artwork: can't be blank"
handoffUrl: string; // the real product page to finish the exact build
}Examples
// What would an S/Digital Irvine Slim with a black accent mat actually cost?
const styles = await bowmark.providers.framebridge.listFrameStyles("irvine slim");
const irvine = styles.find((s) => s.title === "Irvine Slim");
const priced = await bowmark.providers.framebridge.priceConfiguration(irvine.productId, {
size: "S",
conveyance: "Digital",
mats: ["WH02", "BL42"],
});
return { total: priced.totalPrice, finishOnSite: priced.handoffUrl };// What sizes and mat colors does a given frame style actually offer?
const config = await bowmark.providers.framebridge.getConfigurator("8671405474107");
return {
sizes: config.sizes.map((s) => `${s.size} / ${s.conveyance}: $${s.price}`),
mats: config.mats.filter((m) => m.standard).map((m) => m.presentation),
};