Bowmark AIdocs

DecksDirect

DecksDirect's decking/railing catalog — search live inventory, read one product's real configurable options (pack size, color, size) with each…

DecksDirect's decking/railing catalog — search live inventory, read one product's real configurable options (pack size, color, size) with each combination's exact price and stock status, and resolve a specific configuration to its real variant rather than a researched estimate.

Domain: decksdirect.com

Also known as: DecksDirect, DecksDirect.com, Decks Direct

Call it directly

bowmark.providers.decksdirect.searchProducts(query: string): Promise<DdProductSummary[]>
bowmark.providers.decksdirect.getProduct(urlKey: string): Promise<DdProduct>
bowmark.providers.decksdirect.priceConfiguration(urlKey: string, selections: Record<string, string>): Promise<DdPriceResult>
bowmark.providers.decksdirect.addToCart(urlKey: string, selections: Record<string, string>): Promise<DdCartHandoff>

Functions

FunctionWhat it does
searchProductsSearches DecksDirect's decking/railing/hardware catalog by free text (e.g. "composite decking", "deck screws") and returns every match's urlKey, SKU, name, entry URL, stock status and…
getProductReads one product's full configurable-option set (e.g. Pack Size, Color) with each choice's real label, plus every real buildable variant's exact price and stock status.
priceConfigurationResolves ONE specific configuration — selections keyed by option group (case-insensitive), e.g. { "Pack Size": "350 pack", "Color": "Havana Gold" } — against the product's live options and…
addToCartTurns a configuration into the handoff you give the shopper: DecksDirect's own product page URL plus the exact choices to click there, since this storefront does not honour a query-param…

Types

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

interface DdProductSummary {
  urlKey: string;              // the key getProduct takes
  sku: string;
  name: string;
  url: string;
  stockStatus: string;         // "IN_STOCK" | "OUT_OF_STOCK"
  basePrice: number;
  basePriceFormatted: string;  // "$9.96"
}

interface DdOptionChoice { label: string; valueIndex: number }

interface DdOption {
  groupLabel: string;          // "Pack Size", "Color" — the real group name
  attributeCode: string;
  choices: DdOptionChoice[];
}

interface DdVariant {
  sku: string;
  stockStatus: string;
  price: number;
  priceFormatted: string;
  selections: Record<string, number>; // attributeCode -> valueIndex
}

interface DdProduct {
  urlKey: string;
  sku: string;
  name: string;
  url: string;
  stockStatus: string;
  basePrice: number;
  basePriceFormatted: string;
  options: DdOption[];
  variants: DdVariant[];
}

interface DdPriceResult {
  urlKey: string;
  sku: string;
  variantSku: string | null;   // null until every multi-choice group is picked
  stockStatus: string | null;
  price: number | null;
  priceFormatted: string | null;
  applied: { group: string; choice: string }[];
  missingGroups: string[];     // groups with >1 choice and no selection applied
  unmatched: string[];         // selections that didn't match a real group/choice
  handoffUrl: string;          // the product's entry page
}

interface DdCartHandoff {
  urlKey: string;
  sku: string;
  name: string;
  url: string;                 // the product page — DecksDirect publishes no query-param deep link
  applied: { group: string; choice: string }[];
  price: number | null;
  priceFormatted: string | null;
  stockStatus: string | null;
  missingGroups: string[];
  unmatched: string[];
}

Examples

// What does the Beach Dune, 1050-pack option of a specific screw actually cost, and is it in stock?
const priced = await bowmark.providers.decksdirect.addToCart("trapease-3-composite-deck-screw-by-fastenmaster", { "Pack Size": "1050 pack", Color: "Beach Dune" });
return { openThis: priced.url, price: priced.priceFormatted, inStock: priced.stockStatus === "IN_STOCK", pick: priced.applied };
// Find composite decking, then price one specific board.
const matches = await bowmark.providers.decksdirect.searchProducts("composite decking");
const board = matches[0];
const priced = await bowmark.providers.decksdirect.priceConfiguration(board.urlKey, { Color: "Beach Dune" });
return { total: priced.priceFormatted, missing: priced.missingGroups, siteUrl: priced.handoffUrl };