Bowmark AIdocs

Mixbook

Mixbook's real photo-book theme catalog, its published rate card, and each theme's live server-computed price — search real designs, price a custom page…

Mixbook's real photo-book theme catalog, its published rate card, and each theme's live server-computed price — search real designs, price a custom page count against Mixbook's own formula, read one theme's real price, and read the live sitewide promo code, rather than a researched estimate.

Domain: mixbook.com

Also known as: Mixbook, mixbook, Mixbook.com, mixbook.com

Call it directly

bowmark.providers.mixbook.searchPhotoBookThemes(query: string): Promise<MixbookThemeResult[]>
bowmark.providers.mixbook.getProductPrice(path: string): Promise<MixbookProductPrice>
bowmark.providers.mixbook.getPhotoBookPriceTable(binding?: MixbookBinding): Promise<MixbookPriceCell[]>
bowmark.providers.mixbook.priceCustomBook(binding: MixbookBinding, cover: string, paper: string, size: string, pageCount: number): Promise<MixbookCustomBookPrice>
bowmark.providers.mixbook.getActivePromotion(): Promise<MixbookPromotion>

Functions

FunctionWhat it does
searchPhotoBookThemesSearches Mixbook's real 750+ photo-book theme catalog (Mixbook's own public Algolia index, not a scrape) and returns real theme names, descriptions, page counts, and the real product-page…
getProductPriceReads ONE theme's real product page and returns Mixbook's own server-computed price for its default size/cover/paper/page-count configuration — the same schema.org Offer price the page…
getPhotoBookPriceTableReturns Mixbook's full published rate card — every cover/paper x size combination, for softcover, hardcover, or both — with the real base price for a 20-page book and the real…
priceCustomBookPrices an exact custom photo book — binding, cover, paper, size and any page count >= 20 — against Mixbook's own published rate-card formula (base price for 20 pages, plus the per-page…
getActivePromotionReads the real, currently-active sitewide coupon banner (description, code, terms URL) Mixbook is showing right now.

Types

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

type MixbookBinding = "softcover" | "hardcover";

interface MixbookPriceCell {
  binding: MixbookBinding;
  cover: string;
  paper: string;
  size: string;
  basePrice20pg: number;      // dollars, real published base price for a 20-page book
  perAdditionalPage: number;  // dollars, real published per-page increment
  currency: string;
}

interface MixbookThemeResult {
  name: string;
  description: string;
  path: string;       // pass into getProductPrice
  themeId: number;
  pageCount: number;
  orientation: string;
  image: string;
  tags: string[];
}

interface MixbookProductPrice {
  path: string;
  name: string;
  sku: string;
  size: string;
  price: number;      // real Mixbook-computed price for the default configuration
  currency: string;
  availability: string;
  url: string;
}

interface MixbookCustomBookPrice {
  binding: MixbookBinding;
  cover: string;
  paper: string;
  size: string;
  pageCount: number;
  totalPrice: number;  // basePrice20pg + perAdditionalPage * max(0, pageCount - 20)
  currency: string;
  cell: MixbookPriceCell;
}

interface MixbookPromotion {
  description: string;  // e.g. "Up to 50% off + an extra 10% off & free shipping on 79+"
  code: string;
  termsUrl: string;
}

Examples

// What real Mixbook themes exist for a beach trip, and what does the default configuration cost?
const themes = await bowmark.providers.mixbook.searchPhotoBookThemes("beach");
const priced = await bowmark.providers.mixbook.getProductPrice(themes[0].path);
return { theme: themes[0].name, price: priced.price, currency: priced.currency, url: priced.url };
// What would a 40-page hardcover 8.5x8.5 Matte book with Everyday Semi-Gloss paper cost, and is there an active promo?
const priced = await bowmark.providers.mixbook.priceCustomBook("hardcover", "Matte", "Everyday Semi-Gloss", "8.5×8.5", 40);
const promo = await bowmark.providers.mixbook.getActivePromotion();
return { totalPrice: priced.totalPrice, promoCode: promo.code, promoDescription: promo.description };