{"openapi":"3.1.0","info":{"title":"Fiscal Solutions Community Agent API","version":"1.0.0","description":"Use your AI assistant to explore the Fiscal Solutions Retail Compliance Community and register for events. You do not need an API key. When you join or register for the first time, the assistant will guide you through business-email verification.\n\nFor developers: discovery endpoints are public. Joining and registering are called through a centrally operated connector configured by Fiscal Solutions or an approved connector operator. The connector credential identifies the integration, never a person, and is never a Community member credential; each person is verified separately by business email and gets their own member session. All Community journeys (discovery, verification, joining, linking, recovery, legal acceptance, registration) complete in the conversation. Times are ISO 8601 with offset plus an explicit IANA `timezone`. IDs are opaque. Versioned under /v1; breaking changes get a new version with a published deprecation window of at least 6 months."},"servers":[{"url":"https://fiscal.community/api/agent/v1"}],"paths":{"/community":{"get":{"operationId":"get_community_info","summary":"Membership proposition, eligibility and current legal document references.","description":"Membership proposition, eligibility and current legal document references. Public: no credential or account needed. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{},{"connectorCredential":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forums":{"get":{"operationId":"list_upcoming_forums","summary":"Published upcoming Retail Compliance Forums. Filter by time, topic and language.","description":"Published upcoming Retail Compliance Forums. Filter by time, topic and language. Public: no credential or account needed. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{},{"connectorCredential":[]}],"parameters":[{"name":"from","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"topic","in":"query","schema":{"type":"string"}},{"name":"language","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forums/{id}":{"get":{"operationId":"get_forum","summary":"Public Forum metadata, registration state and deadline.","description":"Public Forum metadata, registration state and deadline. Public: no credential or account needed. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{},{"connectorCredential":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Opaque ID returned by this API"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/community-days/current":{"get":{"operationId":"get_community_day","summary":"Published Community Day: date, venue, availability and event-specific fields.","description":"Published Community Day: date, venue, availability and event-specific fields. Public: no credential or account needed. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{},{"connectorCredential":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/registration-requirements":{"get":{"operationId":"get_registration_requirements","summary":"Required profile fields and the full text + version of the current Terms of Use and Privacy Policy. Present them only when verify_email_code reports a legal action is required for the verified person — not before verification and not for members whose acceptances are current.","description":"Required profile fields and the full text + version of the current Terms of Use and Privacy Policy. Present them only when verify_email_code reports a legal action is required for the verified person — not before verification and not for members whose acceptances are current. Public: no credential or account needed. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{},{"connectorCredential":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/me/registrations":{"get":{"operationId":"get_my_registrations","summary":"The linked member's own Forum and Community Day registrations.","description":"The linked member's own Forum and Community Day registrations. Acts for one verified member only. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{"connectorCredential":[],"memberSession":["registrations.read"]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/email-verifications":{"post":{"operationId":"start_email_verification","summary":"Emails a 6-digit code to a business email. An email-capable agent may read it; otherwise ask the user to type it in chat.","description":"Emails a 6-digit code to a business email. An email-capable agent may read it; otherwise ask the user to type it in chat. Called by the connector; the person is identified by business-email verification. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{"connectorCredential":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","purpose"],"properties":{"email":{"type":"string","format":"email"},"purpose":{"enum":["join","link","recover"]},"event":{"type":"object","properties":{"type":{"enum":["forum","community_day"]},"id":{"type":"string"}},"description":"Event selected before verification; preserved through the journey"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/email-verifications/{id}/verify":{"post":{"operationId":"verify_email_code","summary":"Checks the code and returns a short-lived verified-email proof bound to this client, plus the verified person's membership_state and the required_legal_action (accept_new_member_terms, reaccept_updated_versions or none) with the exact legal versions to present. Membership state is only revealed after verification.","description":"Checks the code and returns a short-lived verified-email proof bound to this client, plus the verified person's membership_state and the required_legal_action (accept_new_member_terms, reaccept_updated_versions or none) with the exact legal versions to present. Membership state is only revealed after verification. Called by the connector; the person is identified by business-email verification. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{"connectorCredential":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Opaque ID returned by this API"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["code"],"properties":{"code":{"type":"string","pattern":"^\\d{6}$"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/member-links":{"post":{"operationId":"link_existing_member","summary":"Links a verified existing member to this agent and returns a member session token.","description":"Links a verified existing member to this agent and returns a member session token. Called by the connector; the person is identified by business-email verification. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{"connectorCredential":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["verified_email_proof"],"properties":{"verified_email_proof":{"type":"string"},"external_subject":{"type":"string","description":"Optional agent-platform user ID stored as a secondary identity"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/membership":{"post":{"operationId":"join_community","summary":"Creates the membership after a verified email and explicit legal action, then optionally registers for the selected event.","description":"Creates the membership after a verified email and explicit legal action, then optionally registers for the selected event. Called by the connector; the person is identified by business-email verification. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{"connectorCredential":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["verified_email_proof","profile","legal_acceptance"],"properties":{"verified_email_proof":{"type":"string"},"profile":{"type":"object","required":["first_name","last_name","company","job_title","country"],"properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"company":{"type":"string"},"job_title":{"type":"string"},"country":{"type":"string"}}},"legal_acceptance":{"type":"object","required":["legal_version_ids","accept_terms","acknowledge_privacy"],"properties":{"legal_version_ids":{"type":"array","items":{"type":"string"},"description":"Exact published versions shown to the user"},"accept_terms":{"const":true,"description":"User explicitly accepted the Terms of Use in the conversation"},"acknowledge_privacy":{"const":true,"description":"User explicitly acknowledged the Privacy Policy"},"user_statement":{"type":"string","description":"The user's own words of acceptance, stored for audit"}}},"external_subject":{"type":"string"},"event":{"type":"object","required":["type","id"],"properties":{"type":{"enum":["forum","community_day"]},"id":{"type":"string"},"answers":{"$ref":"#/components/schemas/CommunityDayAnswers"}}}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/membership/recovery":{"post":{"operationId":"recover_membership","summary":"Recovers an inactive membership after email verification (sends a rejoin request to the Community Manager).","description":"Recovers an inactive membership after email verification (sends a rejoin request to the Community Manager). Called by the connector; the person is identified by business-email verification. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{"connectorCredential":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["verified_email_proof"],"properties":{"verified_email_proof":{"type":"string"},"external_subject":{"type":"string"},"legal_acceptance":{"type":"object","required":["legal_version_ids","accept_terms","acknowledge_privacy"],"properties":{"legal_version_ids":{"type":"array","items":{"type":"string"},"description":"Exact published versions shown to the user"},"accept_terms":{"const":true,"description":"User explicitly accepted the Terms of Use in the conversation"},"acknowledge_privacy":{"const":true,"description":"User explicitly acknowledged the Privacy Policy"},"user_statement":{"type":"string","description":"The user's own words of acceptance, stored for audit"}}}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/me/legal-acceptances":{"post":{"operationId":"accept_current_legal_versions","summary":"Records the member's explicit acceptance of the current legal versions.","description":"Records the member's explicit acceptance of the current legal versions. Acts for one verified member only. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{"connectorCredential":[],"memberSession":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["legal_version_ids","accept_terms","acknowledge_privacy"],"properties":{"legal_version_ids":{"type":"array","items":{"type":"string"},"description":"Exact published versions shown to the user"},"accept_terms":{"const":true,"description":"User explicitly accepted the Terms of Use in the conversation"},"acknowledge_privacy":{"const":true,"description":"User explicitly acknowledged the Privacy Policy"},"user_statement":{"type":"string","description":"The user's own words of acceptance, stored for audit"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forums/{id}/registrations":{"post":{"operationId":"register_for_forum","summary":"Registers the linked member for a published, open Forum (Community + webinar provider). A repeat call for an already active registration returns `already_registered` without re-registering or resending the confirmation email.","description":"Registers the linked member for a published, open Forum (Community + webinar provider). A repeat call for an already active registration returns `already_registered` without re-registering or resending the confirmation email. Acts for one verified member only. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{"connectorCredential":[],"memberSession":["registrations.write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Opaque ID returned by this API"},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/community-days/{id}/registrations":{"post":{"operationId":"register_for_community_day","summary":"Registers the linked member for Community Day using the saved profile plus event answers.","description":"Registers the linked member for Community Day using the saved profile plus event answers. Acts for one verified member only. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{"connectorCredential":[],"memberSession":["registrations.write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Opaque ID returned by this API"},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":8,"maxLength":100}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"answers":{"$ref":"#/components/schemas/CommunityDayAnswers"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/forums/{id}/join-access":{"post":{"operationId":"get_forum_join_access","summary":"Access status and personal join instructions for a registered member. Possible states: `open` (personal link ready), `link_available_room_not_yet_open` (link saved, room opens at `room_opens_at`), `ended`, and `link_unavailable`.","description":"Access status and personal join instructions for a registered member. Possible states: `open` (personal link ready), `link_available_room_not_yet_open` (link saved, room opens at `room_opens_at`), `ended`, and `link_unavailable`. Acts for one verified member only. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{"connectorCredential":[],"memberSession":["join_access.read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Opaque ID returned by this API"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/me/session":{"delete":{"operationId":"unlink_member_session","summary":"Revokes this agent's member link without deleting the membership.","description":"Revokes this agent's member link without deleting the membership. Acts for one verified member only. Completes inside the conversation; the member never needs an API key or a website visit.","security":[{"connectorCredential":[],"memberSession":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"202":{"description":"Accepted / pending","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Envelope"}}}},"default":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"connectorCredential":{"type":"apiKey","in":"header","name":"X-Agent-Client-Key","description":"Connector credential held by the connector operator (Fiscal Solutions or an approved operator). Identifies the integration, never a person. Never request it from or issue it to a Community member."},"memberSession":{"type":"http","scheme":"bearer","description":"Member session token from link_existing_member / join_community / recover_membership. Scopes: community.read, registrations.read, registrations.write, join_access.read."}},"schemas":{"Envelope":{"type":"object","required":["request_id","status","next_action"],"properties":{"request_id":{"type":"string"},"status":{"type":"string","examples":["code_sent","verified","member_created","linked","registered","already_registered","pending","failed","waitlisted","unavailable"]},"resource_id":{"type":"string"},"next_action":{"type":"string"}},"additionalProperties":true},"Error":{"type":"object","required":["request_id","status","error","next_action"],"properties":{"request_id":{"type":"string"},"status":{"const":"error"},"state":{"enum":["verification_required","legal_action_required","already_registered","pending","error"],"description":"Plain-language state to guide the person"},"next_action":{"type":"string"},"error":{"type":"object","properties":{"code":{"enum":["identity_required","client_unauthorized","insufficient_scope","membership_inactive","legal_action_required","registration_closed","event_unpublished","not_found","already_registered","validation_failed","verification_failed","rate_limited","provider_unavailable","internal_error"]},"message":{"type":"string"}}}}},"CommunityDayAnswers":{"type":"object","properties":{"dietary_requirements":{"type":"string"},"arrival_note":{"type":"string"}}}}}}