{"openapi":"3.1.0","info":{"title":"CommonHour Agent API","version":"0.2.0","description":"Agent-ready API for consented offline social intent, host capabilities, and aggregate market signals."},"servers":[{"url":"https://joincommonhour.com"}],"paths":{"/api/agent-capabilities":{"get":{"operationId":"getAgentCapabilities","summary":"Describe CommonHour agent capabilities.","description":"Returns safe, public metadata about CommonHour actions and policies.","x-openai-isConsequential":false,"responses":{"200":{"description":"Capability document."}}}},"/api/market-summary":{"get":{"operationId":"getMarketSummary","summary":"Get aggregate market signals.","description":"Returns aggregate participant demand and host supply without personal data.","x-openai-isConsequential":false,"responses":{"200":{"description":"Aggregate market summary."}}}},"/api/waitlist":{"post":{"operationId":"submitParticipantIntent","summary":"Submit participant social intent.","description":"Use when a user wants CommonHour to find or create an offline social plan. Requires explicit consent.","x-openai-isConsequential":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["full_name","email","city","user_confirmed"],"properties":{"full_name":{"type":"string","minLength":2},"email":{"type":"string","format":"email"},"city":{"type":"string","minLength":2},"neighbourhood":{"type":"string"},"circle_slug":{"type":"string"},"intent_category":{"type":"string","description":"Books, Walks, Coffee, Side projects, Learning, Discussion, Games, or similar."},"interest_note":{"type":"string","description":"Natural-language request with interests, budget, availability, and group fit."},"budget_min_dollars":{"type":"number","minimum":0},"budget_max_dollars":{"type":"number","minimum":0},"availability_note":{"type":"string"},"preferred_group_size_min":{"type":"integer","minimum":2},"preferred_group_size_max":{"type":"integer","minimum":2},"comfort_level":{"type":"string"},"shareable_city_interest":{"type":"boolean","default":true,"description":"Allows this intent to be included in aggregate city-level demand."},"submitted_by_agent":{"type":"boolean","default":false,"description":"True when an AI agent submits on behalf of a user."},"agent_name":{"type":"string","description":"Name of the AI agent or app submitting the request."},"agent_platform":{"type":"string","description":"Agent surface, such as ChatGPT, Gemini, Claude, or a custom assistant."},"user_confirmed":{"type":"boolean","const":true,"description":"Must be true. User approved sending this personal data to CommonHour."},"consent_text":{"type":"string","description":"Consent text shown to the user before submission."},"consent_timestamp":{"type":"string","format":"date-time","description":"When the user consented, if known."}}}}}},"responses":{"201":{"description":"Participant intent received."},"422":{"description":"Validation failed."},"500":{"description":"Submission failed."}}}},"/api/host-applications":{"post":{"operationId":"submitHostCapability","summary":"Offer a CommonHour host capability.","description":"Use when a user can host a small paid public gathering and wants relevant demand routed after review.","x-openai-isConsequential":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["full_name","email","city","neighbourhood","proposed_circle_title","category","proposed_description","proposed_public_location","proposed_price_dollars","proposed_max_seats","host_bio","public_place_agreement","adult_agreement","no_restricted_events_agreement","manual_review_agreement","user_confirmed"],"properties":{"full_name":{"type":"string","minLength":2},"email":{"type":"string","format":"email"},"phone":{"type":"string"},"city":{"type":"string","minLength":2},"neighbourhood":{"type":"string","minLength":2},"proposed_circle_title":{"type":"string","minLength":3},"category":{"type":"string"},"proposed_description":{"type":"string","minLength":20,"description":"Who the host can help, tone, topics, schedule flexibility, and fit."},"proposed_public_location":{"type":"string","minLength":3},"proposed_price_dollars":{"type":"number","minimum":0,"maximum":100},"proposed_max_seats":{"type":"integer","minimum":2,"maximum":8},"host_bio":{"type":"string","minLength":20},"social_link":{"type":"string"},"availability_note":{"type":"string"},"public_place_agreement":{"type":"boolean","const":true},"adult_agreement":{"type":"boolean","const":true},"no_restricted_events_agreement":{"type":"boolean","const":true},"manual_review_agreement":{"type":"boolean","const":true},"submitted_by_agent":{"type":"boolean","default":false,"description":"True when an AI agent submits on behalf of a user."},"agent_name":{"type":"string","description":"Name of the AI agent or app submitting the request."},"agent_platform":{"type":"string","description":"Agent surface, such as ChatGPT, Gemini, Claude, or a custom assistant."},"user_confirmed":{"type":"boolean","const":true,"description":"Must be true. User approved sending this personal data to CommonHour."},"consent_text":{"type":"string","description":"Consent text shown to the user before submission."},"consent_timestamp":{"type":"string","format":"date-time","description":"When the user consented, if known."}}}}}},"responses":{"201":{"description":"Host capability received."},"422":{"description":"Validation failed."},"500":{"description":"Submission failed."}}}}}}