{
  "schemaVersion": 1,
  "id": "payback-transfer-bonus-history",
  "version": "1.0.0",
  "locale": "en",
  "valid": true,
  "eyebrow": "Reviewed dataset · Historical archive",
  "title": "PAYBACK transfer bonus history",
  "description": "Reviewed historical PAYBACK-to-Miles-&-More transfer bonuses with terms, source, and reproducible sensitivity scenarios.",
  "directAnswer": "The verified archive begins in July 2026 and currently contains 1 publication-grade PAYBACK-to-Miles-&-More campaign: a 10% bonus that has ended. This single observation cannot establish frequency, trend, a maximum, or a typical bonus. 4 explicitly hypothetical scenarios only show how fixed assumptions change the calculation.",
  "url": "https://www.miles-hacking.de/en/data/payback-transfer-bonus-history",
  "downloadUrl": "https://www.miles-hacking.de/en/data/payback-transfer-bonus-history.json",
  "licenseUrl": "https://www.miles-hacking.de/en/legal/terms-of-use",
  "temporalCoverage": "2026-06-30T22:00:00Z/2026-07-31T21:59:59Z",
  "generatedAt": "2026-08-22T10:31:00.000Z",
  "coverage": {
    "startsAt": "2026-06-30T22:00:00Z",
    "verifiedRowCount": 1,
    "statement": "Archive coverage begins no earlier than 1 July 2026. Publication requires a canonical campaign with a hash-bound source, complete terms, a valid review chain, and confirmed archive status.",
    "validatedSummary": "Verified archive coverage begins on 1 July 2026 and currently contains exactly 1 publication-grade campaign. This row is not evidence of frequency or trend and does not establish the largest or a typical bonus.",
    "integrityNotice": null
  },
  "history": [
    {
      "id": "payback-miles-more-2026-07-10-percent",
      "label": "10% transfer bonus in July 2026",
      "sourceProgram": "PAYBACK",
      "targetProgram": "Miles & More",
      "bonusPercent": 10,
      "validFrom": "2026-06-30T22:00:00Z",
      "validUntil": "2026-07-31T21:59:59Z",
      "observedAt": "2026-07-16T16:35:39.788Z",
      "availability": "expired",
      "minimumTransferPoints": 4000,
      "transferRequirement": "single-transfer",
      "bonusCapMiles": 75000,
      "eligibleResidencies": [
        "DE",
        "AT"
      ],
      "eligibleMember": "Miles & More member",
      "activeAccountsRequired": true,
      "officialSource": {
        "name": "Official PAYBACK Miles & More page",
        "url": "https://www.payback.de/partner/miles-and-more"
      }
    }
  ],
  "scenarios": {
    "targetMiles": 60000,
    "summary": "All 4 scenarios use the same freely chosen 60,000-mile target. They assume €120 taxes, €180 surcharges, no other fees, and a 1-cent opportunity cost per source point; only the negative case lowers the assumed cash fare from €1,200 to €750.",
    "integrityNotice": null,
    "rows": [
      {
        "id": "no-bonus-feasible",
        "label": "No bonus, sufficient points",
        "note": "Hypothetical; not a current transfer-rate or availability claim.",
        "hypothetical": true,
        "availability": "not-applicable",
        "inputs": {
          "sourcePoints": 60000,
          "sourceRatio": 1,
          "targetRatio": 1,
          "transferBonusPercent": 0,
          "requiredMiles": 60000,
          "cashFareMinorUnits": 120000,
          "taxesMinorUnits": 12000,
          "surchargesMinorUnits": 18000,
          "otherFeesMinorUnits": 0,
          "sourcePointValueMinorUnits": 1
        },
        "outputs": {
          "transferredMiles": 60000,
          "requiredSourcePoints": 60000,
          "milesShortfall": 0,
          "cashCostsMinorUnits": 30000,
          "sourcePointsOpportunityCostMinorUnits": 60000,
          "netValueMinorUnits": 30000,
          "valuePerRedeemedMileMinorUnits": 1.5
        },
        "units": {
          "points": "points",
          "miles": "miles",
          "percentages": "percent",
          "money": "EUR minor units (cents)",
          "valuePerMile": "EUR cents per mile"
        }
      },
      {
        "id": "archived-10-percent-feasible",
        "label": "Archived 10% bonus, minimum points",
        "note": "Hypothetical comparison using the archived 10% campaign; the campaign has ended and is currently unavailable.",
        "hypothetical": true,
        "availability": "expired",
        "inputs": {
          "sourcePoints": 54546,
          "sourceRatio": 1,
          "targetRatio": 1,
          "transferBonusPercent": 10,
          "requiredMiles": 60000,
          "cashFareMinorUnits": 120000,
          "taxesMinorUnits": 12000,
          "surchargesMinorUnits": 18000,
          "otherFeesMinorUnits": 0,
          "sourcePointValueMinorUnits": 1
        },
        "outputs": {
          "transferredMiles": 60000,
          "requiredSourcePoints": 54546,
          "milesShortfall": 0,
          "cashCostsMinorUnits": 30000,
          "sourcePointsOpportunityCostMinorUnits": 54546,
          "netValueMinorUnits": 35454,
          "valuePerRedeemedMileMinorUnits": 1.5
        },
        "units": {
          "points": "points",
          "miles": "miles",
          "percentages": "percent",
          "money": "EUR minor units (cents)",
          "valuePerMile": "EUR cents per mile"
        }
      },
      {
        "id": "insufficient-source-points",
        "label": "Insufficient source points",
        "note": "Hypothetical; both valuation outputs remain null when there is a mileage shortfall.",
        "hypothetical": true,
        "availability": "not-applicable",
        "inputs": {
          "sourcePoints": 50000,
          "sourceRatio": 1,
          "targetRatio": 1,
          "transferBonusPercent": 0,
          "requiredMiles": 60000,
          "cashFareMinorUnits": 120000,
          "taxesMinorUnits": 12000,
          "surchargesMinorUnits": 18000,
          "otherFeesMinorUnits": 0,
          "sourcePointValueMinorUnits": 1
        },
        "outputs": {
          "transferredMiles": 50000,
          "requiredSourcePoints": 60000,
          "milesShortfall": 10000,
          "cashCostsMinorUnits": 30000,
          "sourcePointsOpportunityCostMinorUnits": 50000,
          "netValueMinorUnits": null,
          "valuePerRedeemedMileMinorUnits": null
        },
        "units": {
          "points": "points",
          "miles": "miles",
          "percentages": "percent",
          "money": "EUR minor units (cents)",
          "valuePerMile": "EUR cents per mile"
        }
      },
      {
        "id": "lower-cash-fare-negative-net-value",
        "label": "Lower cash fare, negative net value",
        "note": "Hypothetical; the lower assumed cash fare produces negative net value after costs.",
        "hypothetical": true,
        "availability": "not-applicable",
        "inputs": {
          "sourcePoints": 60000,
          "sourceRatio": 1,
          "targetRatio": 1,
          "transferBonusPercent": 0,
          "requiredMiles": 60000,
          "cashFareMinorUnits": 75000,
          "taxesMinorUnits": 12000,
          "surchargesMinorUnits": 18000,
          "otherFeesMinorUnits": 0,
          "sourcePointValueMinorUnits": 1
        },
        "outputs": {
          "transferredMiles": 60000,
          "requiredSourcePoints": 60000,
          "milesShortfall": 0,
          "cashCostsMinorUnits": 30000,
          "sourcePointsOpportunityCostMinorUnits": 60000,
          "netValueMinorUnits": -15000,
          "valuePerRedeemedMileMinorUnits": 0.75
        },
        "units": {
          "points": "points",
          "miles": "miles",
          "percentages": "percent",
          "money": "EUR minor units (cents)",
          "valuePerMile": "EUR cents per mile"
        }
      }
    ]
  },
  "methodology": {
    "id": "redemption-calculator-v1",
    "version": 1,
    "rounding": {
      "transferredMiles": "floor",
      "requiredSourcePoints": "ceil",
      "cashMinorUnits": "nearest-integer",
      "valuePerRedeemedMile": "nearest-0.01-cent"
    },
    "formulas": {
      "transferredMiles": "floor(sourcePoints / sourceRatio * targetRatio * (1 + transferBonusPercent / 100))",
      "requiredSourcePoints": "ceil(requiredMiles / (1 + transferBonusPercent / 100) / targetRatio * sourceRatio)",
      "milesShortfall": "max(0, ceil(requiredMiles - transferredMiles))",
      "cashCostsMinorUnits": "round(taxesMinorUnits + surchargesMinorUnits + otherFeesMinorUnits)",
      "sourcePointsOpportunityCostMinorUnits": "round(sourcePoints * sourcePointValueMinorUnits)",
      "netValueMinorUnits": "milesShortfall === 0 ? round(cashFareMinorUnits - cashCostsMinorUnits - sourcePointsOpportunityCostMinorUnits) : null",
      "valuePerRedeemedMileMinorUnits": "milesShortfall > 0 ? null : requiredMiles > 0 ? round((cashFareMinorUnits - cashCostsMinorUnits) / requiredMiles * 100) / 100 : 0"
    },
    "includedOutputs": [
      "transferredMiles",
      "requiredSourcePoints",
      "milesShortfall",
      "cashCostsMinorUnits",
      "sourcePointsOpportunityCostMinorUnits",
      "netValueMinorUnits",
      "valuePerRedeemedMileMinorUnits"
    ],
    "excludes": [
      "transferMinimums",
      "transferIncrements",
      "liveAvailability",
      "livePricing"
    ]
  },
  "contributors": {
    "author": {
      "name": "Miles-Hacking.de editorial team",
      "organization": "Miles-Hacking.de"
    },
    "reviewer": {
      "name": "Miles-Hacking.de fact-checking team",
      "organization": "Miles-Hacking.de"
    }
  },
  "limitations": [
    "All scenario amounts are fixed illustrative assumptions in euro cents, not live prices or value recommendations.",
    "The dataset makes no live fare, award availability, award chart, routing, or other current program claim.",
    "Historical campaign terms say nothing about current or future transfer campaigns.",
    "One verified campaign cannot establish frequency, trend, a maximum, or a typical bonus."
  ],
  "versionHistory": [
    {
      "version": "1.0.0",
      "publishedAt": "2026-08-22T10:31:00.000Z",
      "note": "First bilingual release with 1 reviewed archive row and 4 reproducible sensitivity scenarios."
    }
  ]
}
