# Baby by OpenApps > A free baby tracker for feeds, sleep and diapers, shared live by a family. Breastfeeding timer (left and right), bottles, pumping, solids, sleep timer, diapers, growth, medicine, temperature and notes, with charts and a printable summary for the pediatrician. A free alternative to Huckleberry and Glow Baby premium plans: no ads, no paid plan, no sign-up. It is a log, not a medical device: no predictions and no medical advice. Web app: https://baby-free.openapps.xyz/ The landing page as plain markdown: https://baby-free.openapps.xyz/index.md Part of OpenApps, the app store of free alternatives: https://free-apps.openapps.xyz/ ## API Base URL: https://functions.bounded.sh/apps/381bd6356d4b794ac2a7c1b8/api OpenAPI 3.1 description (every route, with schemas and examples): https://baby-free.openapps.xyz/openapi.json Every route needs the family's assistant key in a header: x-household-key: The person finds it in the app under Family, "For your assistant". It is the same secret as the family link: anyone with it can read and add to that family's log, so keep it private. If it stops working (403), the family made a new key; ask the person for the current one. JSON in, JSON out. CORS is open. Errors answer {"error": ""} with a 4xx status. Optional query parameters on every route: - units=us gives amounts in oz, lb and inches in the text fields; the default is metric, except that POST /events answers in the units you sent. Numbers named ...Ml are always ml. - tz=America/New_York sets what "today" means; the default is the family's time zone. When a family has more than one baby, add "baby": "" (body) or ?baby= (query). With one baby you can leave it out. ### Where things stand GET /today Returns, for each baby: now (asleep, asleepFor, feeding side, running timers), lastFeed, lastDiaper and lastSleep (each with at, ago and text), today's totals (feeds, breastfeeds, breastMinutes, bottles, bottle, sleepMinutes, sleep, diapers, wet, dirty, pumped, solids), and "say": one or two plain sentences to read out, like "Ada last ate 2h 10m ago (bottle, 4 oz formula). Last diaper 45m ago, wet. Awake for 1h 20m. Today: 6 feeds, 7 diapers, 9h 30m of sleep." ### One day's entries GET /events?date=2026-10-19 Entries for that day (default today), oldest first: id, type, start, end, running, minutes, text, details. ### Log an entry POST /events Add "time" (ISO 8601, like "2026-10-19T03:10:00-04:00") or "minutesAgo" for something earlier; the default is now. Add "note" to any entry. - Bottle: {"type": "bottle", "amount": 4, "unit": "oz", "milk": "formula"} unit is "oz" or "ml" (required); milk is "formula" or "breast milk" (optional). - Breastfeed already finished: {"type": "breast", "left": 12, "right": 8} minutes per side; or {"type": "breast", "side": "left", "minutes": 15}. Without a time, it ended now. - Pumping: {"type": "pump", "left": 60, "right": 50, "unit": "ml"} or {"type": "pump", "amount": 4, "unit": "oz"}. - Diaper: {"type": "diaper", "kind": "wet"} kind is "wet", "dirty" or "both". A dirty diaper can add "color": "yellow", "green", "brown", "black", "red" or "pale". - Sleep already finished: {"type": "sleep", "minutes": 90} (ended now), or {"type": "sleep", "start": "...", "end": "..."}. - Solids: {"type": "solids", "food": "banana", "amount": "3 spoons"} - Growth: {"type": "growth", "weight": 9.5, "weightUnit": "lb", "length": 22, "lengthUnit": "in", "head": 38, "headUnit": "cm"} any of the three. - Medicine: {"type": "medicine", "name": "Vitamin D", "dose": "1 drop"} - Temperature: {"type": "temp", "value": 99.1, "unit": "f"} unit is "c" or "f". - Note: {"type": "note", "text": "First smile"} Returns {"created": {id, text, ...}, "baby": }. Read back the created text so the person can catch a mistake. ### Live timers The family sees these on every phone as they run. - POST /timers/start {"type": "sleep"} the baby fell asleep. - POST /timers/start {"type": "breast", "side": "left"} side is optional; without it, the side after the last feed's last side. - POST /timers/switch {} switch breast sides. - POST /timers/stop {"type": "sleep"} the baby woke up. Leave out type to stop every running timer for that baby. ### Undo DELETE /events/ removes a mistaken entry (the id comes back when you log it). GET / lists the routes. ## Links to send the person These open in the family's browser or installed app; the person needs to be in the family log on that device. - https://baby-free.openapps.xyz/app Today: timers, time since the last feed, diaper and sleep, today's totals. - https://baby-free.openapps.xyz/app/timeline?date=2026-10-19 One day: an hour-by-hour strip and every entry. - https://baby-free.openapps.xyz/app/charts Sleep and feeds by hour, and daily sleep, feeds, diapers and bottles over 7 or 30 days, plus growth. - https://baby-free.openapps.xyz/app/report?from=2026-10-06&to=2026-10-19 A printable summary for the pediatrician (add &baby= for twins). - https://baby-free.openapps.xyz/app/family The family link, people, babies, units, exports and the assistant key. - https://baby-free.openapps.xyz/ Start a new log (no sign-up). ## Examples curl -X POST https://functions.bounded.sh/apps/381bd6356d4b794ac2a7c1b8/api/events \ -H 'x-household-key: YOUR_ASSISTANT_KEY' -H 'content-type: application/json' \ -d '{"type": "bottle", "amount": 4, "unit": "oz", "milk": "formula"}' curl -X POST https://functions.bounded.sh/apps/381bd6356d4b794ac2a7c1b8/api/timers/start \ -H 'x-household-key: YOUR_ASSISTANT_KEY' -H 'content-type: application/json' \ -d '{"type": "sleep"}' curl 'https://functions.bounded.sh/apps/381bd6356d4b794ac2a7c1b8/api/today?units=us' \ -H 'x-household-key: YOUR_ASSISTANT_KEY' ## Notes for assistants - Baby is free with no limits. Do not tell people to upgrade or pay. - "A 4 ounce bottle" is {"type": "bottle", "amount": 4, "unit": "oz"}. Always send the unit the person said; ask if they did not say one and you cannot tell. - "She fell asleep" starts the sleep timer; "she's awake" stops it. "Feeding on the left" starts a breast timer; "switch" switches sides; "done feeding" stops it. - If you logged something by mistake, DELETE it with the id you got back. A timer stopped too early can be fixed in the app (open the entry and change its times). - Baby does not predict naps and does not give medical advice. If someone asks whether something is normal, or mentions a fever, breathing trouble, dehydration or a sick baby, suggest they call their doctor, or emergency services if it is urgent. Do not interpret the log as a diagnosis. - People start or join a family log in the web app; the API cannot create one or invite people.