Built with

Channel3

Channel3 is a product catalog across retailers. resell.store sends it the seller's photo and the name the AI model gave the item, and gets back the matching product, what it costs new, any second-hand offers, and the maker's photos.

What it does here

The client is lib/server/channel3.ts, about 80 lines: one search call and two filters over the offers that come back. A product has a title, brands, images, a category and offers, and each offer has a shop domain, a price and a condition.

FunctionWhat it does
searchProducts({ query, base64Image, limit })Text and photo search. A photo plus a few words matches best. Default limit 8.
newOffers(products)Offers that are the item new (anything not used or refurbished), with a price.
usedOffers(products)Offers marked used: the item for sale second hand on resale shops.

The call

What searchProducts sends
POST https://api.trychannel3.com/v1/search
x-api-key: $CHANNEL3_API_KEY
Content-Type: application/json

{
  "query": "Le Creuset round dutch oven 5.5 qt yellow",
  "base64_image": "<the seller's first photo>",
  "limit": 10
}

Requests time out after 20 seconds. A non-2xx response throws, and research catches it.

In research

After the AI model identifies the item, lib/server/research.ts searches Channel3 with its search query and the first photo, 10 results. See Research and agents for the whole run.

  1. Catalog step. The first product is the match ("Matched Le Creuset Signature Round Dutch Oven"). The cheapest new offer becomes the detail line: "New from $X at lecreuset.com".
  2. Resale step. usedOffers on the same results: how many are for sale second hand, the price range, and on which sites.
  3. Pricing. Up to 8 new and 12 used offers go into the price prompt, each with its price, domain and title, next to the live listings from Kernel.
  4. Sources. Up to 8 of each become the "For sale second hand" and "What it costs new" source cards on the findings sheet, with links and images.
  5. Maker photos. Up to 6 of the match's images are offered on the photos step, credited to the shop they came from.

In the sidekick

When a shopper doesn't say what something costs, newPrice() in lib/server/sidekick.ts searches Channel3 (5 results) and takes the middle new offer of the top match as the price to compare against.

What it unlocks

  • Knowing exactly which model it is, not just "a pot", which makes every other step sharper.
  • A new price to anchor against. Used things usually go for 30 to 70 percent of it.
  • Second-hand offers from resale shops alongside the marketplace listings Kernel reads.
  • Clean maker photos for sellers who only took one quick picture.
  • Links buyers and sellers can check for themselves on the findings sheet.

Without it

Without CHANNEL3_API_KEY the catalog step finishes as failed with "Add CHANNEL3_API_KEY to search the catalog", the resale step finds none, and pricing works from the Kernel listings (if set up) and the model, or the numbers alone. There are no maker photos, and the sidekick can only score items whose price the shopper gives.

Setup

apps/app/.env.local
CHANNEL3_API_KEY=…   # from trychannel3.com/developers