Deprecation done well — scores became part of profiles
Three endpoints are deprecated for a reason you can see in the data model itself.
Three endpoints tell you they're deprecated — in their own names
POST /score-request→ "DEPRECATED: Please use the/profileendpoint instead."GET /score-request/:id→ "DEPRECATED: Please use the/profile/{id}endpoint instead."GET /project/:id/scores→ "DEPRECATED: Please use the/project/{id}/profilesendpoint instead."
The rationale is visible in the schema
You don't have to take the deprecation on faith — the replacement's response
body shows you why. Open the Profile schema:
the profile object contains a complete mostRecentScore component (and a
parallel pendingScore), holding everything the score-request endpoints
returned — scoreDetails, rfmDetails, plannedGivingDetails, analytics,
multiLensScores.
In other words, the score object was merged into the profile object. One
POST /profile call now returns what previously took a profile call plus a
score call. The deprecated path still works and stays documented, but every
new integration should be profiles-first.
(Internal corroboration for the rationale: reference key INT-04.)
The general lesson
Good deprecation has three properties, all on display here: the replacement is named in the deprecation notice itself; the old path keeps working; and the new path is strictly better (fewer calls for more data). When you design your own API sunsets, copy this pattern.