Configuration reference

Every setting the module stores, where it appears, at which scopes it can be set and its default. All paths are under conviro_aichat/. Admin page: Stores › Configuration › Conviro › AI Chat (admin permission Conviro_AiChat::config). Sources: AiChat/etc/adminhtml/system.xml, AiChat/etc/config.xml, AiChat/Model/Config.php (the only class that reads these paths). Why each setting has the scope it has: configuration-scopes.md.

Scope legend: D default (installation-wide), W website, S store view. "Wizard" means the setting is written by the setup wizard and not shown as a field; "module" means written by the module itself.

Saving this section (Save Config) with an API key re-registers the store with Conviro: the integration and its permissions are repaired (the OAuth token is reused), the capabilities and trust policy are sent, events held for credentials are re-queued. (Until 1.4.0 this did not happen: the observer listened to an event Magento never dispatches.) A store that is disconnected is not re-registered by a save unless the save pastes a new key (Reconnect and disconnect).

General Settings

PathAdmin labelScopesDefaultNotes
general/enabledEnableD W S1Off for a store view = no widget and no events queued for it.
general/widget_off_since— (module)DemptySet by Disconnect (UTC time) unless Keep the chat widget on my storefront was ticked: the storefront widget and lead form are off. Cleared by a successful (re)registration.
general/docs_urlDocumentation URLDempty = https://repo.conviro.io/docs/magento2Base of the "how to fix it" links on the Integration Health card and in the setup wizard (<base>/<page>#<anchor>). The default serves these pages (English), from Conviro's API. A value that is not https:// on conviro.io (or a subdomain) is refused by the admin and by bin/magento config:set, and ignored if written to the database some other way; a private or development deployment sets it in app/etc/env.php ('system' => ['default' => ['conviro_aichat' => ['general' => [...]]]]) and runs bin/magento app:config:import (1.4.0, security review R3 M4).
general/api_keyAPI KeyDemptyEncrypted. Normally set by the wizard's Connect to Conviro; a pasted key starts with cvr_. Removed by Disconnect. Pasting or clearing it needs the Conviro Setup permission (1.4.0).
general/connection_statusIntegration HealthD—Not a setting: renders the Integration Health card.
general/public_keyWidget Public KeyD W SemptyThe chatbot's widget key (Conviro › Chatbot › Channels). Filled by the wizard only when empty. Without it the widget is not rendered.
general/api_urlAPI URLD, read-onlyhttps://api.conviro.ioManaged by Conviro; receives the API key and every event. The admin shows it and posts nothing back. A value that is not https:// on conviro.io (or a subdomain) is refused by the admin and by bin/magento config:set, and ignored if written to the database some other way; a private or development deployment sets it in app/etc/env.php ('system' => ['default' => ['conviro_aichat' => ['general' => [...]]]]) and runs bin/magento app:config:import (1.4.0, security review R3 M4).
general/app_urlConviro App URLD, read-onlyhttps://app.conviro.ioWhere Connect to Conviro sends the browser. A value that is not https:// on conviro.io (or a subdomain) is refused by the admin and by bin/magento config:set, and ignored if written to the database some other way; a private or development deployment sets it in app/etc/env.php ('system' => ['default' => ['conviro_aichat' => ['general' => [...]]]]) and runs bin/magento app:config:import (1.4.0, security review R3 M4).
general/enforce_webhook_signatureRequire Signed WebhooksD1Sent on registration. Yes = Conviro refuses unsigned requests from this store on the legacy (≤ 1.3.x) endpoints. 1.4.0 always signs, so the default is Yes and the 1.4.0 upgrade turns a saved No into Yes once (data patch RequireSignedWebhooks); set No only while support diagnoses a delivery problem.
general/tenant_idTenant IDD, read-onlyemptyConviro workspace id, written on connect.
general/chatbot_idChatbot IDD, read-onlyemptyWritten on connect.
general/webhook_secret— (module)DemptyEncrypted; the shared secret an older (pre-R3) Conviro backend issues — signs events both ways. Removed by Disconnect and when Conviro issues per-direction secrets.
general/event_secret— (module)DemptyEncrypted; issued by Conviro on registration (security review R3); signs Magento → Conviro events. Removed by Disconnect.
general/receive_secret— (module)DemptyEncrypted; issued with event_secret; verifies Conviro → Magento webhooks on /conviro/webhook/receive. Removed by Disconnect.
general/auth_mode— (module)Demptyoauth1 or bearer, Conviro's answer on registration. Removed by Disconnect.
general/oauth_error— (module)DemptyWhy OAuth was refused, if it was.

Widget Settings

PathAdmin labelScopesDefaultNotes
widget/positionPositionD W Sbottom-rightbottom-right or bottom-left.
widget/primary_colorPrimary ColorD W S#2563ebHex colour.
widget/loadingLoad the Chat WidgetD W Sinteraction1.4.1. interaction: the bundle loads on the visitor's first tap, click, key press, scroll or focus, or after load_timeout_ms; idle: when the browser is idle (at the latest after load_timeout_ms); immediate: with the page (1.4.0). See Widget loading.
widget/load_timeout_msWidget Fallback Time (ms)D W S40001.4.1. 1000–30000; for interaction and idle.
widget/lead_form_keyLead Form KeyD W SemptyConviro lead form key (clf_…): the form a CMS embed without its own key shows, and the form On every page shows. Where it appears is lead_form_placement.
widget/lead_form_placementLead Form PlacementD W Sembed1.4.1. embed: only where a CMS page / block or layout embeds it; all_pages: the key's form on every page plus embeds (1.4.0 behaviour); widget: no form on the page, lead capture inside the chat widget; off: none. New installs: embed. The upgrade to 1.4.1 saves all_pages at every scope where a key was saved (data patch PreserveLeadFormPlacement), so an upgraded store shows its form where it did before. One bundle per page, one render per form.
widget/greeting_logged_inGreeting (Logged-in)D W Sempty{firstName} and {name} are replaced in the browser.
widget/greeting_guestGreeting (Guest)D W Sempty

Widget loading

1.4.0 loaded the chat widget with the page and fetched the CDN's version.json uncached on every page view before requesting the bundle. 1.4.1:

Sync Activity

activity/log (Recent Events) is not a setting: it lists recent outbox events.

Sync Settings

Read for the store view the event belongs to, so a website value overrides the default (configuration-scopes.md).

PathAdmin labelScopesDefaultControls
sync/order_eventsSend Order EventsD W1order.* events and the order-history job. Chat order lookups work either way.
sync/product_syncSync Products to KBD W0product.* events (per website) and inventory.updated (default scope); the catalog and inventory re-syncs. Wizard step 5 Catalog switches it on.
sync/customer_leadCreate Leads on RegistrationD W1customer.created — a storefront registration becomes a lead in Conviro.
sync/cart_recoveryAbandoned Cart RecoveryD Woffcart.updated, only together with sync/cart_recovery_confirmed. The default-scope value (with the confirmation) is also the workspace's cartRecovery capability that lets Conviro send the recovery e-mail.
sync/payment_assistPayment Failure AssistanceD Woffpayment.failed, only together with sync/payment_assist_confirmed. The default-scope value (with the confirmation) is also the workspace's paymentAssist capability: whether Conviro may offer the shopper help once after a failed payment (Payment assist).
sync/cart_urlCart page URL (headless stores)D W SemptyThe recovery e-mail's link for this store view; empty = the store view's own checkout/cart URL. Absolute http(s) only.
sync/cart_recovery_confirmedConfirm cart data sharingD0Your confirmation that cart contents and the shopper's e-mail may go to Conviro. Until Yes, no cart event is sent even with the toggle on.
sync/payment_assist_confirmedConfirm payment-failure data sharingD0Same for failed-payment data.
sync/confirmation_required_since— (module)DemptyWhen the 1.4.0 upgrade held a toggle that was already on.
sync/product_utm_enabledTag product links with UTMD W S1Adds UTM parameters to productUrl in product events.
sync/product_utm_sourceutm_sourceD W SemptyEmpty = the store code.
sync/product_utm_mediumutm_mediumD W Schat
sync/product_utm_campaignutm_campaignD W Sproduct_card
sync/attributionRevenue attributionD W1The widget may keep its two first-party attribution cookies (only on a positive consent signal) and their ids are added to order.placed / checkout.started / payment.failed (Privacy).
sync/attribution_without_consentAttribution cookies without a consent signalD W0Security review R3. Yes = the widget also writes the cookies on a page with no consent signal and no consent platform at all — only for regions where analytics cookies need no consent. A refusal, a platform still loading or an unreadable platform still means no cookie.

Signed Customer Identity (beta)

1.5.0 (unreleased). Read 2026-09-27 on feat/magento-1.5.0-customer-hub and feat/magento-1.5.0-p34-module. Group identity; website scope; every switch off by default, and changing one needs the Conviro Setup permission (Conviro_AiChat::setup) — a forged save without it is refused. Nothing changes for shoppers until Conviro also switches the feature on for your workspace (table below). What it does: Signed customer identity and My orders.

PathAdmin labelScopesDefaultNotes
identity/customer_experienceCustomer Experience & IdentityD—Not a setting: renders the Customer Experience & Identity card (also on Stores › Settings › Conviro Setup).
identity/enabledEnable signed customer identityD W0On for a website = a signed-in shopper's widget may ask the store (GET /conviro/identity/bootstrap) for a 60-second signed assertion of their customer id and store view. The first save with it on anywhere creates the key pair and installation id and registers the public key with Conviro. The bootstrap answers 404 on a website where it is off, and where the widget does not render.
identity/my_orders_enabledShow verified shoppers their own ordersD W0Works only with identity/enabled on the same website. On for at least one website = the store announces myOrders and the Conviro AI Chat integration is granted Conviro_AiChat::api_customer_orders at the next registration (Save Config); off everywhere = the grant is withdrawn.
identity/order_scopeOrders a verified shopper seesD Wstore_viewstore_view = only orders placed in the store view the shopper signed in to; website = every store view of that website. No global option.
identity/guest_verification_enabledAsk guests for a one-time code before showing an orderD W0Independent of signed identity. On for a website = the store announces guestVerification. The Conviro side is not built yet (2026-09-27): guests keep today's lookup.

Written by the module, never shown as fields (default scope):

PathMeaning
identity/installation_idUUID generated once; the assertion's issuer is magento:<installation id>.
identity/signing_keyThe Ed25519 secret key, encrypted with the store's crypt/key. Never rendered, never sent.
identity/public_key, identity/key_idThe public key and its kid (base64url of the first 16 bytes of its SHA-256).
identity/previous_key_id, identity/rotated_atThe key a rotation replaced and when.
identity/integration_idConviro's integration id, returned by the key registration.
identity/key_state, identity/key_erroroff, not_registered, registered, backend_unsupported, refused, failed, sodium_missing, and the last error. The card and module-health also report reset_pending (read from identity/reset_pending).
identity/reset_pendingA Reset identity whose outcome is not known yet (1.5.0, owner decision 2026-09-27): JSON {requestId, startedAt, adminId, attempts}, written before Conviro is called and cleared when Conviro confirmed or (first attempt) refused it. While set, nothing signs. Written by the module only; never set it by hand — click Reset identity again to settle it.
identity/registered_for, identity/registered_at, identity/registered_kidThe last key registration with Conviro: for which connection, when, and which key.
identity_key/created_atWhen the current key pair was created (UTC); the card's key age. Older installs fall back to registered_at.

Set at Conviro, per workspace (not in Magento; ask Conviro support):

Platform flagOpensDefault
magento_identity_bridgesigned customer identityoff (missing = off)
magento_my_ordersMy orders for verified shoppersoff
magento_guest_otpguest one-time code (not built yet)off
magento_verified_actionsverified shoppers' cancel / return requests (not built yet)off

AI Capabilities

Settings of your Conviro workspace, sent on every registration, so default scope only. Full meaning: AI permissions and the action policy.

PathAdmin labelDefaultSent to Conviro as
capabilities/allow_order_lookupOrder status & tracking lookup1allowOrderLookup
capabilities/allow_stock_checkLive stock & availability1allowStockCheck
capabilities/allow_product_searchProduct search & pricing1allowProductSearch
capabilities/allow_returnsReturns & RMA assistance1allowReturns
capabilities/allow_recommendationsProduct recommendations (cross-sell)1allowRecommendations
capabilities/allow_order_actionsOrder-action assistance (cancel, hold, comment; returns and B2B quotes on Adobe Commerce)0allowOrderActions; also grants Magento_Sales::cancel, ::hold, ::comment to the integration and, where the installation's ACL tree has them (Adobe Commerce), Magento_Rma::magento_rma and Magento_NegotiableQuote::manage with their parents
capabilities/return_window_daysReturn window (days)emptyreturnWindowDays, only when a positive whole number
capabilities/warranty_monthsWarranty length (months)emptywarrantyMonths, only when a positive whole number

A fresh install that never saved these reads the defaults above.

Written by the setup wizard (not shown as fields)

PathScopeDefaultMeaning
stores/modeDallall = every store view including future ones; selected = only stores/selected.
stores/selectedDemptyComma-separated store view ids.
stores/saved_atDemptyWhen the selection was last saved; empty = never (then all applies and no mapping is re-sent on registration).
initial_sync/catalogDon until savedStep 5 choice.
initial_sync/inventoryDon until saved
initial_sync/customersDoffAlso the switch that allows the customer-import job to run.
initial_sync/ordersDon until saved
initial_sync/orders_window_daysD900 (none), 30, 90 or 365.
initial_sync/quotesDoff
initial_sync/requested_atDemptyWhen step 5 was saved.

State outside core_config_data

Lifecycle state that is not a setting lives in Magento's flag table: conviro_setup_state (wizard progress), conviro_setup_environment and conviro_setup_verify (last step 1 / step 7 results), conviro_connection_state, conviro_pending_disconnect, conviro_oauth_migration.

Checking for values at scopes that are no longer read

1.3.x offered website/store-view fields for settings that 1.4.0 reads at default scope only. Such values stay in the database but are ignored:

SELECT scope, scope_id, path FROM core_config_data
WHERE path LIKE 'conviro_aichat/%' AND scope <> 'default';