Public Beta: Direct engineering support available. Join Discord →
Docs
Concepts
Golden Model

Golden Model

A Golden Model is the canonical, source-shaped schema you define once and validate every webhook against. It captures only the fields your business cares about, named the way you use them — so the vendor can rename, add, or drop fields without breaking anything downstream. The Golden Model is the contract your code reads, not the vendor's payload.

Why use a Golden Model?

Webhook payloads are noisy. A Shopify Order webhook ships with 78+ fields; most teams only need a dozen. When you wire your downstream code directly to a raw payload, three things go wrong:

  1. Schema drift breaks production silently. The vendor renames customer_email to email in a minor release and your CRM stops getting deliveries.
  2. Your business vocabulary leaks vendor names. Your warehouse code knows about fulfillment_status instead of your own term, and every new engineer has to learn the vendor's dialect.
  3. You can never narrow the surface. Even fields you don't care about have to be tolerated, parsed, or rejected — usually scattered across whoever wrote the consumer.

A Golden Model fixes all three at the source boundary. You declare the shape you want. Anything that doesn't match lands in the Dead Letter Queue with a validation error, and your downstream code only ever sees clean, named, typed data.

How it works

You build a Golden Model in the Transformation IDE — a three-panel editor showing the raw inbound payload on the left, your transformation logic in the middle, and the validated Golden Model output on the right. The IDE lets you pick fields, rename them, compute derived values, and drop everything else.

graph LR
  V["Vendor Webhook\n(500+ fields)"] -->|inbound| G["Golden Model\n(the fields you keep)"]
  G -->|validated| D1["Destination Model A"]
  G -->|validated| D2["Destination Model B"]
  style V fill:#ef4444,color:#fff
  style G fill:#a855f7,color:#fff
  style D1 fill:#7c3aed,color:#fff
  style D2 fill:#7c3aed,color:#fff

Once published, every inbound webhook is validated against the Golden Model before delivery. Validation failures don't drop data — they go to the DLQ, you fix the model, republish, and retry. The full original payload is retained, so retrying replays the exact bytes the vendor sent.

Example

Consider a slashbin customer's e-commerce pipeline that ingests Shopify Order webhooks. The raw payload carries 78 fields — line items, tax breakdowns, payment gateway metadata, shipping carrier codes, and dozens of fulfillment timestamps.

Their Golden Model keeps just what their business cares about:

  • order_id, placed_at, customer_email, total_amount (cast to safe decimal)
  • A derived is_subscription flag, computed from the presence of a recurring-billing tag
  • A normalized shipping_country (Shopify sends both ISO codes and full names; the Golden Model standardizes on ISO-3166)

Everything else is dropped at the boundary. When Shopify later adds a new gift_card_redemption_amount field in a release note, nothing in this pipeline notices — the Golden Model didn't ask for it, so it isn't there.

Related concepts

  • Destination Model — the target-shaped schema each destination expects, derived from the Golden Model via field mapping.
  • Fan-out Routing — how one Golden Model fans out to many destinations, each with its own Destination Model.
  • Getting Started — a 15-minute walkthrough that builds your first Golden Model end-to-end.