# 5.4 Versioning & Changes

Right now the engine is a moving target. If you’re building anything serious on top, **define and freeze your own interface**:

* Decide on a stable **opportunity schema**:

  ```json
  {
    "id": "SOL-USDC_jupiter_rayduim_1710000000",
    "pair": "SOL/USDC",
    "buy_venue": "jupiter",
    "sell_venue": "raydium",
    "buy_price": 99.8,
    "sell_price": 100.2,
    "spread_pct": 0.4,
    "profit_pct": 0.3,
    "profit_bps": 30,
    "timestamp": 1710000000
  }
  ```
* Wrap the raw engine output and **normalize it to that schema** before exposing it to clients.
* Treat the engine repo as a **dependency**:
  * When you pull upstream changes, you run tests to ensure the schema hasn’t broken.
  * If it has, you adapt in your wrapper, not in 15 downstream services.

In short:\
Use Capture Engine as a **detection microservice**. Wrap it once, define your contract once, and don’t let random refactors leak into your whole stack.
