Optionaldata?: ProductRouteVersionDataPer-route operational knobs (timezone, quote TTL, ...). Persisted
to product_route_version.data. Defaults to {} when omitted.
cutoffTimezone must be an IANA Area/Location name — see
invalidCutoffTimezone.
OptionaleffectiveFrom?: InstantWhen this version becomes effective. Defaults to now() at the DB
layer when omitted. Pass a future Temporal.Instant to schedule a
route change.
OptionalfeeVisible?: boolean | nullOptionalfixedFeeAmount?: BigNumber | nullVendor fee for THIS route (CFX-to-vendor cost). Persisted on the version row; omitted fields default to null (no fee).
Optionallabel?: string | nullOptionallimit24hMaxCount?: BigNumber | nullOptionallimit24hMaxUsd?: BigNumber | nullOptionallimit30dMaxCount?: BigNumber | nullOptionallimit30dMaxUsd?: BigNumber | nullOptionallimit7dMaxCount?: BigNumber | nullOptionallimit7dMaxUsd?: BigNumber | nullOptionallimitTransactionMaxUsd?: BigNumber | nullOptionallimitTransactionMinUsd?: BigNumber | nullVendor limit ceilings for THIS route. Persisted on the version row; omitted fields default to null (no ceiling).
Optionalmatcher?: MatcherOptionalvariableFeeBps?: BigNumber | nullRead the full append-only version history for a route, newest first.
Returns null when the route doesn't exist (or is soft-deleted).
OptionalbankIds?: string[]OptionalcreatedAt?: DbTimestampCriteria<Instant>Optionalids?: string[]OptionalorderBy?: DbOrderByCriterion<Optionalpage?: numberOptionalpageSize?: numberOptionalproductNames?: (Optionalq?: stringFree-text match over the route external id, product name, vendor name,
and route label — the selector search box (searchRoutes) feeds this.
OptionalupdatedAt?: DbTimestampCriteria<Instant>Optionalvendors?: Vendor[]Update a route. priority and status edits update the identity row in
place; matcher/vendor/label/fee edits insert a new version and flip the
pointer. Both can happen in the same transaction. productName is part
of identity and not editable. Untouched fee fields carry forward from
the previous version. Per-vendor limit ceilings aren't editable here —
those live on product_vendor (use the vendor admin service).
Admin-tier CRUD over
product_route.Identity / version split:
product_routeis the lifecycle row (status, priority, deletedAt).product_route_versioncarries the routing decision — which vendor + which matcher — plus the vendor's per-route terms (fee + limit ceilings). The vendor row carries identity only.Soft-delete is the terminal signal.