400
payments.invalid_expirypaymentsRule R4expires_in_minutes is outside the allowed range
expires_in_minutes must be at least 1 and no more than your tenant's max_expiry_minutes setting. Omit it and the payment gets your payment_expiry_minutes default.
Why the API refuses
WHEN a payment is created, THE SYSTEM SHALL set expires_at to now plus expires_in_minutes when supplied and within 1 and the tenant setting max_expiry_minutes, otherwise to now plus the tenant setting payment_expiry_minutes.
What to do
Omit the field unless you genuinely need a different window, and when you do send it, clamp it to the tenant maximum on your side. A PromptPay QR that outlives the payer's session is worse than one that expires: the payer pays, your basket is gone, and you are reconciling by hand.