{"openapi":"3.1.0","info":{"title":"Firstdatesafety API","version":"0.1.0","description":"A fully local, hand-curated reference of practical, non-alarmist safety-planning tips for meeting someone new for the first time: before the date, choosing a location, telling someone & check-ins, transportation, and during the date.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://firstdatesafety.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/firstdatesafety/docs"},"termsOfService":"https://connectorbay.com/firstdatesafety/terms"},"servers":[{"url":"https://firstdatesafety.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/firstdatesafety/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/tip_info":{"post":{"operationId":"tip_info","summary":"Full detail for one first-date safety-planning tip. Use for \"why should I tell a friend where I'm going\".","description":"Full detail for one first-date safety-planning tip. Use for \"why should I tell a friend where I'm going\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"topic":{"description":"A planning topic or tip name.","examples":["public meeting spot","check in plan","trust your gut"],"minLength":1,"title":"Topic","type":"string"}},"required":["topic"],"title":"tip_infoArguments","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/tip_search":{"post":{"operationId":"tip_search","summary":"Keyword search across every tip's name, category, guidance and tagged situations. Use for \"tips about","description":"Keyword search across every tip's name, category, guidance and tagged situations. Use for \"tips about\n    transportation\", \"anything about video calls before meeting\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"description":"Keyword to search for.","minLength":1,"title":"Query","type":"string"}},"required":["query"],"title":"tip_searchArguments","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/tips_by_category":{"post":{"operationId":"tips_by_category","summary":"Every tip in one category. Use category_list for valid names. Use for \"list all tips about choosing a","description":"Every tip in one category. Use category_list for valid names. Use for \"list all tips about choosing a\n    location\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"category":{"description":"A category name.","examples":["Before the Date","Choosing a Location"],"title":"Category","type":"string"}},"required":["category"],"title":"tips_by_categoryArguments","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/category_list":{"post":{"operationId":"category_list","summary":"Every tip category with how many tips are in it. Use for \"what topics do you cover\".","description":"Every tip category with how many tips are in it. Use for \"what topics do you cover\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"category_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/find_tip_for_situation":{"post":{"operationId":"find_tip_for_situation","summary":"Suggests 1-4 tips for a stated situation. Use for \"meeting someone from a dating app for the first time\",","description":"Suggests 1-4 tips for a stated situation. Use for \"meeting someone from a dating app for the first time\",\n    \"how do I leave a date early\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"situation":{"description":"A situation, in plain language.","examples":["meeting someone from a dating app","want to leave a date early","should i let my date pick me up"],"minLength":1,"title":"Situation","type":"string"}},"required":["situation"],"title":"find_tip_for_situationArguments","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/safety_checklist":{"post":{"operationId":"safety_checklist","summary":"A shortlist of the most essential first-date safety-planning tips. Use for \"what are the most important","description":"A shortlist of the most essential first-date safety-planning tips. Use for \"what are the most important\n    things to do before a first date\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"count":{"default":8,"description":"How many essentials to return.","maximum":10,"minimum":1,"title":"Count","type":"integer"}},"title":"safety_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/check_in_plan":{"post":{"operationId":"check_in_plan","summary":"Builds a simple, ready-to-use check-in plan: who to tell, what to share beforehand, check-in message ideas,","description":"Builds a simple, ready-to-use check-in plan: who to tell, what to share beforehand, check-in message ideas,\n    and what to agree on if a check-in doesn't happen. Use for \"help me set up a check-in for my date tonight\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Who you'd tell (a name or role); omit for a generic template.","title":"Contact Name"},"meeting_time":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"When the date is; omit to leave blank.","title":"Meeting Time"}},"title":"check_in_planArguments","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/location_ideas":{"post":{"operationId":"location_ideas","summary":"Suggests good types of public meeting spots for a setting — daytime/casual, evening, activity-based, or","description":"Suggests good types of public meeting spots for a setting — daytime/casual, evening, activity-based, or\n    quick/low-pressure. Use for \"where should I meet someone for a first date in the evening\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"setting":{"description":"A setting type.","examples":["daytime casual","evening","activity based","quick low pressure"],"title":"Setting","type":"string"}},"required":["setting"],"title":"location_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/glossary":{"post":{"operationId":"glossary","summary":"Definitions of a few practical planning terms — public meeting spot, check-in call, soft exit, video-call","description":"Definitions of a few practical planning terms — public meeting spot, check-in call, soft exit, video-call\n    vetting, own transportation, group hangout. Use for \"what's a soft exit\".","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}}}}