{"openapi":"3.1.0","info":{"title":"Milestone Keep API","version":"0.1.0","description":"A fully local, original relationship-anniversary/milestone reference — gift-by-year associations, celebration ideas, and a milestone calculator.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://milestonekeep.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/milestonekeep/docs"},"termsOfService":"https://connectorbay.com/milestonekeep/terms"},"servers":[{"url":"https://milestonekeep.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/milestonekeep/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/milestone_types":{"post":{"operationId":"milestone_types","summary":"The kinds of relationship milestones this reference covers. Use for \"what milestone types do you","description":"The kinds of relationship milestones this reference covers. Use for \"what milestone types do you\n    cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"milestone_typesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/year_gift":{"post":{"operationId":"year_gift","summary":"The traditional/modern gift-material association for one anniversary year. Use for \"what's the gift for a","description":"The traditional/modern gift-material association for one anniversary year. Use for \"what's the gift for a\n    25th anniversary\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"year":{"description":"The anniversary year number, e.g. 10.","maximum":100,"minimum":1,"title":"Year","type":"integer"}},"required":["year"],"title":"year_giftArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/year_gift_full_list":{"post":{"operationId":"year_gift_full_list","summary":"Every individually-listed anniversary year with its traditional/modern gift association. Use for \"show me","description":"Every individually-listed anniversary year with its traditional/modern gift association. Use for \"show me\n    the whole anniversary gift list\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"year_gift_full_listArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/days_until_next_milestone":{"post":{"operationId":"days_until_next_milestone","summary":"Days until the next anniversary of a given date, the year number it will be, and that year's gift","description":"Days until the next anniversary of a given date, the year number it will be, and that year's gift\n    association. Use for \"how many days until our anniversary\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"anniversary_date":{"description":"The original date, YYYY-MM-DD.","title":"Anniversary Date","type":"string"},"today":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Override today's date for testing, YYYY-MM-DD; omit to use the real current date.","title":"Today"}},"required":["anniversary_date"],"title":"days_until_next_milestoneArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/celebration_ideas":{"post":{"operationId":"celebration_ideas","summary":"Celebration ideas at a given scale. Use for \"anniversary celebration ideas\".","description":"Celebration ideas at a given scale. Use for \"anniversary celebration ideas\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"scale":{"default":"medium","description":"small, medium, or large.","title":"Scale","type":"string"},"count":{"default":4,"maximum":4,"minimum":1,"title":"Count","type":"integer"}},"title":"celebration_ideasArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/milestone_glossary":{"post":{"operationId":"milestone_glossary","summary":"Definitions of milestone/anniversary terms. Use for \"what's a vow renewal\".","description":"Definitions of milestone/anniversary terms. Use for \"what's a vow renewal\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"term":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A specific term to look up; omit to list all.","title":"Term"}},"title":"milestone_glossaryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}