← Back to product·Simulmedia VAMOS Docs·Guides: for sellers / Selling patterns
Guides: for sellers

Selling patterns

Everything sellers actually sell composes from the same few objects: products, rate entries, avails. Every pattern below is a product definition; how the objects fit together is the object model, and the full field reference is the product object. All examples use the sandbox seller acme. The examples are fragments, not full requests: each shows only the objects the pattern turns on. Products publish inside the usual PUT /v1/me/catalog envelope (taxonomy_version plus products[]), and rate entries inside a PUT /v1/me/rate-cards commit, exactly as in Publish your catalog; comments mark anything else a real request still needs.

Dayparts and holiday variants

The workhorse: a selling title on a weekly pattern. Seasonal and holiday schedules are not special cases; they are date-bounded versions of the same product.

{ "product_id": "acme-prime", "type": "daypart", "network": "ACME",
  "definition": { "selling_title": "Prime", "days": ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],
                  "start": "20:00", "end": "23:00" },
  "effective": { "start": "2026-09-28", "end": "2026-11-22" } }

// the holiday variant takes over when the first version's window ends
{ "product_id": "acme-prime-holiday", "type": "daypart", "network": "ACME",
  "definition": { "selling_title": "Holiday Prime", "days": ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],
                  "start": "19:00", "end": "23:00" },
  "effective": { "start": "2026-11-23", "end": "2026-12-27" } }

Sports: season, team, game

Games air on dates, not weekly patterns, so a sports program defines itself by occurrences. The season is the product; each game is one of its dates; a buyer books the season by week or pins a single game with a day-grain period, which the product offers by listing day in its grains.

{ "product_id": "acme-aces-baseball", "type": "program", "network": "ACME",
  "grains": ["day","week"],
  "definition": { "selling_title": "Aces Baseball", "timezone": "America/Chicago",
    "occurrences": [
      { "date": "2027-04-09", "start": "18:30", "end": "22:00", "label": "home opener" },
      { "date": "2027-04-12", "start": "19:00", "end": "22:30", "label": "at Rivertown" } ] } }

// book one game: a day-grain period, daylocked by construction
{ "product_id": "acme-aces-baseball", "period": { "grain": "day", "start": "2027-04-09" },
  "units": 2, "spot_length": 30 }   // plus rate, as on any catalog order line

Team splits and pre/in/post-game cuts are sibling products over the same breaks. Publish them side by side: overlap is ordinary, and how much of the shared inventory each one may sell is yours to manage in your own systems (next pattern).

Tentpoles and events

Tentpoles are programs. A premiere, finale, or awards night is an occurrences program with premium weekly rates; cards price by week, so the event week simply carries event pricing.

{ "product_id": "acme-awards-night", "type": "program", "network": "ACME",
  "definition": { "selling_title": "Awards Night", "timezone": "America/New_York",
    "occurrences": [ { "date": "2027-02-28", "start": "20:00", "end": "23:30" } ] } }

// the event week's rate entry does the premium work
PUT /v1/me/rate-cards
{ "commit": "acme-2027q1-v2", "currency": "USD",
  "effective": { "start": "2027-01-04", "end": "2027-03-28" },
  "entries": [
    { "product_id": "acme-awards-night", "week": "2027-W09", "market_class": "scatter",
      "advertiser_class": "general", "spot_length": 30, "buy_type": "fixed_position",
      "gross_rate_unit": 12500.00 } ] }

Overlapping products over the same breaks

Selling the same breaks through two products is ordinary, and nothing in the catalog objects to it. Publish both; the platform holds no opinion about how their capacity relates, because it never had the seller's own sales plan and could only have guessed at it.

{ "products": [
    { "product_id": "acme-prime", "type": "daypart",
      "definition": { "selling_title": "Prime", "days": ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],
                      "start": "20:00", "end": "23:00" } },
    { "product_id": "acme-sports-prime", "type": "daypart",
      "definition": { "selling_title": "Sports Prime", "days": ["Sat","Sun"], "start": "20:00", "end": "23:00" } } ] }

What each product has left is what its own avails say. Push the number you want honored, computed however your sales plan computes it: if selling one draws the other down, publish avails that reflect it. An order past what the avail states rejects with INVENTORY_UNAVAILABLE.

Sponsorships and billboards

News, weather, and segment sponsorships are sponsorship products: all or part of a program bought by one advertiser. A billboard rides along as a billboard block naming its seconds and its position (open, close, or both), which is not the same thing as a spot with a short spot_length: see Sponsorships and billboards. A paired second airing still uses the mirror pattern, and buyers opt in per line with include_mirror.

{ "product_id": "acme-wx-sponsor", "type": "sponsorship", "network": "ACME",
  "definition": { "selling_title": "Weather Sponsorship", "days": ["Mon","Tue","Wed","Thu","Fri"],
    "start": "06:15", "end": "06:20", "mirror": { "offset_minutes": 660 } },
  "billboard": { "seconds": 5, "position": "open" },
  "spot_lengths": [5, 10] }

Rotators, ROS, RON

Rotation rules across windows, or the whole network. ROS and rotator selling titles must carry sample_programming so buyers see representative titles.

{ "product_id": "acme-weekend-rot", "type": "rotator", "network": "ACME",
  "definition": { "selling_title": "Weekend Rotator",
    "windows": [ { "days": ["Sat","Sun"], "start": "09:00", "end": "20:00" } ],
    "sample_programming": ["Gameday Live", "Prime Movie", "Late Slate"] } }

DR and paid programming

Direct response is an advertiser_class with its own rates on any product. Paid programming and shopping blocks are long-form spot_lengths on a custom product.

{ "product_id": "acme-overnight-block", "type": "custom", "network": "ACME",
  "definition": { "selling_title": "Overnight Block", "days": ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],
                  "start": "02:00", "end": "05:00" },
  "spot_lengths": [1800, 3600], "advertiser_classes": ["dr", "paid_programming"] }

Political windows

Political is a rate class, not a product type: political_candidate_lur and political_issue advertiser classes overlay any compatible product, with LUR governing candidate rates. See Political and LUR.

Local stations and station groups

A station is its own network; the group is the provider; geography rides the product's market block, and buyers filter by it. A group-wide buy is one order with one line per station.

{ "product_id": "kacm-early-news", "type": "daypart", "network": "KACM", "provider": "Acme Station Group",
  "definition": { "selling_title": "Early News", "days": ["Mon","Tue","Wed","Thu","Fri"],
                  "start": "17:00", "end": "18:00" },
  "market": { "scheme": "nielsen_dma", "code": "501", "name": "New York", "country": "US" } }

// buyers plan by market
GET /v1/sellers/acme-stations/catalog?market=nielsen_dma:501

Selling in another currency

Trade currency is declared per rate-card commit, ISO 4217, and locked with the order. Measurement rides the same open fields with honest source tags, so a Mexican broadcaster sells in MXN against local measurement without any special casing.

PUT /v1/me/rate-cards
{ "commit": "acme-mx-2026q4-v1", "currency": "MXN",
  "effective": { "start": "2026-09-28", "end": "2026-12-27" },
  "entries": [ { "product_id": "acme-mx-prime", "week": "2026-W41", "market_class": "scatter",
    "advertiser_class": "general", "spot_length": 30, "buy_type": "preemptible",
    "clearance_tier": "P2", "gross_rate_unit": 7200.00 } ] }

Remnant and opportunistic windows

Unsold inventory near air publishes as market_class: "discounted" rate entries with a window and a signal, on a standing cadence; remnant and opportunistic are the trade's two names for it. Buyers' agents watch for the windows; see Buy remnant and opportunistic inventory.

Every pattern above books through the identical order path. If your shape is not here, it probably composes from the same pieces; if it truly does not, tell us what you sell and we will show you the mapping or extend the model.