API Reference
Decision Memo API
One POST gives you a trust-aware shortlist plus a memo you can paste into a recommendation, ticket, or agent response.
Why a memo, not a list#
A bare ranked list hides the reasoning that makes it defensible. The decision memo route returns the shortlist plus an explanation per option (why it ranked where it did, what trade-offs it embodies) and a one-paragraph summary suitable for downstream consumption by an agent or a human.
Request shape#
Three required inputs: geography (ZIP or state), child age in months, and weekly budget. Optional inputs sharpen the shortlist: `priorities` orders dimensions; `shortlist_limit` caps result count; `commute_origin` adds drive-time scoring.
curl -X POST "https://api.cribscore.co/v1/decision/memo" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"geography": "90003",
"child_age_months": 24,
"budget_weekly": 350,
"shortlist_limit": 3,
"priorities": ["safety_score", "license_status", "commute_minutes"]
}'import httpx
response = httpx.post(
"https://api.cribscore.co/v1/decision/memo",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"geography": "90003",
"child_age_months": 24,
"budget_weekly": 350,
"shortlist_limit": 3,
"priorities": ["safety_score", "license_status", "commute_minutes"],
},
timeout=60.0,
)
response.raise_for_status()
memo = response.json()
print(memo["summary"])
for option in memo["shortlist"]:
print("-", option["facility_id"], option["recommendation"])const memo = await fetch("https://api.cribscore.co/v1/decision/memo", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
geography: "90003",
child_age_months: 24,
budget_weekly: 350,
shortlist_limit: 3,
priorities: ["safety_score", "license_status", "commute_minutes"],
}),
}).then((r) => r.json());
console.log(memo.summary);Response shape#
The response includes a `shortlist` array (each entry has `facility_id`, `rank`, `score`, `recommendation`), a one-paragraph `summary`, and a `tradeoffs` array describing the trade-space the ranking embodies.
{
"memo_id": "memo_01HZ8YK4X3F8B9T5RC2WN6PHJD",
"summary": "Three centers within 1.5 miles of 90003 cleared the safety + budget floor. Sunrise leads on safety_score; Maple leads on price.",
"shortlist": [
{
"rank": 1,
"facility_id": "fac_01HZ8X9K2D7N3M5P0AYR4FTC2W",
"score": 0.89,
"recommendation": "Top choice on safety_score (87) within $30 of budget."
}
],
"tradeoffs": [
{ "axis": "safety vs price", "note": "+$30/wk buys +6 safety_score points." }
],
"trust_floor": "launch_ready"
}Endpoint reference#
/v1/decision/memoGenerate an explainable shortlist memo from geography + child + budget.
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| geography | string | required | — | ZIP code or `state_code`. |
| child_age_months | integer | required | — | 0-144 months. |
| budget_weekly | integer | required | — | USD per week. |
| shortlist_limit | integer | optional | 5 | 1-10. |
| priorities | string[] | optional | — | Ordered list of dimensions to weigh. |
| allow_non_launch_ready | boolean | optional | false | Include results from non-launch_ready states. |
curl -X POST "https://api.cribscore.co/v1/decision/memo" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"geography": "90003",
"child_age_months": 24,
"budget_weekly": 350,
"shortlist_limit": 3,
"priorities": ["safety_score", "license_status", "commute_minutes"]
}'{ "memo_id": "...", "shortlist": [...], "summary": "..." }