They answer from different layers. paymentId consults the live store — your created payments come back complete, unknown values 404 — while endToEndId matches any non-empty value and serves the static fixture, whose own reference reads STATICENDTOENID001 (the spec's spelling, one D short). Send both parameters and paymentId wins, because the endToEndId stub only matches when paymentId is absent. One practical consequence: reconciliation-by-reference flows can't find in-session payments here — thread the minted id, not the endToEndId, through your test assertions.