Brixton
Brixton apparel and headwear catalogue — every product, its size/color variants, real prices and stock — read off the live Shopify storefront, plus a…
Brixton apparel and headwear catalogue — every product, its size/color variants, real prices and stock — read off the live Shopify storefront, plus a live-validated checkout handoff link.
Domain: brixton.com
Also known as: brixton, Brixton, Brixton Ltd
Call it directly
bowmark.providers.brixton.listBrixtonProducts(opts?: { limit?: number }): Promise<BrixtonProduct[]>
bowmark.providers.brixton.getBrixtonProduct(handle: string): Promise<BrixtonProduct>
bowmark.providers.brixton.getBrixtonCheckoutLink(handle: string, variantTitleOrOptions: string, opts?: { quantity?: number }): Promise<BrixtonCheckoutLink>Functions
| Function | What it does |
|---|---|
listBrixtonProducts | Reads the live Brixton catalogue as the storefront publishes it — every product, its handle, title, vendor, description, tags, images and the per-variant price the storefront is quoting… |
getBrixtonProduct | Reads one product by its handle — every size/color variant, its exact price and whether that specific variant is purchasable right now. |
getBrixtonCheckoutLink | Resolves a product handle + a variant match (either the exact variant title like "M", or a substring of it) to a real Shopify cart-permalink URL, validated live against the storefront. |
Types
interface BrixtonVariant {
/** Shopify's numeric variant id as a string. */
id: string;
/** The variant's own label, e.g. "M" or "Black / M" on multi-option products. */
title: string;
/** String verbatim from the storefront — "30.00" (dollars) on /products.json, "10900" (cents) on /products/<h>.js. */
price: string;
/** Same scale as price. Null when the variant is not on sale. */
compareAtPrice: string | null;
/** The store's own SKU. Null on a variant without one. */
sku: string | null;
/** Whether the variant is purchasable right now. */
available: boolean;
/** e.g. ["M"] or ["Black", "M"]. */
options: string[];
}
interface BrixtonProduct {
/** The handle is the only stable identifier across the catalogue. */
handle: string;
title: string;
vendor: string;
productType: string;
url: string;
descriptionHtml: string | null;
optionNames: string[];
variants: BrixtonVariant[];
/** Same scale as variants — see BrixtonVariant.price. */
priceRange: { min: string; max: string } | null;
/** True if ANY variant is purchasable. */
inStock: boolean;
tags: string[];
/** Brixton's own images, in the order the storefront publishes them. */
images: string[];
}
interface BrixtonCatalogue {
/** All matching products, in-stock first, then by handle. */
products: BrixtonProduct[];
/** What the filter DROPPED, in the same register the rest of the library uses. */
warnings: string[];
}
interface BrixtonCheckoutLink {
/** Shopify's own cart-permalink URL — a GET that adds the line item and redirects into the cart. */
url: string;
/** The exact variant the link resolved to, read live off the storefront. */
variant: BrixtonVariant;
/** The product the variant belongs to. */
product: BrixtonProduct;
}Examples
// what are the cheapest in-stock Brixton pieces right now?
const all = await bowmark.providers.brixton.listBrixtonProducts({ limit: 50 });
const inStock = all.filter(p => p.inStock).sort((a, b) => Number(a.priceRange?.min ?? 0) - Number(b.priceRange?.min ?? 0));
log(inStock.slice(0, 5).map(p => `${p.title} from $${p.priceRange?.min}`).join(", "));// what size does the Sonoran Cowboy Hat come in, and is Medium in stock?
const p = await bowmark.providers.brixton.getBrixtonProduct("sonoran-cowboy-hat-black");
const m = p.variants.find(v => v.title === "M");
log(m?.available ? `M is in stock at $${m.price}` : `M is out of stock`);