prediction_key (Match-XXXXX).POST .../upgrade/checkout. Flips this SAME row from report_kind: compatibility to marriage and re-runs generation in the background to add marriage-timing, audio narration, and both partners' full birth charts - the prediction_key does not change; keep polling the same GET /marriage/report/{prediction_key}.200 - returns the same prediction_key. Also returns 200 with success: false and code: PLAN_LIMIT (not an HTTP error) when no active upgrade purchase is found for this report - checkout it first404 no report with this prediction_key for the current user | 409 - report isn't a done compatibility report, or was already upgraded