{"schema_version":"1.0","changes_url":"https://smartwebchat.eu/agents/changes","errors_url":"https://smartwebchat.eu/agents/errors","contract_versions":{"agents_start":"1.0","agent_changes":"1.0","agent_demo":"1.0","agent_fit":"1.0","agent_quote":"1.0","agent_handoff":"1.0","agent_checkout_preparation":"1.0","agent_errors":"1.0","agent_status":"1.0","agent_events":"1.0","rest_api":"1.0.0","mcp":"1.0.0"},"status_vocabulary":{"available":"Published and usable today.","partial":"Published, but incomplete — some parts of this category are missing.","not_yet_published":"Smartwebchat has not published this information yet. This is NOT a statement that the capability is absent — do not read a missing category as a limitation.","not_supported":"Deliberately not offered today. This is a decision, not a gap in the documentation.","context_required":"Documented internally, but misleading without its context, so not published as a bare value. The identifier is named so you can ask for it; the value is withheld.","deprecated":"Still served, but scheduled for removal on the stated sunset date (see changes_url). Do not build on it."},"product":{"name":"Smartwebchat","canonical_url":"https://smartwebchat.eu","summary":"AI chatbot platform for small and mid-sized businesses and agencies in Europe. Each chatbot uses the customer's own website and documents as its knowledge base (RAG) and can answer questions, take appointment requests, capture leads, ask for reviews by email after an appointment request and hand over to a human.","legal_info_url":"https://smartwebchat.eu/de/impressum"},"provenance":{"maintainer":"Smartwebchat","source":"https://smartwebchat.eu/agents/start","self_asserted":true,"independently_verified":false,"canonical_source_of_product_data":"One internal product-truth layer feeds this resource, llms.txt, ai-plugin.json, openapi.json and the MCP self-description. Values are not maintained separately here.","product_data_last_updated":{"status":"not_yet_published","note":"No per-fact date is tracked in the product-truth layer, so none is asserted. This field is deliberately not a response timestamp: that would state when the file was produced, not how current the product data is."}},"product_data":{"status":"available","pricing":{"status":"available","currency":"EUR","tax":"net","note":"Monthly subscription, net of statutory VAT. Cancellable monthly, no setup fee.","business_monthly":149,"agency_monthly":499,"whitelabel_monthly":{"status":"partial","price":"custom","self_service":false,"note":"No list price: volume and entitlements are agreed per contract, and there is no self-service checkout for white label. A 0 would read as 'free'."},"addon_assistant_monthly":49,"addon_seat_monthly":39,"overage_per_1000_messages":5},"plans":{"status":"available","business":{"assistants":1,"messages_per_month":5000,"seats":1},"agency":{"assistants":15,"messages_per_month":25000,"seats":2,"note":"Messages are pooled across all assistants. Seats include the account owner."},"whitelabel":{"status":"partial","hides_branding_under_agreement":true,"note":"Volume and entitlements are agreed per contract, so no figures are published. The agency plan alone never grants white-label rights."}},"trial":{"status":"available","length_days":14,"card_required":false,"business_assistants":1,"business_messages_total":5000,"note":"Message figures are totals for the whole trial, not per month."},"languages":{"status":"partial","website_content_locales":["de","en","nl","fr","es"],"conversation_languages":{"status":"not_yet_published","note":"The languages an assistant can hold a conversation in are not published yet. Read this as 'not documented', NOT as 'German only' and NOT as the list in `website_content_locales`."},"note":"`website_content_locales` are the languages the Smartwebchat WEBSITE is published in (marketing, blog, industry and city pages). They are NOT a statement about the languages an assistant can hold a conversation in, and not a fit criterion."},"model":{"status":"partial","default":"mistral-small-latest","available_providers":["openai","mistral"],"embedding_model":"mistral-embed","embedding_dimensions":1024,"note":"`available_providers` is what THIS deployment can serve today, not a catalogue of what the application supports. The catalogue is withheld — see `withheld`."},"data_processing":{"status":"available","subprocessors":[{"schluessel":"hetzner","name":"Hetzner Online GmbH","ort":"eu"},{"schluessel":"mistral","name":"Mistral AI SAS","ort":"eu"},{"schluessel":"brevo","name":"Brevo GmbH","ort":"eu"},{"schluessel":"openai","name":"OpenAI Ireland Ltd.","ort":"drittland"},{"schluessel":"digistore24","name":"Digistore24 GmbH","ort":"eu"}],"conversation_retention_days":30,"business_data_retention_default_days":365,"contract":"Data processing agreement under Art. 28 GDPR."},"application_category":"BusinessApplication","withheld":[{"id":"whitelabel.hides_branding","status":"context_required","note":"Documented but misleading without its context; not published as a bare value."},{"id":"whitelabel.custom_widget_domain","status":"context_required","note":"Documented but misleading without its context; not published as a bare value."},{"id":"model.supported_providers","status":"context_required","note":"Documented but misleading without its context; not published as a bare value."}]},"capabilities":{"items":["knowledge_base_answers","website_import","document_upload","lead_capture","appointment_booking_path","review_requests","human_handover","proactive_triggers"],"note":"Stable identifiers of what the product does today; each is backed by a code module. Restrictions are under `limitations`, unsuitable use cases under `when_not_to_use`.","status":"available"},"limitations":{"items":["no_direct_calendar_write","white_label_by_contract_only","whatsapp_requires_own_360dialog_account","whatsapp_not_during_trial","whatsapp_not_for_healthcare","review_requests_restricted_by_country_and_profession"],"note":"Documented restrictions that narrow what the product does; they do not rule it out. Read a restriction that is not listed as 'not documented', NOT as 'no restriction'.","status":"available"},"when_not_to_use":{"items":["full_omnichannel_helpdesk","sensitive_context_with_third_country_llm"],"note":"Use cases the product is not built for; fit_assessment returns not_fit for each of them. Markets outside the published website languages return needs_review.","assessment_tool":"smartwebchat_get_fit","rest_url":"https://smartwebchat.eu/api/agents/fit","status":"available"},"countries":{"status":"not_yet_published","note":"The languages the website is published in are under `product_data.languages.website_content_locales`; a country or market list is a different statement and is not published. Do not derive one from the other."},"channels":{"items":["web","whatsapp"],"note":"Channels an assistant can answer on. Channel-specific restrictions are under `limitations`.","status":"available"},"integrations":{"website_platforms":["wordpress","shopify","wix","webflow","squarespace"],"installation_method":"embed_code","booking_providers":["calendly","cal_com"],"booking_model":"booking_path_link","note":"Website platforms with a documented installation path, and the booking tools the assistant links to. Programmatic interfaces are under `agent_interfaces`.","status":"available"},"support_options":{"email":"support@smartwebchat.eu","channels":["email","contact_form"],"contact_url":"https://smartwebchat.eu/de/kontakt","status_url":"https://smartwebchat.eu/api/status","note":"Write to the support address or use the contact form. No response-time commitment is published.","status":"available"},"fit_assessment":{"status":"available","mcp_tool":"smartwebchat_get_fit","rest_url":"https://smartwebchat.eu/api/agents/fit","method":"POST","input_schema_note":"JSON body per the locked fit contract: primary_need (required) plus optional market, locale, website_platform, number_of_client_assistants, requires_white_label, requires_custom_widget_domain, requires_full_omnichannel_inbox, requires_direct_calendar_write, sensitive_professional_context, requested_ai_provider. Unknown fields are rejected. locale takes any well-formed language tag (e.g. 'it', 'fr-CA'); languages without a published website fall back to 'de' for the URLs, and the language never changes the verdict. The full schema is in the MCP tools/list entry and in openapi.json.","bias_disclosure":"This assessment is produced by the vendor about its own product, from approved product facts only. It is self-asserted and not independently verified. It can return not_fit and needs_review; a good_fit is a vendor statement, not a third-party judgement.","no_fetch":"The assessment never fetches the described website; website_platform is echoed as stated."},"quote":{"status":"available","mcp_tool":"smartwebchat_get_quote","rest_url":"https://smartwebchat.eu/api/agents/quote","method":"POST","input_schema_note":"JSON body: plan (business | agency | white_label), optional additional_assistants, additional_seats, expected_messages_per_month (integers, 0 or more). Unknown fields are rejected.","note":"Monthly net figures in EUR from the product-truth layer, each line with its source fact id. White label returns price 'custom'. No checkout link is issued: purchase_options.human_self_service applies."},"purchase_options":{"status":"partial","human_self_service":{"status":"available","note":"A person completes sign-up and checkout in the browser.","registration_url":"https://smartwebchat.eu/de/login?view=register","checkout_url_template":"https://smartwebchat.eu/api/checkout/start?plan={einzelkunde|agentur}&locale={locale}","handoff":{"status":"not_yet_published","note":"Single-use handoff links are built but not enabled yet. Hand the person registration_url."},"preparation":{"status":"available","method":"POST","rest_url":"https://smartwebchat.eu/api/agents/prepare-checkout","input_schema_note":"JSON body: plan (business | agency | white_label), optional locale (any language tag, same rule as fit), additional_assistants, additional_seats, expected_messages_per_month. Unknown fields are rejected.","note":"Returns the quote, the contract versions, the steps and human_confirmation_url. Give that URL to the person; only the person can place the order. The call creates no order and no account."}},"agent_initiated":{"status":"not_supported","note":"There is no machine endpoint that provisions a trial or completes a purchase, and this is a deliberate decision rather than a documentation gap. Hand the person the registration URL above."}},"agent_interfaces":{"status":"available","openapi":{"status":"available","url":"https://smartwebchat.eu/api/openapi.json","auth":"Bearer API key (format swc_...), created by the account owner in the dashboard."},"mcp":{"status":"available","url":"https://smartwebchat.eu/api/mcp","transport":"Streamable HTTP; the same server also runs locally over stdio.","tools":["smartwebchat_service_info","smartwebchat_list_chatbots","smartwebchat_create_chatbot","smartwebchat_chat","smartwebchat_get_leads","smartwebchat_update_lead","smartwebchat_diagnose","smartwebchat_get_fit","smartwebchat_get_quote","smartwebchat_prepare_handoff"],"open_tool":{"name":"smartwebchat_service_info","note":"Answers WITHOUT an API key and describes service, plans, languages and sign-up."},"open_tools":[{"name":"smartwebchat_service_info","note":"Answers WITHOUT an API key and describes service, plans, languages and sign-up."},{"name":"smartwebchat_get_fit","note":"Answers WITHOUT an API key: deterministic fit assessment, self-asserted, can say no."},{"name":"smartwebchat_get_quote","note":"Answers WITHOUT an API key: plan quote with a source fact per figure, no checkout link."},{"name":"smartwebchat_prepare_handoff","note":"Answers WITHOUT an API key: plan quote with a source fact per figure, no checkout link."}]},"ai_plugin_manifest":{"status":"available","url":"https://smartwebchat.eu/.well-known/ai-plugin.json"},"llms_txt":{"status":"available","per_language":{"de":"https://smartwebchat.eu/llms.txt","en":"https://smartwebchat.eu/llms-en.txt","nl":"https://smartwebchat.eu/llms-nl.txt","fr":"https://smartwebchat.eu/llms-fr.txt","es":"https://smartwebchat.eu/llms-es.txt"},"full":"https://smartwebchat.eu/llms-full.txt"},"agent_skills":{"status":"available","index_url":"https://smartwebchat.eu/agents/skills","skills":["smartwebchat-evaluate","smartwebchat-setup","smartwebchat-operate"]},"a2a":{"status":"available","agent_card_url":"https://smartwebchat.eu/.well-known/agent-card.json"}},"how_to_test":{"status":"available","scanner_engine":{"status":"available","method":"POST","url":"https://smartwebchat.eu/api/public/url-preview","request":{"url":"https://example.com","locale":"de|en|nl|fr|es"},"returns":"A demo session id plus what the preview displays (business name, description, pages scanned, whether enough text was found). The scraped page text stays on the server and is not returned.","rate_limit":"5 requests per hour per IP.","note":"No account and no API key required. Full flow: see `agent_demo_contract`."},"agent_demo_contract":{"status":"available","schema_version":"1.0","note":"All steps are POST with a JSON body, need no account and no API key, and carry `schema_version`. They are meant for server-side agents; browser cross-origin access (CORS) is not offered. Every error response carries `code` from `error_codes` next to a human-readable `error`; 429 responses carry `Retry-After`: the hourly window for RATE_LIMITED, the seconds until the daily counter resets at 00:00 UTC for DAILY_CAP. Responses that belong to a session carry `session.expires_in_seconds`. The scraped page text never leaves the server.","steps":[{"name":"scan","method":"POST","url":"https://smartwebchat.eu/api/public/url-preview","request":{"url":"https://example.com","locale":"de|en|nl|fr|es"},"returns":"demoSessionId (keep it; it is the only handle to the session), url, domain, businessName, description, pagesScanned, hasContent.","rate_limit":"5 per hour per IP."},{"name":"status","method":"POST","url":"https://smartwebchat.eu/api/public/url-preview/status","request":{"demoSessionId":"{demoSessionId}"},"returns":"exists, expired, has_content, industry_key, questions_asked, questions_remaining, faqs_prepared. No model call. `exists: false, expired: true` means the id is well-formed but no longer usable (expired, already turned into an account, or never issued): start a new scan. A malformed id answers 404 SESSION_EXPIRED like every other step.","rate_limit":"60 per hour per IP."},{"name":"detect_industry","method":"POST","url":"https://smartwebchat.eu/api/public/url-preview/detect-branch","request":{"demoSessionId":"{demoSessionId}"},"returns":"branch (one of `industries`, or null), confidence 0..1, alternatives. Soft-fails with 200, branch null and `reason` (NOT_ENOUGH_CONTENT, DAILY_CAP, UPSTREAM_FAILED). A detected branch is stored in the session.","rate_limit":"5 per hour per IP."},{"name":"prepare_questions","method":"POST","url":"https://smartwebchat.eu/api/public/url-preview/generate-faqs","request":{"demoSessionId":"{demoSessionId}"},"returns":"questions: 3 suggested visitor questions in the session language, generated from the site text and the stored industry. Stored in the session.","rate_limit":"5 per hour per IP."},{"name":"preview_chat","method":"POST","url":"https://smartwebchat.eu/api/public/url-preview/chat","request":{"demoSessionId":"{demoSessionId}","question":"{text, at most 500 characters}","history":[{"role":"user|assistant","content":"{previous turn}"}]},"returns":"answer, media, questions_asked, questions_remaining. The assistant answers only from the scanned site and identifies itself as an AI. After 5 questions per session the route answers 403 QUESTION_LIMIT.","rate_limit":"20 per hour per IP."},{"name":"set_industry","method":"POST","url":"https://smartwebchat.eu/api/public/url-preview/branche","request":{"demoSessionId":"{demoSessionId}","branche":"{one of industries}"},"returns":"branche as stored. An unknown value is ignored: the response carries branche null and the previously stored industry is kept.","rate_limit":"20 per hour per IP."}],"industries":["anwaelte","apotheken","arztpraxen","fahrschulen","friseure","handwerker","heilmittelpraxen","hotels","immobilien","kfz-werkstaetten","kosmetikstudios","pflegedienste","pflegeheime","physiotherapie","restaurants","sanitaetshaeuser","steuerberater","tieraerzte","versicherungsmakler","zahnaerzte"],"limits":{"questions_per_session":5,"messages_per_session":10,"question_max_chars":500,"suggested_questions":3,"session_ttl_seconds":86400},"error_codes":["RATE_LIMITED","INVALID_URL","UNSUPPORTED_PROTOCOL","BLOCKED_TARGET","SESSION_EXPIRED","NOT_ENOUGH_CONTENT","DAILY_CAP","QUESTION_LIMIT","UPSTREAM_FAILED","INVALID_INPUT"],"human_handoff":{"note":"To continue into a trial hand the person `<registration_url>&demo=<demoSessionId>`; the account is created by the person. The session context (site, industry, questions) is then restored for them. No machine endpoint creates the account.","url_template":"https://smartwebchat.eu/de/login?view=register&demo={demoSessionId}"},"deprecated_endpoints":[]}},"actions":{"available_today":["Read this resource and the linked discovery artefacts without any credential.","Call the MCP tool smartwebchat_service_info without an API key for service, plans and languages.","Call smartwebchat_get_fit (MCP) or POST /api/agents/fit without a key for a self-asserted fit assessment that can say no.","Call smartwebchat_get_quote (MCP) or POST /api/agents/quote without a key for a priced plan with sources.","Scan a public website via the scanner endpoint without an account.","Run the full scanner demo (scan, status, industry, questions, preview chat) via `how_to_test.agent_demo_contract`, without an account.","Use the REST API and the remaining MCP tools with an API key the account owner issued.","Hand a person the registration or checkout URL."],"not_available":[{"action":"agent_initiated_trial_provisioning","status":"not_supported","note":"Deliberate: the trial is started by a person. No machine endpoint exists."},{"action":"agentic_checkout","status":"not_supported","note":"Deliberate: a legally binding purchase requires an act by the customer."},{"action":"structured_capability_and_limitation_data","status":"not_yet_published","note":"Not published yet — see `capabilities` and `limitations`."}]}}