{"openapi":"3.1.0","info":{"title":"calories API","version":"1.0.0"},"servers":[{"url":"https://calories.dorianmarie.com"}],"paths":{"/api":{"get":{"summary":"public application metadata","responses":{"200":{"description":"project and api links"}}}},"/api/identity":{"get":{"summary":"authenticated identity","security":[{"bearer":[]},{"cookie":[]}],"responses":{"200":{"description":"user id and email"},"401":{"description":"sign in required"}}}},"/api/meals?day=YYYY-MM-DD":{"get":{"summary":"private meals, original inputs, and total for a day; account required","security":[{"cookie":[]},{"bearer":[]}],"responses":{"200":{"description":"success"},"401":{"description":"authentication required"}}}},"/api/meals":{"post":{"summary":"save {id,day,description,calories,estimated,assumptions,original_description,original_calories,original_photo}; original_photo is a jpeg/png/webp data url up to 10 MB; same-origin, account required","security":[{"cookie":[]},{"bearer":[]}],"responses":{"200":{"description":"success"},"401":{"description":"authentication required"}}}},"/api/estimate":{"post":{"summary":"estimate {description,photo} with gpt-6-astra; photo is a data url up to 3 MB; returns editable calories, description, assumptions; 50 attempts per account per UTC day","security":[{"cookie":[]},{"bearer":[]}],"responses":{"200":{"description":"success"},"401":{"description":"authentication required"}}}},"/api/photos/{meal_id}":{"get":{"summary":"original private meal photo; owner account required; never cached","security":[{"cookie":[]},{"bearer":[]}],"responses":{"200":{"description":"success"},"401":{"description":"authentication required"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"},"cookie":{"type":"apiKey","in":"cookie","name":"__Host-dm-session"}}}}