{"openapi":"3.1.0","info":{"title":"Meetzone API","version":"0.1.0","description":"A fully local meeting-fairness and etiquette tool for distributed teams: inconvenience scoring, fair rotation, a burden tracker, core-hours policy, a meeting-load audit, and hand-curated async-vs-sync guidance, an equity checklist, a glossary, and facilitation tips. Not a timezone-conversion or slot-finder tool.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://meetzone.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/meetzone/docs"},"termsOfService":"https://connectorbay.com/meetzone/terms"},"servers":[{"url":"https://meetzone.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/meetzone/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/inconvenience_score":{"post":{"operationId":"inconvenience_score","summary":"Scores how inconvenient a single proposed UTC hour is for each named teammate (core/early-late/very-","description":"Scores how inconvenient a single proposed UTC hour is for each named teammate (core/early-late/very-\n    early-late/overnight, by their own local clock), with an overall fairness verdict. This judges a time you\n    already have in mind — it does not search for or convert times. Use for \"how fair is a 9am ET standup for\n    our Singapore teammate\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"utc_hour":{"description":"The proposed meeting time as a UTC hour (0-23).","maximum":23,"minimum":0,"title":"Utc Hour","type":"integer"},"teammates":{"description":"Each as {name, timezone} — timezone is an IANA name.","examples":[[{"name":"Priya","timezone":"Asia/Kolkata"},{"name":"Jordan","timezone":"America/New_York"}]],"items":{"additionalProperties":true,"type":"object"},"minItems":1,"title":"Teammates","type":"array"},"reference_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"YYYY-MM-DD to resolve DST; default today.","title":"Reference Date"}},"required":["utc_hour","teammates"],"title":"inconvenience_scoreArguments","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/rotate_schedule":{"post":{"operationId":"rotate_schedule","summary":"Spreads 2+ candidate meeting times across future occurrences so the inconvenient slot rotates instead of","description":"Spreads 2+ candidate meeting times across future occurrences so the inconvenient slot rotates instead of\n    always falling on the same person, minimizing the worst-off teammate's cumulative discomfort. Use for\n    \"rotate our recurring meeting fairly across these time options\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"teammates":{"description":"Each as {name, timezone}.","examples":[[{"name":"Priya","timezone":"Asia/Kolkata"},{"name":"Jordan","timezone":"America/New_York"}]],"items":{"additionalProperties":true,"type":"object"},"minItems":1,"title":"Teammates","type":"array"},"candidate_times":{"description":"Each as {label, utc_hour} — the 2+ time options to rotate between.","examples":[[{"label":"9am ET / 6:30pm IST","utc_hour":13},{"label":"8am IST / 10:30pm ET (prior day)","utc_hour":2}]],"items":{"additionalProperties":true,"type":"object"},"minItems":2,"title":"Candidate Times","type":"array"},"occurrences":{"default":8,"description":"How many future occurrences to plan a rotation for.","maximum":52,"minimum":1,"title":"Occurrences","type":"integer"},"reference_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"YYYY-MM-DD to resolve DST; default today.","title":"Reference Date"}},"required":["teammates","candidate_times"],"title":"rotate_scheduleArguments","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/burden_tracker":{"post":{"operationId":"burden_tracker","summary":"Tallies cumulative discomfort per teammate from a history of past meeting times, and recommends who's","description":"Tallies cumulative discomfort per teammate from a history of past meeting times, and recommends who's\n    owed the convenient pick next. Use for \"who's owed the good slot next based on our last few meetings\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"teammates":{"description":"Each as {name, timezone}.","examples":[[{"name":"Priya","timezone":"Asia/Kolkata"},{"name":"Jordan","timezone":"America/New_York"}]],"items":{"additionalProperties":true,"type":"object"},"minItems":1,"title":"Teammates","type":"array"},"history":{"description":"Each as {utc_hour} — the UTC hour actually used for each past occurrence, in order.","items":{"additionalProperties":true,"type":"object"},"minItems":1,"title":"History","type":"array"},"reference_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"YYYY-MM-DD to resolve DST; default today.","title":"Reference Date"}},"required":["teammates","history"],"title":"burden_trackerArguments","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/core_hours_policy":{"post":{"operationId":"core_hours_policy","summary":"Scans all 24 UTC hours against your team's timezones and reports which are universally reasonable, which","description":"Scans all 24 UTC hours against your team's timezones and reports which are universally reasonable, which\n    are workable only with rotation, and which force someone fully overnight — a standing scheduling policy read\n    for the team, not a one-off slot search. Use for \"what UTC hours work for everyone on our team without\n    anyone being up at 3am\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"teammates":{"description":"Each as {name, timezone}.","examples":[[{"name":"Priya","timezone":"Asia/Kolkata"},{"name":"Jordan","timezone":"America/New_York"}]],"items":{"additionalProperties":true,"type":"object"},"minItems":1,"title":"Teammates","type":"array"},"reference_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"YYYY-MM-DD to resolve DST; default today.","title":"Reference Date"}},"required":["teammates"],"title":"core_hours_policyArguments","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/meeting_load_report":{"post":{"operationId":"meeting_load_report","summary":"Audits an existing set of recurring meetings for lopsided off-hours load across the team — total weekly","description":"Audits an existing set of recurring meetings for lopsided off-hours load across the team — total weekly\n    minutes each teammate spends outside core hours, and the disruptive overnight subset. Use for \"is our\n    meeting schedule unfair to anyone right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"teammates":{"description":"Each as {name, timezone}.","examples":[[{"name":"Priya","timezone":"Asia/Kolkata"},{"name":"Jordan","timezone":"America/New_York"}]],"items":{"additionalProperties":true,"type":"object"},"minItems":1,"title":"Teammates","type":"array"},"meetings":{"description":"Each as {label, utc_hour, duration_minutes} — your existing recurring meetings.","items":{"additionalProperties":true,"type":"object"},"minItems":1,"title":"Meetings","type":"array"},"reference_date":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"YYYY-MM-DD to resolve DST; default today.","title":"Reference Date"}},"required":["teammates","meetings"],"title":"meeting_load_reportArguments","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_vs_sync_guide":{"post":{"operationId":"async_vs_sync_guide","summary":"Recommends sync, async, or hybrid for a meeting's purpose, with reasoning, adjusted for how spread out","description":"Recommends sync, async, or hybrid for a meeting's purpose, with reasoning, adjusted for how spread out\n    the team is across time zones. Use for \"should this be a live meeting or can it be async\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"purpose":{"description":"The meeting's purpose, in plain language.","examples":["weekly status update","need to decide on the vendor","brainstorm new feature ideas","quarterly 1:1"],"minLength":1,"title":"Purpose","type":"string"},"team_spread_hours":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Roughly how many hours apart your furthest-apart teammates are, if known.","title":"Team Spread Hours"}},"required":["purpose"],"title":"async_vs_sync_guideArguments","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/equity_checklist":{"post":{"operationId":"equity_checklist","summary":"A hand-curated checklist of distributed-team meeting-fairness practices — rotating the inconvenient slot,","description":"A hand-curated checklist of distributed-team meeting-fairness practices — rotating the inconvenient slot,\n    recording for off-hours attendees, protecting no-meeting hours, and more. Use for \"how do we make our\n    meeting schedule fairer across time zones\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"equity_checklistArguments","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/timezone_etiquette_glossary":{"post":{"operationId":"timezone_etiquette_glossary","summary":"Definitions of distributed-team scheduling terms — follow-the-sun, core overlap hours, time zone tax,","description":"Definitions of distributed-team scheduling terms — follow-the-sun, core overlap hours, time zone tax,\n    async-first, meeting-free day, always-on culture, hub timezone bias. Use for \"what's the time zone tax\",\n    \"what does async-first mean\".","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":"timezone_etiquette_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}},"/v1/tools/facilitation_tips_for_mixed_hours":{"post":{"operationId":"facilitation_tips_for_mixed_hours","summary":"Concrete facilitation tips for a meeting with someone joining at an inconvenient hour, a recurring","description":"Concrete facilitation tips for a meeting with someone joining at an inconvenient hour, a recurring\n    rotating slot, or a mixed sync/async format. Use for \"how do I run a meeting well when someone's joining at\n    5am their time\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"scenario":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"someone_joining_very_early_or_overnight | recurring_meeting_with_a_rotating_inconvenient_slot | mixed_sync_async_meeting; omit to list all.","title":"Scenario"}},"title":"facilitation_tips_for_mixed_hoursArguments","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}}}}