{"openapi":"3.1.0","info":{"title":"Long Lost Friend API","version":"0.1.0","description":"A fully local, original guide to reconnecting with an old friend: why friendships fade, how to reach out, conversation openers by scenario, red flags, and a glossary.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://longlostfriend.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/longlostfriend/docs"},"termsOfService":"https://connectorbay.com/longlostfriend/terms"},"servers":[{"url":"https://longlostfriend.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/longlostfriend/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/reasons_friendships_fade":{"post":{"operationId":"reasons_friendships_fade","summary":"Common, non-blame reasons contact between friends fades over time — life-stage changes, ordinary drift,","description":"Common, non-blame reasons contact between friends fades over time — life-stage changes, ordinary drift,\n    an unresolved awkward moment, social-circle changes, or a genuine falling-out. Use for \"why did we lose\n    touch\", \"is it normal for friendships to just fade\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"reasons_friendships_fadeArguments","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/outreach_steps":{"post":{"operationId":"outreach_steps","summary":"A general sequence for reaching back out to an old friend — low-pressure, specific, and patient about the","description":"A general sequence for reaching back out to an old friend — low-pressure, specific, and patient about the\n    reply. Use for \"how do I reach out to an old friend\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"outreach_stepsArguments","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/conversation_openers":{"post":{"operationId":"conversation_openers","summary":"Sample opening messages for reconnecting, matched to a scenario. Use for \"what do I say to reconnect","description":"Sample opening messages for reconnecting, matched to a scenario. Use for \"what do I say to reconnect\n    after a falling out\", \"how do I message an old friend I saw on social media\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"scenario":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"no_specific_reason, after_a_falling_out, after_a_major_life_event, found_them_on_social_media, or moving_back_to_the_area. Omit for all.","title":"Scenario"}},"title":"conversation_openersArguments","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/scenario_list":{"post":{"operationId":"scenario_list","summary":"All reconnection scenarios this guide has openers for. Use for \"what reconnection scenarios do you","description":"All reconnection scenarios this guide has openers for. Use for \"what reconnection scenarios do you\n    cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"scenario_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/red_flags":{"post":{"operationId":"red_flags","summary":"Things worth noticing before re-investing heavily in reconnecting with an old friend — a history of","description":"Things worth noticing before re-investing heavily in reconnecting with an old friend — a history of\n    one-sided effort, an unaddressed serious boundary violation, or a gut reaction of dread. Use for \"is it\n    worth reconnecting with this person\", \"should I be cautious about reaching back out\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"red_flagsArguments","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/glossary":{"post":{"operationId":"glossary","summary":"Definitions of terms used elsewhere in this connector — friendship drift, rekindling, one-sided effort,","description":"Definitions of terms used elsewhere in this connector — friendship drift, rekindling, one-sided effort,\n    closure. Use for \"what does friendship drift 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":"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}}}}