Decide Gateway: Multi-Objective Routing
What multi-objective routing is
Plain success-rate (SR) routing optimises a single objective: send each payment to the gateway most likely to authorise it. But the cheapest path to a successful payment is not always the one with the highest auth rate — a gateway that is one point worse on auth but materially cheaper per transaction can leave the merchant with more money in hand. Multi-objective routing balances two objectives at once — authorisation and processing cost — so routing maximises the merchant’s economic outcome, not just the raw approval odds. It is implemented as a cost-aware post-step layered on top of SR scoring, not a replacement for it. The SR scorer runs first and produces its usual ranking; the post-step then takes those scores, attaches a per-gateway fee estimate to each, and re-ranks the candidates on expected value. Because it only ever runs after SR scoring, everything SR gives you (dimension-level buckets, elimination, hedging) is preserved — cost is simply an additional lens applied at the end.How the ranking works
After the success-rate scorer picks its head gateway, the engine fetches per-PSP fee estimates and re-ranks every gateway that has cost data on economic value:margin and the per-PSP cost estimate (see the margin field on Create success-rate config).
If a cheaper PSP has a strictly higher expected value than the SR head, it is promoted (outcome: COST_WON) and routing_approach becomes SR_SELECTION_MULTI_OBJECTIVE. Otherwise the SR head is kept (outcome: AUTH_WON) and routing_approach keeps its normal SR value. Either way, the response carries a multi_objective_info block explaining the decision — which gateway SR would have picked, which one cost analysis chose, and by how much — so every cost-driven override is auditable.
Enablement
Notes:
- The post-step only runs on SR-scored decisions and is skipped while hedging (exploration) is active for the transaction.
margin(fraction of ticket, e.g.0.20) comes from the merchant’s success-rate config — see Create success-rate config. It defaults to1.0when unset.- This post-step re-ranks the SR scores it is handed; it does not tune them. Autopilot is the separate self-tuning job that calibrates SR hedging and bucket size, and can run alongside this post-step (they are independent dials —
enableMultiObjectiveanduse_autopilot). - Gateways without fee data cannot be ranked on expected value and never win on cost; if the SR head itself has no fee data, the SR order is kept.
- Per-gateway fee data comes from cost ingestion — settlement reports and invoices fitted into a per-cluster cost model. Check cost coverage to see what share of volume actually has a trustworthy fee estimate before relying on this post-step.
- To compare cost-aware routing against a plain auth-rate baseline on live traffic before flipping the merchant flag, run it as an A/B test experiment arm (
enable_multi_objective: trueon one arm only).
Request
Response: cost won
adyen is promoted over the SR head stripe because its expected value is higher at the configured margin; fallbacks are re-ordered by descending expected value (gateways without fee data follow, ordered by auth rate).
Response: auth won
The post-step ran but the SR head was already the highest expected-value gateway, so nothing moves androuting_approach keeps its normal SR value. Note margin: 1 — the default applied when the merchant’s success-rate config sets no margin.
multi_objective_info Fields
The block is absent (
null) when the post-step did not run at all — feature off, hedging active, or a non-SR routing flavour.