{"openapi":"3.1.0","info":{"title":"Standupflow API","version":"0.1.0","description":"A fully local daily-standup and async-update template reference: synchronous and asynchronous templates with worked examples, an update formatter, a context-to-template recommender, common mistakes, conciseness tips, and time-boxing guidance.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://standupflow.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/standupflow/docs"},"termsOfService":"https://connectorbay.com/standupflow/terms"},"servers":[{"url":"https://standupflow.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/standupflow/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/sync_template":{"post":{"operationId":"sync_template","summary":"Explains one live/synchronous standup structure: its questions, when to use it, a worked example, and a","description":"Explains one live/synchronous standup structure: its questions, when to use it, a worked example, and a\n    keep-it-short tip. Use for \"give me a standup template\", \"what's the goal-focused standup format\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"classic_three_question | goal_focused | walk_the_board","title":"Name","type":"string"}},"required":["name"],"title":"sync_templateArguments","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/sync_template_list":{"post":{"operationId":"sync_template_list","summary":"All three synchronous standup structures this reference covers. Use for \"what standup formats do you","description":"All three synchronous standup structures this reference covers. Use for \"what standup formats do you\n    know about\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"sync_template_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/async_template":{"post":{"operationId":"async_template","summary":"Explains one asynchronous written-update structure: its fields, when to use it, a worked example, and","description":"Explains one asynchronous written-update structure: its fields, when to use it, a worked example, and\n    posting tips. Use for \"what's a good async daily update format\", \"give me a weekly update template\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"written_daily_update | weekly_async_update | thread_based_update","title":"Name","type":"string"}},"required":["name"],"title":"async_templateArguments","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/async_template_list":{"post":{"operationId":"async_template_list","summary":"All three asynchronous update structures this reference covers. Use for \"what async update formats do","description":"All three asynchronous update structures this reference covers. Use for \"what async update formats do\n    you know about\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"async_template_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/format_update":{"post":{"operationId":"format_update","summary":"Assembles your own answers into a chosen template's structure as a formatted update — it only formats","description":"Assembles your own answers into a chosen template's structure as a formatted update — it only formats\n    what you provide, never invents content. Use for \"format my update into the written daily template\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"kind":{"description":"sync | async","title":"Kind","type":"string"},"template_name":{"description":"A template name from sync_template_list or async_template_list matching the chosen kind.","title":"Template Name","type":"string"},"answers":{"description":"Your own answers, in the same order as the template's structure fields.","items":{"type":"string"},"minItems":1,"title":"Answers","type":"array"}},"required":["kind","template_name","answers"],"title":"format_updateArguments","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/template_recommendation":{"post":{"operationId":"template_recommendation","summary":"Suggests the best-fitting standup/update template for a described team context. Use for \"what standup","description":"Suggests the best-fitting standup/update template for a described team context. Use for \"what standup\n    format fits a remote team across time zones\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"context":{"description":"A described team context, e.g. 'distributed team across many time zones' or 'co-located team with a shared task board'.","minLength":1,"title":"Context","type":"string"}},"required":["context"],"title":"template_recommendationArguments","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/common_mistakes":{"post":{"operationId":"common_mistakes","summary":"Frequent standup/async-update mistakes with fixes. Use for \"what are common standup mistakes\".","description":"Frequent standup/async-update mistakes with fixes. Use for \"what are common standup mistakes\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"common_mistakesArguments","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/conciseness_tips":{"post":{"operationId":"conciseness_tips","summary":"General tips for keeping a standup or async update short and useful. Use for \"how do I keep my updates","description":"General tips for keeping a standup or async update short and useful. Use for \"how do I keep my updates\n    more concise\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"conciseness_tipsArguments","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/time_box_guidance":{"post":{"operationId":"time_box_guidance","summary":"How long a live standup should run, what to do when it runs long, and the async equivalent of time-","description":"How long a live standup should run, what to do when it runs long, and the async equivalent of time-\n    boxing. Use for \"how long should a standup be\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"time_box_guidanceArguments","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}}}}