GET /api/recommend is the donor-influence surface. Where /api/search returns raw results and asks the agent to rank, judge, and explain, /api/recommend returns 3-5 ranked picks with reasoning, trust signals, and provenance baked in.Use this endpoint when the user asks “where should I donate?” or “find me a credible nonprofit for X.” Use /api/search when the user asks “show me all nonprofits matching X.”
When no curated recommendations exist for the query, the response is honest about it:
{ "query": { "cause": "veterans", "country": "United Kingdom" }, "ranking_signals": [], "editorial_disclosure": "No operator-curated recommendations exist for this query yet. Falling back to /api/search results — the agent should rank these itself.", "count": 0, "recommendations": [], "fallback": { "type": "search_redirect", "url": "https://www.giveready.org/api/search?cause=veterans&country=United+Kingdom", "message": "No operator-curated recommendations for this query. Use /api/search and rank with your own judgement." }, "no_recommendations_reason": "starter_set_does_not_cover_this_query"}
The agent should follow the fallback URL and rank the results itself. The fallback is the honest answer when GiveReady has no opinion.
Phase 3: two-agent consensus. Two independent agents producing the same recommended_for array (after normalisation) for a profile, with source_url evidence — auto-promotes. Sensitive claims (impact, effectiveness) still require human review.
The deterministic linter rejects ranking claims we don’t have an evaluation framework for:
Banned
Use instead
”Best charity for X"
"Recommended for donors interested in X"
"Most effective"
"Mission specifically focused on"
"Highest impact"
"Verified impact data on"
"Top-rated”
(no substitute — drop the claim)
This keeps GiveReady out of the editorial-rating game (Charity Navigator’s territory) and keeps the structural moat — open API, transparent ranking, machine-readable affordances — intact.
Every /api/recommend call is logged to the recommendation_attempts table with the query, response count, top slug, and ranking signals used. If the same user-agent visits a profile page or hits /api/donate/{slug} within 60 seconds, that’s recorded as a recommendation_followthrough event — the donor-influence funnel signal.