← Back to product·Simulmedia Switchboard Docs · v1 draft·API reference / Objects reference
API reference

Objects reference

The shapes that recur across the API, each with its full field reference. This page is the canonical definition of every object; endpoint pages link here instead of redefining shapes. How the objects relate: the object model.

Reading the tables
  • A required badge marks fields the API rejects without; no badge means optional. Some fields are alternatives: the description names the choice.
  • Enumerated values live once, in Enumerations. Open enums may grow; treat unknown values as pass-through.
  • All timestamps are UTC. Local time ranges resolve against the seller's declared timezone at ingest.

package

The sellable unit: seller-defined, versioned, date-bounded. Concept: Packages.

{
  "package_id": "acme-prime",
  "type": "daypart",
  "network": "ACME",
  "provider": "National ACME",
  "definition": {
    "selling_title": "Prime",
    "days": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
    "start": "20:00",
    "end": "23:00",
    "timezone": "America/New_York",
    "sample_programming": ["Acme Tonight", "Prime Movie"],
    "mirror": {
      "offset_minutes": 240
    }
  },
  "taxonomy_version": "acme-2026q4-v1",
  "effective": {
    "start": "2026-09-28",
    "end": "2026-12-27"
  },
  "currencies": ["spots", "hh", "p2plus", "a25_54"],
  "buy_types": ["preemptible", "non_preemptible", "fixed_position", "audience_guaranteed"],
  "spot_lengths": [15, 30, 60],
  "advertiser_classes": ["general", "dr", "tune_in", "competitive", "theatrical"],
  "sm_daypart": "Primetime",
  "disclosure": {
    "avails_policy": "published",
    "pricing_policy": "published"
  },
  "market": {
    "scheme": "nielsen_dma",
    "code": "501",
    "name": "New York",
    "country": "US"
  },
  "inventory_pool": {
    "pool_id": "acme-prime-breaks",
    "max_per_week": 60
  },
  "distribution": "network",
  "separation_policy": {
    "min_separation_seconds": 900,
    "scope": "break"
  },
  "posting_policy": {
    "aggregation_weeks": 4,
    "threshold_pct": 90
  }
}
FieldTypeDescription
package_id requiredstringStable identifier. Maps to the EDI product code on delivered orders.
type requiredenumOne of the package types. Tentpoles are programs.
network requiredstringThe channel.
provider requiredstringThe bookable entity. Multi-network sellers carry both: provider books, network airs.
definition requiredobjectWhat the package covers. Shape varies by type; fields below.
taxonomy_version requiredstringSelling-title definitions are versioned data with effective windows, never enums. Orders pin the version they bought against.
effective.start, effective.end requiredISO dateThe package's active window. Holiday variants are just versions.
currencies requiredarray of stringWhat the package trades in: spots or audience codes.
buy_types requiredarray of stringOffered buy types.
spot_lengthsarray of integerSupported creative lengths in seconds.
advertiser_classesarray of stringAccepted advertiser classes. Seller-defined; open.
sm_daypartstringMapping to the platform's fixed reporting dayparts. Reporting only; never a booking key.
disclosureobjectHow much the package reveals: avails_policy (one of the avails policies) and pricing_policy (one of the pricing policies). Both default to published; overridable per agreement. See Disclosure.
marketobjectGeography. Omitted means national. Fields below.
inventory_poolobjectOpts the package into shared capacity: pool_id references a declared pool; max_per_week caps this package's draw. See shared pools.
distributionenumThe layer the inventory sits in: one of the distributions. Omitted means unstated. Independent of market: spot with no market is national spot, spot with a market is local. See Distribution.
separation_policyobjectThe seller's stated competitive-separation rule: min_separation_seconds and a scope of break, pod, or program. Recorded and surfaced, not scheduled around: advertiser_class prices, advertiser_category separates. See Competitive separation.
posting_policyobjectWhen an audience shortfall owes a make-good; fields below. Overridable per agreement. Evaluated per line, never order-wide. See Posting policy.
billboardobjectOnly on type: "sponsorship": seconds (typically 3, 5, or 10) and position (open, close, or both). A billboard is a benefit attached to a schedule, not a spot with a short spot_length. See Sponsorships and billboards.

posting_policy

FieldTypeDescription
aggregation_weeks requiredintegerThe window delivery totals over before shortfall is computed. Four is the industry-recommended figure; the field carries whatever the parties agreed.
threshold_pct requirednumberDelivery at or above this percentage of the guarantee owes no make-good. Inclusive at the edge.
exclusionsarray of stringpackage_id references the policy does not cover: the tentpole carve-out, where one event's delivery is negotiated on its own.

definition

FieldTypeDescription
selling_titlestringDaypart packages: the seller's own selling title, with days, start, and end. Program and genre packages carry program or genre references instead; rotators carry rotation rules.
daysarray of stringWeekday pattern, Mon through Sun.
start, endstringLocal time range, HH:MM, resolved against timezone at ingest.
occurrencesarray of objectEvent-dated programs replace days/start/end with dated occurrences: {date, start, end, label}. Slots then exist only on those dates.
timezone requiredstringIANA timezone the local times resolve against.
sample_programmingarray of stringRepresentative programming. Required on ROS and RON selling titles.
mirror.offset_minutesintegerPaired mirror airing at a fixed offset: the "8P-12A with 12A-4A mirror" pattern. Order lines opt in with include_mirror.

market

FieldTypeDescription
scheme requiredenumOne of the market schemes.
code requiredstringThe market code within the scheme, for example DMA 501.
namestringDisplay name.
countrystringISO country code.

pool

Seller-owned shared capacity. Packages that declare the same inventory_pool may overlap in coverage (the declared exception to the catalog integrity rule) and draw down one capacity, each bounded by its own max_per_week. Concept: Packages: shared pools.

{
  "pool_id": "acme-prime-breaks",
  "network": "ACME",
  "unit": "spots",
  "capacity": {
    "grain": "week",
    "per_week": 80
  },
  "effective": {
    "start": "2026-09-28",
    "end": "2026-12-27"
  }
}
FieldTypeDescription
pool_id requiredstringReferenced by package.inventory_pool.pool_id. Validated at ingest: the pool must exist on the same seller and network, with matching unit and a covering effective window, or the catalog update rejects.
network requiredstringPools do not span networks.
unit requiredstringWhat the capacity counts, for example spots.
capacity.grain, capacity.per_week requiredobjectThe shared floor. Member caps may add up to more than the pool; the pool holds either way, first committed wins.
effective.start, effective.end requiredISO dateMust cover the coverage of every member package.

slot

A package on a date: the orderable instance. Slots are not a registry; the ID is derived, and a slot inherits the rate entries of its ISO week. The grain rule in one sentence: cards price by week; trades book by slot. Concept: Packages: slots.

{
  "slot_id": "acme-prime:2026-10-07",
  "package_id": "acme-prime",
  "date": "2026-10-07",
  "week": "2026-W41"
}
FieldTypeDescription
slot_id requiredstringAlways {package_id}:{date}. Constructible; no lookup needed.
package_id requiredstringThe package this slot instantiates.
date requiredISO dateBooking a slot pins this air date: daylocked by construction.
week requiredISO weekThe date's ISO week; the rate entries it inherits.

rate entry

One priced cell of a rate card commit: (package, week) by advertiser class, length, buy type, clearance tier, and market class. Concept: Rates.

{
  "package_id": "acme-prime",
  "week": "2026-W41",
  "advertiser_class": "general",
  "spot_length": 30,
  "buy_type": "preemptible",
  "clearance_tier": "P2",
  "class": "scatter",
  "rate_basis": "per_unit",
  "gross_rate_unit": 405.00,
  "gross_rate_weekly": 4050.00,
  "currency": "USD",
  "locked_rate_id": "lr_88c1",
  "commit": "acme-2026q4-v2",
  "commit_kind": "standing",
  "agreement_scope": null
}
FieldTypeDescription
package_id, week requiredstring, ISO weekCards price by week; the week's slots inherit these entries.
advertiser_class requiredenumOne of the advertiser classes. Seller-defined; open.
spot_length requiredintegerCreative length in seconds this rate prices.
buy_type requiredenumOne of the buy types.
clearance_tierenumOne of the clearance tiers; permitted only for preemptible.
class requiredenumMarket timing, one of the market classes. Political LUR is an advertiser class, not a market class; negotiated pricing is agreement-scoped, not a class.
rate_basis requiredenumOne of the rate bases; names the authoritative cost field.
gross_rate_unit, cost_per_second, gross_rate_cpmnumberExactly the field selected by rate_basis is required. CPM entries use gross_rate_cpm; per-second entries resolve unit cost as cost_per_second x spot_length at order time.
gross_rate_weeklynumberOptional weekly rollup, honestly named.
audience_codestringRequired when rate_basis is cpm; one of the audience codes.
currency requiredISO 4217Declared once per card commit and echoed per entry. One trade currency per commit and per order: locked at order time, carried, never converted.
locked_rate_id requiredstringWhat an order line cites to lock this price. See the price-clearance invariant.
commit requiredstringThe versioned card commit this entry belongs to.
commit_kindenumstanding (default) or quote. A quote commit is minted per campaign inside a plan, or by a seller's counter at the review gate. It carries quote_expires_at, plus a proposal_ref when a plan minted it or the order and unit it answers when a counter did, and locks like any card on confirm. See Disclosure.
quote_expires_atISO datetimeSet on quote commits: after it, the entry is a stale card and returns STALE_RATE_CARD.
agreement_scopestringnull on open cards; an agreement id on buyer-scoped cards and quotes minted for one buyer alone.

avail

One availability statement at the seller's declared precision. A week-grain entry speaks for every slot in that week; a date-grain entry speaks for one slot. The platform never invents per-date data from a week-grain statement. Concept: Currencies.

{
  "package_id": "acme-prime",
  "week": "2026-W41",
  "grain": "week",
  "date": null,
  "slot_id": null,
  "state": "available",
  "basis": "actual",
  "spots": {
    "available": 42,
    "total": 80
  },
  "impressions": {
    "hh": {
      "per_spot": 128000,
      "source": "nielsen",
      "stream": "c3"
    }
  },
  "sellout_level": 0.62,
  "as_of": "2026-10-01T12:00:00Z"
}
FieldTypeDescription
package_id, week requiredstring, ISO weekWhat the statement covers.
grain requiredenumweek or date: the seller's declared precision.
date, slot_idISO date, stringPopulated when grain is date; the one slot the entry speaks for.
state requiredenumOne of the avail states.
basis requiredenumactual or projected.
spots.available, spots.totalobjectUnit counts for spot currency.
impressionsobjectMap keyed by audience code; each value carries per_spot, source, and stream (c3, c7, live_sd). The platform carries these figures; it never computes them.
sellout_levelnumber0 to 1.
as_of requiredISO datetimeStaleness marker for the two-phase availability pattern.
poolobjectEchoed on pooled packages: {pool_id, remaining}. Pooled avails report the lower of package cap remaining and pool remaining.

order

The transaction. Price locks at order time; later card changes never invalidate an accepted price. Concept: Orders; lifecycle: the state machine.

{
  "order_id": "ord_9f3a12c4b7e1",
  "external_order_id": "q4-campaign-042",
  "seller": "acme",
  "workflow": "catalog",
  "status": "placed",
  "substatus": null,
  "last_seq": 5,
  "rate_version": "acme-2026q4-v1",
  "settlement_mode": "direct",
  "line_items": [
    {
      "unit_id": "u-0001",
      "package_id": "acme-prime",
      "provider": "National ACME",
      "network": "ACME",
      "week": "2026-W40",
      "slot_id": null,
      "units": 10,
      "spot_length": 30,
      "rate": {
        "class": "scatter",
        "advertiser_class": "general",
        "buy_type": "preemptible",
        "clearance_tier": "P2",
        "rate_basis": "per_unit",
        "unit_cost": 405.00,
        "locked_rate_id": "lr_88c1",
        "currency": "USD"
      },
      "status": "accepted",
      "num_requested": 10,
      "num_accepted": 10,
      "allocation": [
        {
          "date": "2026-10-05",
          "units": 4
        },
        {
          "date": "2026-10-07",
          "units": 3
        },
        {
          "date": "2026-10-09",
          "units": 3
        }
      ]
    }
  ],
  "totals": {
    "gross": 4050.00,
    "currency": "USD"
  }
}
FieldTypeDescription
order_id requiredstringPlatform-minted, ord_ plus 12 hex.
external_order_id requiredstringYour idempotency key, echoed on every event. Byte-identical resubmission replays the stored response; 409 only on a changed payload.
seller requiredstringThe counterparty.
workflowenumOne of the workflows. Default: catalog.
status, substatusenumOne of the order statuses. Switch on status; step markers stay informational.
last_seqintegerThe latest event sequence, for replay via GET /events.
rate_version requiredstringThe card commit the order prices against. See the price-clearance invariant.
settlement_modeenumOne of the settlement modes. Default: direct.
line_items requiredarray of objectOne line books one week or one slot. Fields below.
buyer_metadataobjectNamed keys include advertiser, advertiser_category, and estimate_id, the agency estimate number echoed on EDI delivery. Without it, agency billing systems cannot match the record. advertiser_category is an open string naming what the advertiser sells, which is what competitive separation runs on; it is not advertiser_class, which is what prices.
agreement_idstringThe agreement presented at create, echoed so the terms governing the order stay resolvable from the snapshot. Absent when none was presented. This is what a posting policy override resolves against when a post lands.
cancellation_termsobjectSnapshotted by value at create from the presented agreement: {notice_days, notes?}. Absent when the create presented no agreement_id. A later agreement change never alters it, exactly as a locked price. See Cancellation and posting terms.
totals.gross, totals.currency, totals.impressionsobjectGross total in the order's one trade currency, plus impression totals per traded audience.

line_items[]

FieldTypeDescription
unit_idstringPlatform-assigned per line; how results and counters reference lines.
package_id requiredstringFrom the seller's catalog.
provider, network requiredstringBookable entity and channel.
weekISO weekBooks a package week; the seller distributes units across the week's slots. Set week or slot_id, not both.
slot_idstringBooks one slot: acme-prime:2026-10-07. Daylocked by construction.
unitsintegerFor spot currency. Set units or impressions_goal, not both.
impressions_goalintegerFor impression currency.
spot_length requiredintegerSeconds; must be a length the rate entry prices.
include_mirrorbooleanBooks the package's paired mirror airing too. Default: false.
rate requiredobject{class, advertiser_class, buy_type, clearance_tier?, rate_basis, unit_cost? or cpm?, locked_rate_id, currency}: the priced cell the line locks, citing its rate entry.
rc_impressionsobjectImpression estimates at order time, per audience code, kept for buysheet parity.
copy_idstringCreative reference. Ad-ID and ISCI identifiers ride here.
statusenumResult, one of the unit statuses.
num_requested, num_acceptedintegerPartial acceptance reports per unit; order-level partial is a completed order with a mixed unit set, never a stall.
allocationarray of objectAuthoritative air dates once decided: {date, units} entries summing to num_accepted. Slot lines have a single entry; week lines may spread across the package's weekday pattern. A multi-unit week line never collapses to one date.
reasonstringPopulated on rejected and countered lines; persisted.
in_response_tostringOn countered lines: the unit_id this counter answers. Counters are additive result lines; see Negotiation.

order_event

The append-only record of everything that happens to an order. Delivery semantics: the event envelope.

{
  "order_id": "ord_9f3a12c4b7e1",
  "external_order_id": "q4-campaign-042",
  "seq": 5,
  "status": "placed",
  "substatus": null,
  "units": [
    {
      "unit_id": "u-0001",
      "status": "accepted",
      "num_accepted": 10
    }
  ],
  "artifact": {
    "name": "placement_receipt",
    "seller_order_id": "ACME-77120"
  },
  "error": null,
  "occurred_at": "2026-10-02T14:41:09Z"
}
FieldTypeDescription
order_id, external_order_id requiredstringBoth ids on every event.
seq requiredintegerStrictly increasing per order. Retries reuse the seq; dedup on (order_id, seq).
status requiredenumOne of the order statuses.
substatusstringInformational step marker.
unitsarray of objectPer-unit results when the transition carries them.
artifactobjectAttached document or receipt, by name: placement_receipt (the booking receipt: the seller's order ID and daylocks), parsed buysheets, delivery posts.
errorobject{error_code, stage, recoverable}. Codes are UPPERCASE; see Errors.
occurred_at requiredISO datetimeUTC.

negotiation

The offer and counter history of one order. The order parks in negotiating between rounds. Concept: Negotiation.

{
  "negotiation_id": "neg_33a7",
  "order_id": "ord_9f3a12c4b7e1",
  "state": "countered",
  "rounds": [
    {
      "actor": "seller",
      "counter": {
        "unit_id": "u-0002",
        "week": "2026-W42",
        "unit_cost": 392.00,
        "num_offered": 8
      },
      "expires_at": "2026-09-30T20:00:00Z"
    }
  ]
}
FieldTypeDescription
negotiation_id, order_id requiredstringOne negotiation per order.
state requiredenumOne of open, countered, accepted, expired, withdrawn.
rounds requiredarray of objectEach round: {offer, counter, actor, expires_at}. Counters surface on the order as additive lines with in_response_to.

proposal_request

The buyer's open ask: carried on POST /orders with workflow: "proposal" in the request field instead of line items. No package IDs required. Concept: Proposals.

{
  "request_type": "audience_plan",
  "audience": {
    "definition": {
      "demo": "A25-54",
      "segments": ["auto_intenders_q4"]
    },
    "currency_goal": {
      "unit": "a25_54",
      "target": 42000000
    }
  },
  "anchor_package_ids": ["acme-prime"],
  "budget_gross": 500000,
  "flight": {
    "start": "2026-10-05",
    "end": "2026-12-27"
  },
  "constraints": {
    "spot_lengths": [15, 30],
    "max_unit_cost": 450.00
  },
  "acceptance_band": {
    "metric": "delivery",
    "tolerance_pct": 2,
    "action": "auto_accept"
  },
  "brief": "Reach auto intenders in the Northeast; avoid overnight rotations."
}
FieldTypeDescription
request_type requiredenumOne of the request types.
audience.definitionobjectAn inline audience definition. Set one of definition, audience_id, or upload_id.
audience.audience_idstringA shared audience reference.
audience.upload_idstringAn uploaded plan or audience file.
audience.currency_goalobject{unit, target}: the audience code and impression goal the plan should hit.
anchor_package_idsarray of stringOptional starting points.
budget_gross requirednumberGross, in the trade currency.
flight.start, flight.end requiredISO dateThe flight window.
constraintsobjectSpot lengths, max unit cost, copy splits, daypart mix.
acceptance_bandobjectOptional auto-accept tolerance: metric (delivery or budget), tolerance_pct (a percentage; 2 means 2%), and action (auto_accept or flag). The platform evaluates it deterministically against the request target when the plan returns; the comparison is one-sided per metric. The exact math, boundary, and missing-metric rules, with worked examples, are on Proposals.
briefstringFree text for the seller's planners.

The seller's plan_proposal response prices line items off their card and may mint custom packages scoped to your agreement: each gets a real package_id and books through the same rails. Rates it mints per campaign are quote commits. Where the seller cannot meet the whole ask, the plan returns the shortfall as unmet[] rather than a silent gap. Nothing books until you confirm, or until an acceptance_band you set fires.

plan_proposal

The seller's answer to a proposal order: the assembled first-pass plan, attached as an artifact when the order enters needs_confirmation. The seller writes it with POST /me/orders/{id}/plan; the buyer confirms, counters, or declines. Concept: Proposals.

{
  "name": "plan_proposal",
  "plan_id": "plan_5b2e",
  "proposal_ref": "ord_c19a44e2f0b1",
  "line_items": [
    {
      "package_id": "acme-auto-q4-9f",
      "minted": true,
      "week": "2026-W40",
      "impressions_goal": 21000000,
      "spot_length": 30,
      "rate": {
        "class": "scatter",
        "buy_type": "audience_guaranteed",
        "rate_basis": "cpm",
        "cpm": 11.90,
        "locked_rate_id": "lr_q_2f7a",
        "currency": "USD",
        "commit_kind": "quote"
      }
    }
  ],
  "minted_packages": ["acme-auto-q4-9f"],
  "quote_refs": ["acme-yourco-q4-quote-1"],
  "plan_totals": {
    "gross": 499800.00,
    "currency": "USD",
    "projected_delivery": {
      "a25_54": 41800000
    }
  },
  "unmet": [
    {
      "requested": "overnight rotations",
      "reason": "held for a committed buyer"
    }
  ],
  "expires_at": "2026-09-30T20:00:00Z",
  "created_at": "2026-09-23T15:10:00Z"
}
FieldTypeDescription
plan_id requiredstringThe plan's id; referenced when the buyer confirms or counters.
proposal_ref requiredstringThe order_id of the proposal order this plan answers.
line_items requiredarray of objectThe proposed buy. Same shape as an order line, each citing a locked_rate_id; minted: true marks a package minted for this request.
minted_packagesarray of stringThe package_ids minted for this request, scoped to your agreement and reorderable next quarter.
quote_refsarray of stringThe quote rate-card commits the line rates lock against; each carries a quote_expires_at.
plan_totals requiredobject{gross, currency, projected_delivery}. projected_delivery is a map keyed by audience code; it is the figure an acceptance_band with metric: delivery is checked against.
unmetarray of objectThe availability counter: what the seller could not fill, each {requested, reason}. Empty when the plan meets the whole ask.
expires_at requiredISO datetimeThe plan offer's own validity; after it, the order lapses. Distinct from a quote's quote_expires_at (the rate's validity).
created_at requiredISO datetimeWhen the seller returned the plan.

delivery_post

Seller-supplied actuals, attached to an order as an artifact. Audience guarantees reconcile against it; the platform carries the numbers and never computes them. Concept: Reconciliation.

{
  "name": "delivery_post",
  "order_id": "ord_9f3a12c4b7e1",
  "week": "2026-W40",
  "units": [
    {
      "unit_id": "u-0001",
      "aired": 10,
      "delivered": {
        "hh": 1260000,
        "p2plus": 1910000,
        "a25_54": 804000
      },
      "source": "nielsen"
    }
  ],
  "currency_of_record": "a25_54",
  "shortfall": null
}
FieldTypeDescription
order_id, week requiredstring, ISO weekPosts are week-grain per-unit counts today.
units requiredarray of objectPer unit: aired count, delivered impressions keyed by audience code, and source.
currency_of_record requiredstringThe audience the guarantee settles on.
shortfallobjectPopulated when a guarantee under-delivers. Whether it owes a make-good is decided by the line's effective posting_policy; where none is stated, the shortfall is reported and the decision stays with the parties.

capability_profile

What a seller's connection can do. The orchestrator never calls what the profile does not advertise; it degrades gracefully instead. Endpoints: Capabilities. Concept: Connections.

{
  "seller_id": "acme",
  "conformance_level": 2,
  "transports": {
    "result_delivery": ["callback", "poll", "sqs", "console"],
    "formats": ["json", "csv", "xlsx"]
  },
  "capabilities": {
    "realtime_availability": true,
    "counter_proposals": false,
    "reservation_hold": false,
    "pricing_modes": ["rate_card"]
  },
  "rate_management": {
    "mode": "frozen_quarterly"
  },
  "sla": {
    "standard": {
      "min_lead_minutes": 2880,
      "max_decision_latency_seconds": 14400
    }
  }
}
FieldTypeDescription
seller_id requiredstringThe tenant the profile describes.
conformance_level requiredinteger0 through 4. See Seller levels.
transports.result_delivery requiredarray of stringDelivery rungs offered: callback, poll, sqs, console.
transports.formatsarray of stringFile formats accepted and produced.
capabilities.realtime_availabilitybooleanLive avails vs declared cadence.
capabilities.counter_proposalsbooleanLevel 3 counters on decide.
capabilities.reservation_holdbooleanLevel 4 holds with TTL.
capabilities.pricing_modesarray of stringrate_card, clearance, negotiated.
rate_management.modeenumfrozen_quarterly, live_avails, or live_rates.
slaobjectPer service class: minimum lead time and maximum decision latency.

agreement

The relationship, made explicit: functionally a deal ID. Presenting it unlocks private catalog scope, buyer-scoped rate cards, permitted buy types, and the settlement mode. Concept: Agreements.

{
  "agreement_id": "agr_71c0d2",
  "buyer": "yourco",
  "seller": "acme",
  "catalog_scope": ["open", "private"],
  "rate_card_refs": ["acme-yourco-2026q4"],
  "permitted_buy_types": ["preemptible", "non_preemptible", "fixed_position", "audience_guaranteed"],
  "settlement_mode": "direct",
  "disclosure_overrides": [
    { "package_id": "acme-prime", "avails_policy": "published", "pricing_policy": "agreement" },
    { "package_id": "*", "avails_policy": "on_request" }
  ],
  "cancellation_terms": {
    "notice_days": 14
  },
  "posting_policy_overrides": [
    { "package_id": "acme-prime", "posting_policy": { "aggregation_weeks": 4, "threshold_pct": 95 } }
  ],
  "credit": null,
  "effective": {
    "start": "2026-10-01",
    "end": "2027-09-30"
  }
}
FieldTypeDescription
agreement_id requiredstringWhat rate_entry.agreement_scope and minted proposal packages reference.
buyer, seller requiredstringThe two parties.
catalog_scope requiredarray of stringopen, private, or both.
rate_card_refsarray of stringBuyer-scoped card commits only this buyer can transact.
permitted_buy_typesarray of stringPermitted buy types under this agreement.
settlement_mode requiredenumOne of the settlement modes.
disclosure_overridesarray of objectSeller-authored, optional. Each entry is {package_id, avails_policy?, pricing_policy?}, where package_id may be "*" for all packages in scope. For a buyer presenting this agreement, the effective policy per field resolves as override(package_id) ?? override("*") ?? package.disclosure ?? published (avails and pricing independent; an omitted field inherits the package default). This is how a seller publishes to a trusted buyer while withholding from the open catalog. Buyers never set disclosure; an override naming a package outside catalog_scope is a no-op. See Disclosure.
cancellation_termsobjectnotice_days (integer) and optional notes. Orders snapshot these by value at create, so a later change to the agreement leaves booked orders alone. See Cancellation and posting terms.
posting_policy_overridesarray of objectSeller-authored, optional. Each entry is {package_id, posting_policy}, where package_id may be "*". The effective policy for a line resolves as override(package_id) ?? override("*") ?? package.posting_policy ?? unstated, the same precedence as disclosure_overrides. See Posting policy.
creditobjectPopulated on cleared agreements: limit and exposure. See GET /settlement/credit.
effective.start, effective.end requiredISO dateThe agreement's window.

Enumerations

Every enumerated value in the API, defined once. Field tables across the docs link here; lifecycle and business meaning live on the linked concept pages. Enums marked open may grow: treat unknown values as pass-through, never as errors.

package.type

ValueMeaning
daypartA selling title over a weekday pattern and local time range.
programA named program; event-dated programs use occurrences. Tentpoles are programs.
genreA genre reference.
rotatorRotation rules across dayparts or titles.
ronRun of network.
sponsorshipAll or part of a program bought by one advertiser. Carries an optional billboard block. Not a buy type: it composes with one.
customSeller-defined; includes agreement-scoped packages minted from proposals.

Semantics: Packages. Roadblock, piggyback, bookending, and infomercial are deliberately not types: the first is a multi-package booking, the middle two are trafficking arrangements, and an infomercial is a spot_length of 1800 with the dr advertiser class.

distribution

ValueMeaning
networkThe national commercial load carried at once across owned-and-operated and affiliated stations.
syndicationTime inside a program licensed for national distribution that airs on individual local stations.
spotTime sold by an individual station or system.

Optional; omitted means unstated. Geography stays on market, so spot plus a market is local spot and there is no local_spot value. Semantics: Distribution.

buy_type

ValueMeaning
preemptiblePay for what airs; the seller may preempt.
non_preemptibleThe spot airs; the seller chooses placement within the package.
fixed_positionThe spot airs in the position bought.
audience_guaranteedAudience guarantee; shortfalls trigger the make-good policy.

Semantics: Buy types and guarantees.

workflow

ValueMeaning
catalogLine items against published packages. Default.
documentA document reference; parsed, validated, and confirmed at needs_confirmation.
proposalAn open proposal request; the seller returns a plan.

Semantics: Submit a document order and Proposals.

rate_basis

ValueMeaning
per_unitgross_rate_unit prices one spot.
per_secondcost_per_second times spot_length resolves the unit cost.
cpmgross_rate_cpm prices one thousand impressions.

audience_guaranteed requires cpm; spot-cost buy types require per_unit or per_second.

class (market timing)

ValueMeaning
scatterIn-quarter buying at card rates.
upfrontCommitted money against a future season. See Upfront.
remnantDiscounted unsold inventory, preemptible.
opportunisticLast-minute clearance windows.

Timing, not geography. Political LUR is an advertiser class; negotiated pricing is agreement-scoped. Semantics: The deal model.

clearance_tier

ValueMeaning
P1Highest clearance priority; last to be preempted.
P2Standard priority.
P3Lowest priority; first to be preempted.

Semantics: Guarantees.

advertiser_class

ValueMeaning
generalGeneral market.
drDirect response.
tune_inNetwork tune-in and promotional advertisers.
competitiveCategory-competitive rates.
theatricalStudio and entertainment releases.
political_candidate_lurCandidate buys at lowest unit rate. See Political buying.
political_issueIssue advertising; LUR does not apply.

Open enum, seller-defined: a seller's card may carry classes beyond these. Semantics: Rates.

avail.state

ValueMeaning
availableClearable now.
unavailableSold out or blocked.
projectedQuotable, not firmly clearable.

Semantics: Avails.

order status

ValueMeaning
draft, submitted, validatingIntake.
needs_confirmationThe buyer confirms an artifact before it books: a document workflow's parsed interpretation, or a proposal's seller-returned plan_proposal.
confirmedValidated and confirmed.
negotiatingParked between rounds: the negotiated workflow, or a proposal counter.
seller_reviewThe seller's approval gate.
placed, completedBooked; done. Order-level partial is a completed order with a mixed unit set.
rejected, canceled, failedTerminals.

Semantics: The state machine.

unit status

ValueMeaning
pendingNot yet decided.
acceptedBooked as requested.
rejectedDeclined; reason populated.
partialFewer units than requested; see num_accepted.
counteredAn additive counter line; in_response_to names the unit it answers.

Semantics: Orders.

settlement_mode

ValueMeaning
directYou invoice each other; the platform carries the paper trail. Default.
clearedThe platform clears the trade. Optional; per agreement.

Semantics: Settlement.

proposal request_type

ValueMeaning
audience_planAn audience definition and goal in; a priced plan back.
specsConcrete constraints in; a plan that satisfies them back.
openA brief; the seller's planners propose.

Semantics: Proposals.

disclosure.avails_policy

ValueMeaning
publishedThe tri-state avails feed is materialized and queryable. Default.
on_requestNo standing feed; a read returns 202 and the seller answers a scoped query.
withheldAvailability is never exposed; a read returns 409 AVAILS_WITHHELD. Resolves at seller review or in a plan.

Semantics: Disclosure.

disclosure.pricing_policy

ValueMeaning
publishedAn open rate card visible to any authorized buyer. Default.
agreementA buyer-scoped card, the deal-ID pattern, unlocked by presenting the agreement.
quotePriced per campaign as a quote commit inside a plan.

Semantics: Disclosure.

market.scheme

ValueMeaning
nielsen_dmaNielsen DMA codes.
msaMetropolitan statistical areas.
cable_zoneCable interconnect zones.
countryNational markets outside the US schemes.
customSeller-defined geography.

Open enum. Omitting market entirely means national. Semantics: Packages: markets.

audience codes

ValueMeaning
spotsUnit currency: count of airings.
hhHousehold impressions.
p2plusPersons 2+.
a25_54 and other demo codesStandard demos.
custom:<def>Seller-declared custom audiences.

Open enum. Semantics: Currencies.